GStreamer

 view release on metacpan or  search on metacpan

xs/GstQuery.xs  view on Meta::CPAN


	    case GST_QUERY_CONVERT:
		package = "GStreamer::Query::Convert";
		break;

	    case GST_QUERY_FORMATS:
		package = "GStreamer::Query::Formats";
		break;

	    case GST_QUERY_NONE:
		break;

	    default:
		/* Happens for dynamically registered types, for example.  Use
		 * the standard package. */
		break;
	}

	return package;
}

/* ------------------------------------------------------------------------- */

MODULE = GStreamer::Query	PACKAGE = GStreamer::QueryType	PREFIX = gst_query_type_

=for object GStreamer::QueryType Dynamically register new query types. Provide functions to create queries, and to set and parse values in them.

=cut

BOOT:
	gst2perl_register_mini_object_package_lookup_func (
		GST_TYPE_QUERY,
		(Gst2PerlMiniObjectPackageLookupFunc) get_package);

=for apidoc __function__
=cut
# GstQueryType gst_query_type_register (const gchar *nick, const gchar *description);
GstQueryType
gst_query_type_register (nick, description)
	const gchar *nick
	const gchar *description

=for apidoc __function__
=cut
# GstQueryType gst_query_type_get_by_nick (const gchar *nick);
GstQueryType
gst_query_type_get_by_nick (nick)
	const gchar *nick

# FIXME?
# gboolean gst_query_types_contains (const GstQueryType *types, GstQueryType type);

=for apidoc __function__
=cut
# G_CONST_RETURN GstQueryTypeDefinition* gst_query_type_get_details (GstQueryType type);
void
gst_query_type_get_details (type)
	GstQueryType type
    PREINIT:
	const GstQueryTypeDefinition *details;
    PPCODE:
	details = gst_query_type_get_details (type);
	if (details) {
		EXTEND (sp, 3);
		PUSHs (sv_2mortal (newSVGstQueryType (details->value)));
		PUSHs (sv_2mortal (newSVGChar (details->nick)));
		PUSHs (sv_2mortal (newSVGChar (details->description)));
	}

# FIXME: Need to somehow apply our converter to the content.
# GstIterator * gst_query_type_iterate_definitions (void);

# --------------------------------------------------------------------------- #

MODULE = GStreamer::Query	PACKAGE = GStreamer::Query	PREFIX = gst_query_

=for object GStreamer::Query Dynamically register new query types. Provide functions to create queries, and to set and parse values in them.

=cut

BOOT:
	gperl_set_isa ("GStreamer::Query::Position", "GStreamer::Query");
	gperl_set_isa ("GStreamer::Query::Duration", "GStreamer::Query");
	gperl_set_isa ("GStreamer::Query::Latency", "GStreamer::Query");
	gperl_set_isa ("GStreamer::Query::Jitter", "GStreamer::Query");
	gperl_set_isa ("GStreamer::Query::Rate", "GStreamer::Query");
	gperl_set_isa ("GStreamer::Query::Seeking", "GStreamer::Query");
	gperl_set_isa ("GStreamer::Query::Segment", "GStreamer::Query");
	gperl_set_isa ("GStreamer::Query::Convert", "GStreamer::Query");
	gperl_set_isa ("GStreamer::Query::Formats", "GStreamer::Query");

=for position DESCRIPTION

=head1 DESCRIPTION

The various query types are represented as subclasses:

=over

=item GStreamer::Query::Position

=item GStreamer::Query::Duration

=item GStreamer::Query::Latency

=item GStreamer::Query::Jitter

=item GStreamer::Query::Rate

=item GStreamer::Query::Seeking

=item GStreamer::Query::Segment

=item GStreamer::Query::Convert

=item GStreamer::Query::Formats

=back

To create a new query, you call the constructor of the corresponding class.

To modify or retrieve the content of a query, call the corresponding mutator:

  my $query = GStreamer::Query::Position -> new("time");
  $query -> position("time", 23);
  my ($format, $position) = $query -> position;

  my $query = GStreamer::Query::Duration -> new("time");
  $query -> duration("time", 23);
  my ($format, $duration) = $query -> duration;

=cut

# DESTROY inherited from GStreamer::MiniObject.

# query still owns the structure.
GstStructure * gst_query_get_structure (GstQuery *query);

# --------------------------------------------------------------------------- #

MODULE = GStreamer::Query	PACKAGE = GStreamer::Query::Position

=for object GStreamer::Query::Position Dynamically register new query types. Provide functions to create queries, and to set and parse values in them.

=cut

# GstQuery* gst_query_new_position (GstFormat format);
GstQuery_noinc *
new (class, GstFormat format)
    CODE:
	RETVAL = gst_query_new_position (format);
    OUTPUT:
	RETVAL

# void gst_query_set_position (GstQuery *query, GstFormat format, gint64 cur);
# void gst_query_parse_position (GstQuery *query, GstFormat *format, gint64 *cur);
void
position (GstQuery *query, GstFormat format=0, gint64 cur=0)
    PREINIT:
	GstFormat old_format;
	gint64 old_cur;
    PPCODE:
	gst_query_parse_position (query, &old_format, &old_cur);
	if (items == 3)
		gst_query_set_position (query, format, cur);
	EXTEND (sp, 2);
	PUSHs (sv_2mortal (newSVGstFormat (old_format)));
	PUSHs (sv_2mortal (newSVGInt64 (old_cur)));

