mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-18 14:26:43 +00:00
baseaudiodecoder: cater for audio-codec tag
This commit is contained in:
parent
1dbbe7c89d
commit
0c33df6540
1 changed files with 28 additions and 0 deletions
|
@ -150,6 +150,7 @@
|
||||||
#include "gstbaseaudiodecoder.h"
|
#include "gstbaseaudiodecoder.h"
|
||||||
#include <gst/audio/audio.h>
|
#include <gst/audio/audio.h>
|
||||||
#include <gst/base/gstadapter.h>
|
#include <gst/base/gstadapter.h>
|
||||||
|
#include <gst/pbutils/descriptions.h>
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
@ -212,6 +213,8 @@ struct _GstBaseAudioDecoderPrivate
|
||||||
guint64 samples_out;
|
guint64 samples_out;
|
||||||
/* bytes flushed during parsing */
|
/* bytes flushed during parsing */
|
||||||
guint sync_flush;
|
guint sync_flush;
|
||||||
|
/* codec id tag */
|
||||||
|
GstTagList *taglist;
|
||||||
|
|
||||||
/* whether circumstances allow output aggregation */
|
/* whether circumstances allow output aggregation */
|
||||||
gint agg;
|
gint agg;
|
||||||
|
@ -386,6 +389,11 @@ gst_base_audio_decoder_reset (GstBaseAudioDecoder * dec, gboolean full)
|
||||||
g_free (dec->ctx->state.channel_pos);
|
g_free (dec->ctx->state.channel_pos);
|
||||||
memset (dec->ctx, 0, sizeof (dec->ctx));
|
memset (dec->ctx, 0, sizeof (dec->ctx));
|
||||||
|
|
||||||
|
if (dec->priv->taglist) {
|
||||||
|
gst_tag_list_free (dec->priv->taglist);
|
||||||
|
dec->priv->taglist = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
gst_segment_init (&dec->segment, GST_FORMAT_TIME);
|
gst_segment_init (&dec->segment, GST_FORMAT_TIME);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -476,6 +484,14 @@ gst_base_audio_decoder_sink_setcaps (GstPad * pad, GstCaps * caps)
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (dec, "caps: %" GST_PTR_FORMAT, caps);
|
GST_DEBUG_OBJECT (dec, "caps: %" GST_PTR_FORMAT, caps);
|
||||||
|
|
||||||
|
/* NOTE pbutils only needed here */
|
||||||
|
/* TODO maybe (only) upstream demuxer/parser etc should handle this ? */
|
||||||
|
if (dec->priv->taglist)
|
||||||
|
gst_tag_list_free (dec->priv->taglist);
|
||||||
|
dec->priv->taglist = gst_tag_list_new ();
|
||||||
|
gst_pb_utils_add_codec_description_to_tag_list (dec->priv->taglist,
|
||||||
|
GST_TAG_AUDIO_CODEC, caps);
|
||||||
|
|
||||||
if (klass->set_format)
|
if (klass->set_format)
|
||||||
res = klass->set_format (dec, caps);
|
res = klass->set_format (dec, caps);
|
||||||
|
|
||||||
|
@ -741,6 +757,18 @@ gst_base_audio_decoder_finish_frame (GstBaseAudioDecoder * dec, GstBuffer * buf,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (G_LIKELY (buf)) {
|
if (G_LIKELY (buf)) {
|
||||||
|
|
||||||
|
/* delayed one-shot stuff until confirmed data */
|
||||||
|
if (priv->taglist) {
|
||||||
|
GST_DEBUG_OBJECT (dec, "codec tag %" GST_PTR_FORMAT, priv->taglist);
|
||||||
|
if (gst_tag_list_is_empty (priv->taglist)) {
|
||||||
|
gst_tag_list_free (priv->taglist);
|
||||||
|
} else {
|
||||||
|
gst_element_found_tags (GST_ELEMENT (dec), priv->taglist);
|
||||||
|
}
|
||||||
|
priv->taglist = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
buf = gst_buffer_make_metadata_writable (buf);
|
buf = gst_buffer_make_metadata_writable (buf);
|
||||||
if (G_LIKELY (GST_CLOCK_TIME_IS_VALID (priv->base_ts))) {
|
if (G_LIKELY (GST_CLOCK_TIME_IS_VALID (priv->base_ts))) {
|
||||||
GST_BUFFER_TIMESTAMP (buf) =
|
GST_BUFFER_TIMESTAMP (buf) =
|
||||||
|
|
Loading…
Reference in a new issue