diff options
author | Wim Taymans <wim.taymans@gmail.com> | 2004-07-13 10:24:29 +0000 |
---|---|---|
committer | Wim Taymans <wim.taymans@gmail.com> | 2004-07-13 10:24:29 +0000 |
commit | 666cacd22f4789e97a1f225a3dd1a893953c3086 (patch) | |
tree | 059fa72a3d62e27a95c82a8671ae2912c13a0d76 /gst-libs/gst/riff/riff-media.c | |
parent | 072d23cfb4b55fbece3714dc2491ad52e7accdef (diff) | |
download | gst-plugins-bad-666cacd22f4789e97a1f225a3dd1a893953c3086.tar.gz gst-plugins-bad-666cacd22f4789e97a1f225a3dd1a893953c3086.tar.bz2 gst-plugins-bad-666cacd22f4789e97a1f225a3dd1a893953c3086.zip |
gst/: Set codec_data on caps for avidemuxer.
Original commit message from CVS:
* gst-libs/gst/riff/riff-media.c:
(gst_riff_create_audio_caps_with_data),
(gst_riff_create_audio_caps),
(gst_riff_create_audio_template_caps):
* gst-libs/gst/riff/riff-media.h:
* gst-libs/gst/riff/riff-read.c:
(gst_riff_read_strf_vids_with_data),
(gst_riff_read_strf_auds_with_data), (gst_riff_read_strf_auds):
* gst-libs/gst/riff/riff-read.h:
* gst/avi/gstavidemux.c: (gst_avi_demux_handle_src_query),
(gst_avi_demux_add_stream):
Set codec_data on caps for avidemuxer.
Diffstat (limited to 'gst-libs/gst/riff/riff-media.c')
-rw-r--r-- | gst-libs/gst/riff/riff-media.c | 64 |
1 files changed, 53 insertions, 11 deletions
diff --git a/gst-libs/gst/riff/riff-media.c b/gst-libs/gst/riff/riff-media.c index 4a9ad87f..313c9594 100644 --- a/gst-libs/gst/riff/riff-media.c +++ b/gst-libs/gst/riff/riff-media.c @@ -330,10 +330,11 @@ gst_riff_create_video_caps (guint32 codec_fcc, } GstCaps * -gst_riff_create_audio_caps (guint16 codec_id, - gst_riff_strh * strh, gst_riff_strf_auds * strf, char **codec_name) +gst_riff_create_audio_caps_with_data (guint16 codec_id, + gst_riff_strh * strh, gst_riff_strf_auds * strf, + GstBuffer * strf_data, GstBuffer * strd_data, char **codec_name) { - gboolean block_align = FALSE; + gboolean block_align = FALSE, rate_chan = TRUE; GstCaps *caps = NULL; gint rate_min = 8000, rate_max = 96000; gint channels_max = 2; @@ -426,32 +427,71 @@ gst_riff_create_audio_caps (guint16 codec_id, if (codec_name) *codec_name = g_strdup ("AC3"); break; + case GST_RIFF_WAVE_FORMAT_WMAV1: + case GST_RIFF_WAVE_FORMAT_WMAV2: + { + gint version = codec_id == GST_RIFF_WAVE_FORMAT_WMAV1 ? 1 : 2; + + block_align = TRUE; + + caps = gst_caps_new_simple ("audio/x-wma", + "wmaversion", G_TYPE_INT, version, NULL); + + if (codec_name) + *codec_name = g_strdup_printf ("WMA Version %d", version); + if (strf != NULL) { + gst_caps_set_simple (caps, + "bitrate", G_TYPE_INT, strf->av_bps * 8, NULL); + } else { + gst_caps_set_simple (caps, + "bitrate", GST_TYPE_INT_RANGE, 0, G_MAXINT, NULL); + } + if (strf_data) { + gst_caps_set_simple (caps, + "codec_data", GST_TYPE_BUFFER, strf_data, NULL); + } + break; + } default: GST_WARNING ("Unknown audio tag 0x%04x", codec_id); return NULL; } if (strf != NULL) { - gst_caps_set_simple (caps, - "rate", G_TYPE_INT, strf->rate, - "channels", G_TYPE_INT, strf->channels, NULL); - if (block_align) + if (rate_chan) { + gst_caps_set_simple (caps, + "rate", G_TYPE_INT, strf->rate, + "channels", G_TYPE_INT, strf->channels, NULL); + } + if (block_align) { gst_caps_set_simple (caps, "block_align", G_TYPE_INT, strf->blockalign, NULL); + } } else { - gst_caps_set_simple (caps, - "rate", GST_TYPE_INT_RANGE, rate_min, rate_max, - "channels", GST_TYPE_INT_RANGE, 1, channels_max, NULL); - if (block_align) + if (rate_chan) { + gst_caps_set_simple (caps, + "rate", GST_TYPE_INT_RANGE, rate_min, rate_max, + "channels", GST_TYPE_INT_RANGE, 1, channels_max, NULL); + } + if (block_align) { gst_caps_set_simple (caps, "block_align", GST_TYPE_INT_RANGE, 1, 8192, NULL); + } } return caps; } GstCaps * +gst_riff_create_audio_caps (guint16 codec_id, + gst_riff_strh * strh, gst_riff_strf_auds * strf, char **codec_name) +{ + return gst_riff_create_audio_caps_with_data (codec_id, + strh, strf, NULL, NULL, codec_name); +} + +GstCaps * gst_riff_create_iavs_caps (guint32 codec_fcc, gst_riff_strh * strh, gst_riff_strf_iavs * strf, char **codec_name) { @@ -533,6 +573,8 @@ gst_riff_create_audio_template_caps (void) GST_RIFF_WAVE_FORMAT_MULAW, GST_RIFF_WAVE_FORMAT_ADPCM, GST_RIFF_WAVE_FORMAT_DVI_ADPCM, + GST_RIFF_WAVE_FORMAT_WMAV1, + GST_RIFF_WAVE_FORMAT_WMAV2, /* FILL ME */ 0 }; |