# --------------------------------------------------------------------------- #

MODULE = GStreamer::Query	PACKAGE = GStreamer::Query::Duration

=for object GStreamer::Query::Duration Dynamically register new query types. Provide functions to create queries, and to set and parse values in them.

=cut

# GstQuery* gst_query_new_duration (GstFormat format);
GstQuery_noinc *
new (class, GstFormat format)
    CODE:
	RETVAL = gst_query_new_duration (format);
    OUTPUT:
	RETVAL

# void gst_query_set_duration (GstQuery *query, GstFormat format, gint64 duration);
# void gst_query_parse_duration (GstQuery *query, GstFormat *format, gint64 *duration);
void
duration (GstQuery *query, GstFormat format=0, gint64 duration=0)
    PREINIT:
	GstFormat old_format;
	gint64 old_duration;
    PPCODE:
	gst_query_parse_duration (query, &old_format, &old_duration);
	if (items == 3)
		gst_query_set_duration (query, format, duration);
	EXTEND (sp, 2);
	PUSHs (sv_2mortal (newSVGstFormat (old_format)));
	PUSHs (sv_2mortal (newSVGInt64 (old_duration)));

# --------------------------------------------------------------------------- #

MODULE = GStreamer::Query	PACKAGE = GStreamer::Query::Convert

=for object GStreamer::Query::Convert Dynamically register new query types. Provide functions to create queries, and to set and parse values in them.

=cut

# GstQuery* gst_query_new_convert (GstFormat src_format, gint64 value, GstFormat dest_format);
GstQuery_noinc *
new (class, GstFormat src_format, gint64 value, GstFormat dest_format)
    CODE:
	RETVAL = gst_query_new_convert (src_format, value, dest_format);
    OUTPUT:
	RETVAL

# void gst_query_set_convert (GstQuery *query, GstFormat src_format, gint64 src_value, GstFormat dest_format, gint64 dest_value);
# void gst_query_parse_convert (GstQuery *query, GstFormat *src_format, gint64 *src_value, GstFormat *dest_format, gint64 *dest_value);
void
convert (GstQuery *query, GstFormat src_format=0, gint64 src_value=0, GstFormat dest_format=0, gint64 dest_value=0)
    PREINIT:
	GstFormat old_src_format;
	gint64 old_src_value;
	GstFormat old_dest_format;
	gint64 old_dest_value;
    PPCODE:
	gst_query_parse_convert (query, &old_src_format, &old_src_value, &old_dest_format, &old_dest_value);
	if (items == 5)
		gst_query_set_convert (query, src_format, src_value, dest_format, dest_value);
	EXTEND (sp, 4);
	PUSHs (sv_2mortal (newSVGstFormat (old_src_format)));
	PUSHs (sv_2mortal (newSVGInt64 (old_src_value)));
	PUSHs (sv_2mortal (newSVGstFormat (old_dest_format)));
	PUSHs (sv_2mortal (newSVGInt64 (old_dest_value)));

# --------------------------------------------------------------------------- #

MODULE = GStreamer::Query	PACKAGE = GStreamer::Query::Segment

=for object GStreamer::Query::Segment Dynamically register new query types. Provide functions to create queries, and to set and parse values in them.

=cut

# GstQuery* gst_query_new_segment (GstFormat format);
GstQuery_noinc *
new (class, GstFormat format)
    CODE:
	RETVAL = gst_query_new_segment (format);
    OUTPUT:
	RETVAL

# void gst_query_set_segment (GstQuery *query, gdouble rate, GstFormat format, gint64 start_value, gint64 stop_value);
# void gst_query_parse_segment (GstQuery *query, gdouble *rate, GstFormat *format, gint64 *start_value, gint64 *stop_value);
void
segment (GstQuery *query, gdouble rate=0.0, GstFormat format=0, gint64 start_value=0, gint64 stop_value=0)
    PREINIT:
	gdouble old_rate;
	GstFormat old_format;
	gint64 old_start_value;
	gint64 old_stop_value;
    PPCODE:
	gst_query_parse_segment (query, &old_rate, &old_format, &old_start_value, &old_stop_value);
	if (items == 5)
		gst_query_set_segment (query, rate, format, start_value, stop_value);
	EXTEND (sp, 4);
	PUSHs (sv_2mortal (newSVnv (old_rate)));
	PUSHs (sv_2mortal (newSVGstFormat (old_format)));
	PUSHs (sv_2mortal (newSVGInt64 (old_start_value)));
	PUSHs (sv_2mortal (newSVGInt64 (old_stop_value)));

# --------------------------------------------------------------------------- #

MODULE = GStreamer::Query	PACKAGE = GStreamer::Query::Application

=for object GStreamer::Query::Application Dynamically register new query types. Provide functions to create queries, and to set and parse values in them.

=cut

# GstQuery * gst_query_new_application (GstQueryType type, GstStructure *structure);
GstQuery_noinc *
new (class, GstQueryType type, GstStructure *structure)
    CODE:
	/* RETVAL owns structure. */
	RETVAL = gst_query_new_application (type, structure);
    OUTPUT:
	RETVAL

# void gst_query_set_seeking (GstQuery *query, GstFormat format, gboolean seekable, gint64 segment_start, gint64 segment_end);
# void gst_query_set_formats (GstQuery *query, gint n_formats, ...);



( run in 1.116 second using v1.01-cache-2.11-cpan-5511b514fd6 )