diff options
Diffstat (limited to 'gst/aacparse/gstaacparse.c')
-rw-r--r-- | gst/aacparse/gstaacparse.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/gst/aacparse/gstaacparse.c b/gst/aacparse/gstaacparse.c index 6db4b6197..3f15a627a 100644 --- a/gst/aacparse/gstaacparse.c +++ b/gst/aacparse/gstaacparse.c @@ -200,6 +200,7 @@ gst_aacparse_finalize (GObject * object) /** * gst_aacparse_set_src_caps: * @aacparse: #GstAacParse. + * @sink_caps: (proposed) caps of sink pad * * Set source pad caps according to current knowledge about the * audio stream. @@ -207,13 +208,12 @@ gst_aacparse_finalize (GObject * object) * Returns: TRUE if caps were successfully set. */ static gboolean -gst_aacparse_set_src_caps (GstAacParse * aacparse) +gst_aacparse_set_src_caps (GstAacParse * aacparse, GstCaps * sink_caps) { GstStructure *s; - GstCaps *sink_caps, *src_caps = NULL; + GstCaps *src_caps = NULL; gboolean res = FALSE; - sink_caps = GST_PAD_CAPS (GST_BASE_PARSE (aacparse)->sinkpad); GST_DEBUG_OBJECT (aacparse, "sink caps: %" GST_PTR_FORMAT, sink_caps); if (sink_caps) src_caps = gst_caps_copy (sink_caps); @@ -282,6 +282,10 @@ gst_aacparse_sink_setcaps (GstBaseParse * parse, GstCaps * caps) GST_DEBUG ("codec_data: object_type=%d, sample_rate=%d, channels=%d", aacparse->object_type, aacparse->sample_rate, aacparse->channels); + + /* arrange for metadata and get out of the way */ + gst_aacparse_set_src_caps (aacparse, caps); + gst_base_parse_set_passthrough (parse, TRUE); } else return FALSE; } @@ -680,7 +684,8 @@ gst_aacparse_parse_frame (GstBaseParse * parse, GstBuffer * buffer) aacparse->bytecount += GST_BUFFER_SIZE (buffer); if (!aacparse->src_caps_set) { - if (!gst_aacparse_set_src_caps (aacparse)) { + if (!gst_aacparse_set_src_caps (aacparse, + GST_PAD_CAPS (GST_BASE_PARSE (aacparse)->sinkpad))) { /* If linking fails, we need to return appropriate error */ ret = GST_FLOW_NOT_LINKED; } @@ -713,6 +718,7 @@ gst_aacparse_start (GstBaseParse * parse) aacparse->ts = 0; aacparse->sync = FALSE; aacparse->eos = FALSE; + gst_base_parse_set_passthrough (parse, FALSE); return TRUE; } |