diff options
author | Sebastian Dröge <slomo@circular-chaos.org> | 2006-08-24 09:24:11 +0000 |
---|---|---|
committer | Tim-Philipp Müller <tim@centricular.net> | 2006-08-24 09:24:11 +0000 |
commit | 93ccc87f1dc1a3f95b8fb90a57f2513ef4efa466 (patch) | |
tree | 8095b5b25509516cbce5cbb5920dd1a6db067c0e | |
parent | a411f9e71ac0f023218be100081395c8bbed88fd (diff) | |
download | gst-plugins-bad-93ccc87f1dc1a3f95b8fb90a57f2513ef4efa466.tar.gz gst-plugins-bad-93ccc87f1dc1a3f95b8fb90a57f2513ef4efa466.tar.bz2 gst-plugins-bad-93ccc87f1dc1a3f95b8fb90a57f2513ef4efa466.zip |
ext/wavpack/gstwavpackdec.c: Post audio codec and average bitrate tags on bus (#344472).
Original commit message from CVS:
Patch by: Sebastian Dröge <slomo at circular-chaos.org>
* ext/wavpack/gstwavpackdec.c: (gst_wavpack_dec_post_tags),
(gst_wavpack_dec_chain):
Post audio codec and average bitrate tags on bus (#344472).
* ext/wavpack/gstwavpackparse.c: (gst_wavpack_parse_base_init),
(gst_wavpack_parse_src_query):
Forward queries in other formats (BYTE format in particular)
upstream; add Sebastian to authors.
-rw-r--r-- | ChangeLog | 14 | ||||
-rw-r--r-- | ext/wavpack/gstwavpackdec.c | 31 | ||||
-rw-r--r-- | ext/wavpack/gstwavpackparse.c | 9 |
3 files changed, 50 insertions, 4 deletions
@@ -1,3 +1,16 @@ +2006-08-24 Tim-Philipp Müller <tim at centricular dot net> + + Patch by: Sebastian Dröge <slomo at circular-chaos.org> + + * ext/wavpack/gstwavpackdec.c: (gst_wavpack_dec_post_tags), + (gst_wavpack_dec_chain): + Post audio codec and average bitrate tags on bus (#344472). + + * ext/wavpack/gstwavpackparse.c: (gst_wavpack_parse_base_init), + (gst_wavpack_parse_src_query): + Forward queries in other formats (BYTE format in particular) + upstream; add Sebastian to authors. + 2006-08-23 Edgard Lima <edgard.lima@indt.org.br> * sys/v4l2/gstv4l2src.c: @@ -5,7 +18,6 @@ * sys/v4l2/v4l2src_calls.h: Fix set_caps to set width and height to the values the driver is really working with. - 2006-08-23 Tim-Philipp Müller <tim at centricular dot net> diff --git a/ext/wavpack/gstwavpackdec.c b/ext/wavpack/gstwavpackdec.c index 1962c9b9..88074e80 100644 --- a/ext/wavpack/gstwavpackdec.c +++ b/ext/wavpack/gstwavpackdec.c @@ -236,6 +236,33 @@ gst_wavpack_dec_clip_outgoing_buffer (GstWavpackDec * dec, GstBuffer * buf) return TRUE; } +static void +gst_wavpack_dec_post_tags (GstWavpackDec * dec, WavpackHeader * wph) +{ + GstTagList *list; + GstFormat format_time = GST_FORMAT_TIME, format_bytes = GST_FORMAT_BYTES; + gint64 duration, size; + + list = gst_tag_list_new (); + + gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, + GST_TAG_AUDIO_CODEC, "Wavpack", NULL); + + /* try to estimate the average bitrate */ + if (gst_pad_query_peer_duration (dec->sinkpad, &format_bytes, &size) && + gst_pad_query_peer_duration (dec->sinkpad, &format_time, &duration) && + size > 0 && duration > 0) { + guint64 bitrate; + + bitrate = gst_util_uint64_scale (size, 8 * GST_SECOND, duration); + gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, GST_TAG_BITRATE, + (guint) bitrate, NULL); + } + + gst_element_post_message (GST_ELEMENT (dec), + gst_message_new_tag (GST_OBJECT (dec), list)); +} + static GstFlowReturn gst_wavpack_dec_chain (GstPad * pad, GstBuffer * buf) { @@ -314,6 +341,10 @@ gst_wavpack_dec_chain (GstPad * pad, GstBuffer * buf) /* should always succeed */ gst_pad_set_caps (dec->srcpad, caps); gst_caps_unref (caps); + + /* send GST_TAG_AUDIO_CODEC and GST_TAG_BITRATE tags before something + * is decoded or after the format has changed */ + gst_wavpack_dec_post_tags (dec, &wph); } unpacked_size = wph.block_samples * (dec->width / 8) * dec->channels; diff --git a/ext/wavpack/gstwavpackparse.c b/ext/wavpack/gstwavpackparse.c index d252ccfb..30a5d78d 100644 --- a/ext/wavpack/gstwavpackparse.c +++ b/ext/wavpack/gstwavpackparse.c @@ -97,7 +97,8 @@ gst_wavpack_parse_base_init (gpointer klass) GST_ELEMENT_DETAILS ("WavePack parser", "Codec/Demuxer/Audio", "Parses Wavpack files", - "Arwed v. Merkatz <v.merkatz@gmx.net>"); + "Arwed v. Merkatz <v.merkatz@gmx.net>, " + "Sebastian Dröge <slomo@circular-chaos.org>"); GstElementClass *element_class = GST_ELEMENT_CLASS (klass); gst_element_class_add_pad_template (element_class, @@ -292,7 +293,8 @@ gst_wavpack_parse_src_query (GstPad * pad, GstQuery * query) break; default: GST_DEBUG_OBJECT (parse, "cannot handle position query in " - "%s format", gst_format_get_name (format)); + "%s format. Forwarding upstream.", gst_format_get_name (format)); + ret = gst_pad_query_default (pad, query); break; } break; @@ -327,7 +329,8 @@ gst_wavpack_parse_src_query (GstPad * pad, GstQuery * query) break; default: GST_DEBUG_OBJECT (parse, "cannot handle duration query in " - "%s format", gst_format_get_name (format)); + "%s format. Forwarding upstream.", gst_format_get_name (format)); + ret = gst_pad_query_default (pad, query); break; } break; |