mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-22 08:17:01 +00:00
Add length querying
Original commit message from CVS: Add length querying
This commit is contained in:
parent
3be60ae602
commit
b534ea2616
1 changed files with 14 additions and 36 deletions
|
@ -102,9 +102,11 @@ gst_swfdec_request_new_pad (GstElement *element, GstPadTemplate *templ,
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
static gboolean gst_swfdec_src_event (GstPad *pad, GstEvent *event);
|
static gboolean gst_swfdec_src_event (GstPad *pad, GstEvent *event);
|
||||||
|
#endif
|
||||||
static gboolean gst_swfdec_src_query (GstPad *pad, GstQueryType type,
|
static gboolean gst_swfdec_src_query (GstPad *pad, GstQueryType type,
|
||||||
GstFormat *format, gint64 *value);
|
GstFormat *format, gint64 *value);
|
||||||
|
|
||||||
|
#if 0
|
||||||
static gboolean gst_swfdec_convert_sink (GstPad *pad, GstFormat src_format, gint64 src_value,
|
static gboolean gst_swfdec_convert_sink (GstPad *pad, GstFormat src_format, gint64 src_value,
|
||||||
GstFormat *dest_format, gint64 *dest_value);
|
GstFormat *dest_format, gint64 *dest_value);
|
||||||
static gboolean gst_swfdec_convert_src (GstPad *pad, GstFormat src_format, gint64 src_value,
|
static gboolean gst_swfdec_convert_src (GstPad *pad, GstFormat src_format, gint64 src_value,
|
||||||
|
@ -473,18 +475,19 @@ gst_swfdec_loop(GstElement *element)
|
||||||
swfdec = GST_SWFDEC(element);
|
swfdec = GST_SWFDEC(element);
|
||||||
|
|
||||||
if(!swfdec->videopad){
|
if(!swfdec->videopad){
|
||||||
printf("creating videopad\n");
|
|
||||||
swfdec->videopad =
|
swfdec->videopad =
|
||||||
gst_pad_new_from_template(
|
gst_pad_new_from_template(
|
||||||
GST_PAD_TEMPLATE_GET(video_template_factory),
|
GST_PAD_TEMPLATE_GET(video_template_factory),
|
||||||
"video_00");
|
"video_00");
|
||||||
printf("videopad=%p\n",swfdec->videopad);
|
gst_pad_set_query_function (swfdec->videopad,
|
||||||
|
GST_DEBUG_FUNCPTR (gst_swfdec_src_query));
|
||||||
swfdec->audiopad =
|
swfdec->audiopad =
|
||||||
gst_pad_new_from_template(
|
gst_pad_new_from_template(
|
||||||
GST_PAD_TEMPLATE_GET(audio_template_factory),
|
GST_PAD_TEMPLATE_GET(audio_template_factory),
|
||||||
"audio_00");
|
"audio_00");
|
||||||
|
gst_pad_set_query_function (swfdec->audiopad,
|
||||||
|
GST_DEBUG_FUNCPTR (gst_swfdec_src_query));
|
||||||
|
|
||||||
printf("setting caps\n");
|
|
||||||
#if 0
|
#if 0
|
||||||
gst_pad_try_set_caps(swfdec->videopad,
|
gst_pad_try_set_caps(swfdec->videopad,
|
||||||
gst_pad_get_pad_template_caps(swfdec->videopad));
|
gst_pad_get_pad_template_caps(swfdec->videopad));
|
||||||
|
@ -850,16 +853,12 @@ gst_swfdec_convert_src (GstPad *pad, GstFormat src_format, gint64 src_value,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 0
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_swfdec_src_query (GstPad *pad, GstQueryType type,
|
gst_swfdec_src_query (GstPad *pad, GstQueryType type,
|
||||||
GstFormat *format, gint64 *value)
|
GstFormat *format, gint64 *value)
|
||||||
{
|
{
|
||||||
gboolean res = TRUE;
|
gboolean res = TRUE;
|
||||||
GstSwfdec *swfdec;
|
GstSwfdec *swfdec;
|
||||||
static const GstFormat formats[] = { GST_FORMAT_TIME, GST_FORMAT_BYTES };
|
|
||||||
#define MAX_SEEK_FORMATS 1 /* we can only do time seeking for now */
|
|
||||||
gint i;
|
|
||||||
|
|
||||||
swfdec = GST_SWFDEC (gst_pad_get_parent (pad));
|
swfdec = GST_SWFDEC (gst_pad_get_parent (pad));
|
||||||
|
|
||||||
|
@ -871,33 +870,15 @@ gst_swfdec_src_query (GstPad *pad, GstQueryType type,
|
||||||
*format = GST_FORMAT_TIME;
|
*format = GST_FORMAT_TIME;
|
||||||
/* fallthrough */
|
/* fallthrough */
|
||||||
case GST_FORMAT_TIME:
|
case GST_FORMAT_TIME:
|
||||||
case GST_FORMAT_BYTES:
|
|
||||||
case GST_FORMAT_UNITS:
|
|
||||||
{
|
{
|
||||||
|
int n_frames;
|
||||||
|
int ret;
|
||||||
|
|
||||||
res = FALSE;
|
res = FALSE;
|
||||||
|
ret = swfdec_decoder_get_n_frames(swfdec->state, &n_frames);
|
||||||
for (i = 0; i < MAX_SEEK_FORMATS && !res; i++) {
|
if(ret == SWF_OK){
|
||||||
GstFormat peer_format;
|
*value = n_frames * swfdec->interval;
|
||||||
gint64 peer_value;
|
res = TRUE;
|
||||||
|
|
||||||
peer_format = formats[i];
|
|
||||||
|
|
||||||
/* do the probe */
|
|
||||||
if (gst_pad_query (GST_PAD_PEER (swfdec->sinkpad), GST_QUERY_TOTAL,
|
|
||||||
&peer_format, &peer_value))
|
|
||||||
{
|
|
||||||
GstFormat conv_format;
|
|
||||||
|
|
||||||
/* convert to TIME */
|
|
||||||
conv_format = GST_FORMAT_TIME;
|
|
||||||
res = gst_pad_convert (swfdec->sinkpad,
|
|
||||||
peer_format, peer_value,
|
|
||||||
&conv_format, value);
|
|
||||||
/* and to final format */
|
|
||||||
res &= gst_pad_convert (pad,
|
|
||||||
GST_FORMAT_TIME, *value,
|
|
||||||
format, value);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -914,9 +895,7 @@ gst_swfdec_src_query (GstPad *pad, GstQueryType type,
|
||||||
*format = GST_FORMAT_TIME;
|
*format = GST_FORMAT_TIME;
|
||||||
/* fallthrough */
|
/* fallthrough */
|
||||||
default:
|
default:
|
||||||
res = gst_pad_convert (pad,
|
res = FALSE;
|
||||||
GST_FORMAT_TIME, swfdec->next_time,
|
|
||||||
format, value);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -928,7 +907,6 @@ gst_swfdec_src_query (GstPad *pad, GstQueryType type,
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
static gboolean
|
static gboolean
|
||||||
|
|
Loading…
Reference in a new issue