diff options
author | Ronald S. Bultje <rbultje@ronald.bitfreak.net> | 2005-04-02 12:24:52 +0000 |
---|---|---|
committer | Ronald S. Bultje <rbultje@ronald.bitfreak.net> | 2005-04-02 12:24:52 +0000 |
commit | b33704a49045bdf0fdd2439341f81e01c8d644cc (patch) | |
tree | f234222a9b0b5585ad36841d7dc1aae21a251547 | |
parent | 6cd784e37b66ed63724b27ce7da96f7393eee0c6 (diff) | |
download | gst-plugins-bad-b33704a49045bdf0fdd2439341f81e01c8d644cc.tar.gz gst-plugins-bad-b33704a49045bdf0fdd2439341f81e01c8d644cc.tar.bz2 gst-plugins-bad-b33704a49045bdf0fdd2439341f81e01c8d644cc.zip |
gst-libs/gst/riff/riff-media.c: Some syntax fixes in tags output.
Original commit message from CVS:
* gst-libs/gst/riff/riff-media.c:
(gst_riff_create_video_caps_with_data),
(gst_riff_create_audio_caps_with_data):
Some syntax fixes in tags output.
* gst/qtdemux/qtdemux.c: (gst_qtdemux_add_stream),
(qtdemux_parse_trak), (qtdemux_video_caps), (qtdemux_audio_caps):
Add tags for quicktime, too.
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | gst-libs/gst/riff/riff-media.c | 27 | ||||
-rw-r--r-- | gst/qtdemux/qtdemux.c | 98 |
3 files changed, 95 insertions, 40 deletions
@@ -1,3 +1,13 @@ +2005-04-02 Ronald S. Bultje <rbultje@ronald.bitfreak.net> + + * gst-libs/gst/riff/riff-media.c: + (gst_riff_create_video_caps_with_data), + (gst_riff_create_audio_caps_with_data): + Some syntax fixes in tags output. + * gst/qtdemux/qtdemux.c: (gst_qtdemux_add_stream), + (qtdemux_parse_trak), (qtdemux_video_caps), (qtdemux_audio_caps): + Add tags for quicktime, too. + 2005-04-02 Julian Cable <julian.cable@virgin.net> Reviewed by: Zeeshan Ali <zeenix@gmail.com> diff --git a/gst-libs/gst/riff/riff-media.c b/gst-libs/gst/riff/riff-media.c index 2d3ac28e..0f92a40a 100644 --- a/gst-libs/gst/riff/riff-media.c +++ b/gst-libs/gst/riff/riff-media.c @@ -110,7 +110,7 @@ gst_riff_create_video_caps_with_data (guint32 codec_fcc, "systemstream", G_TYPE_BOOLEAN, FALSE, "mpegversion", G_TYPE_INT, 1, NULL); if (codec_name) - *codec_name = g_strdup ("MPEG video"); + *codec_name = g_strdup ("MPEG-1 video"); break; case GST_MAKE_FOURCC ('M', 'P', 'G', '2'): case GST_MAKE_FOURCC ('m', 'p', 'g', '2'): @@ -118,7 +118,7 @@ gst_riff_create_video_caps_with_data (guint32 codec_fcc, "systemstream", G_TYPE_BOOLEAN, FALSE, "mpegversion", G_TYPE_INT, 2, NULL); if (codec_name) - *codec_name = g_strdup ("MPEG 2 video"); + *codec_name = g_strdup ("MPEG-2 video"); break; case GST_MAKE_FOURCC ('H', '2', '6', '3'): @@ -269,21 +269,21 @@ gst_riff_create_video_caps_with_data (guint32 codec_fcc, caps = gst_caps_new_simple ("video/x-wmv", "wmvversion", G_TYPE_INT, 1, NULL); if (codec_name) - *codec_name = g_strdup ("Microsoft Windows Media 7 (WMV1)"); + *codec_name = g_strdup ("Microsoft Windows Media 7"); break; case GST_MAKE_FOURCC ('W', 'M', 'V', '2'): caps = gst_caps_new_simple ("video/x-wmv", "wmvversion", G_TYPE_INT, 2, NULL); if (codec_name) - *codec_name = g_strdup ("Microsoft Windows Media 8 (WMV2)"); + *codec_name = g_strdup ("Microsoft Windows Media 8"); break; case GST_MAKE_FOURCC ('W', 'M', 'V', '3'): caps = gst_caps_new_simple ("video/x-wmv", "wmvversion", G_TYPE_INT, 3, NULL); if (codec_name) - *codec_name = g_strdup ("Microsoft Windows Media 9 (WMV3)"); + *codec_name = g_strdup ("Microsoft Windows Media 9"); break; case GST_MAKE_FOURCC ('c', 'v', 'i', 'd'): @@ -408,14 +408,14 @@ gst_riff_create_audio_caps_with_data (guint16 codec_id, caps = gst_caps_new_simple ("audio/mpeg", "mpegversion", G_TYPE_INT, 1, "layer", G_TYPE_INT, 3, NULL); if (codec_name) - *codec_name = g_strdup ("MPEG 1 layer 3"); + *codec_name = g_strdup ("MPEG-1 layer 3"); break; case GST_RIFF_WAVE_FORMAT_MPEGL12: /* mp1 or mp2 */ caps = gst_caps_new_simple ("audio/mpeg", "mpegversion", G_TYPE_INT, 1, "layer", G_TYPE_INT, 2, NULL); if (codec_name) - *codec_name = g_strdup ("MPEG 1 layer 2"); + *codec_name = g_strdup ("MPEG-1 layer 2"); break; case GST_RIFF_WAVE_FORMAT_PCM: /* PCM */ @@ -434,8 +434,9 @@ gst_riff_create_audio_caps_with_data (guint16 codec_id, "signed = (boolean) { true, false }, " "width = (int) { 8, 16 }, " "depth = (int) { 8, 16 }"); } - if (codec_name) - *codec_name = g_strdup ("Uncompressed PCM audio"); + if (codec_name && strf) + *codec_name = g_strdup_printf ("Uncompressed %d-bit PCM audio", + strf->size); break; case GST_RIFF_WAVE_FORMAT_ADPCM: @@ -470,7 +471,7 @@ gst_riff_create_audio_caps_with_data (guint16 codec_id, } caps = gst_caps_new_simple ("audio/x-mulaw", NULL); if (codec_name) - *codec_name = g_strdup ("Mulaw"); + *codec_name = g_strdup ("Mu-law audio"); break; case GST_RIFF_WAVE_FORMAT_ALAW: @@ -489,7 +490,7 @@ gst_riff_create_audio_caps_with_data (guint16 codec_id, } caps = gst_caps_new_simple ("audio/x-alaw", NULL); if (codec_name) - *codec_name = g_strdup ("Alaw"); + *codec_name = g_strdup ("A-law audio"); break; case GST_RIFF_WAVE_FORMAT_VORBIS1: /* ogg/vorbis mode 1 */ @@ -507,7 +508,7 @@ gst_riff_create_audio_caps_with_data (guint16 codec_id, channels_max = 6; caps = gst_caps_new_simple ("audio/x-ac3", NULL); if (codec_name) - *codec_name = g_strdup ("AC3"); + *codec_name = g_strdup ("AC-3 audio"); break; case GST_RIFF_WAVE_FORMAT_WMAV1: case GST_RIFF_WAVE_FORMAT_WMAV2: @@ -523,7 +524,7 @@ gst_riff_create_audio_caps_with_data (guint16 codec_id, "wmaversion", G_TYPE_INT, version, NULL); if (codec_name) - *codec_name = g_strdup_printf ("WMA Version %d", version); + *codec_name = g_strdup_printf ("WMA Version %d", version + 6); if (strf != NULL) { gst_caps_set_simple (caps, diff --git a/gst/qtdemux/qtdemux.c b/gst/qtdemux/qtdemux.c index 46645fe7..b8d01fdb 100644 --- a/gst/qtdemux/qtdemux.c +++ b/gst/qtdemux/qtdemux.c @@ -175,9 +175,9 @@ static void qtdemux_tag_add_gnre (GstQTDemux * qtdemux, const char *tag, static void gst_qtdemux_handle_esds (GstQTDemux * qtdemux, QtDemuxStream * stream, GNode * esds); static GstCaps *qtdemux_video_caps (GstQTDemux * qtdemux, guint32 fourcc, - const guint8 * stsd_data); + const guint8 * stsd_data, const gchar ** codec_name); static GstCaps *qtdemux_audio_caps (GstQTDemux * qtdemux, guint32 fourcc, - const guint8 * data, int len); + const guint8 * data, int len, const gchar ** codec_name); static GType gst_qtdemux_get_type (void) @@ -849,7 +849,8 @@ gst_qtdemux_loop_header (GstElement * element) } void -gst_qtdemux_add_stream (GstQTDemux * qtdemux, QtDemuxStream * stream) +gst_qtdemux_add_stream (GstQTDemux * qtdemux, + QtDemuxStream * stream, GstTagList * list) { gchar *caps; @@ -906,6 +907,10 @@ gst_qtdemux_add_stream (GstQTDemux * qtdemux, QtDemuxStream * stream) GST_DEBUG ("adding pad %s %p to qtdemux %p", gst_pad_get_name (stream->pad), stream->pad, qtdemux); gst_element_add_pad (GST_ELEMENT (qtdemux), stream->pad); + if (list) { + gst_element_found_tags_for_pad (GST_ELEMENT (qtdemux), + stream->pad, 0, list); + } } @@ -2017,6 +2022,8 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak) guint64 timestamp; int sample_size; int sample_index; + GstTagList *list = NULL; + const gchar *codec = NULL; stream = g_new0 (QtDemuxStream, 1); @@ -2086,7 +2093,12 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak) QTDEMUX_GUINT16_GET (stsd->data + offset + 48)); stream->fourcc = fourcc = QTDEMUX_FOURCC_GET (stsd->data + offset + 4); - stream->caps = qtdemux_video_caps (qtdemux, fourcc, stsd->data); + stream->caps = qtdemux_video_caps (qtdemux, fourcc, stsd->data, &codec); + if (codec) { + list = gst_tag_list_new (); + gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, + GST_TAG_VIDEO_CODEC, codec); + } esds = NULL; mp4v = qtdemux_tree_get_child_by_type (stsd, FOURCC_mp4v); @@ -2176,7 +2188,12 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak) GST_ERROR ("unknown version %08x", version); } - stream->caps = qtdemux_audio_caps (qtdemux, fourcc, NULL, 0); + stream->caps = qtdemux_audio_caps (qtdemux, fourcc, NULL, 0, &codec); + if (codec) { + list = gst_tag_list_new (); + gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, + GST_TAG_AUDIO_CODEC, codec); + } mp4a = qtdemux_tree_get_child_by_type (stsd, FOURCC_mp4a); wave = NULL; @@ -2391,7 +2408,7 @@ done2: break; } #endif - gst_qtdemux_add_stream (qtdemux, stream); + gst_qtdemux_add_stream (qtdemux, stream, list); } static void @@ -2642,21 +2659,29 @@ gst_qtdemux_handle_esds (GstQTDemux * qtdemux, QtDemuxStream * stream, } } +#define _codec(name) \ + do { \ + if (codec_name) { \ + *codec_name = name; \ + } \ + } while (0) + static GstCaps * qtdemux_video_caps (GstQTDemux * qtdemux, guint32 fourcc, - const guint8 * stsd_data) + const guint8 * stsd_data, const gchar ** codec_name) { switch (fourcc) { case GST_MAKE_FOURCC ('j', 'p', 'e', 'g'): - /* JPEG */ + _codec ("JPEG still images"); return gst_caps_from_string ("image/jpeg"); case GST_MAKE_FOURCC ('m', 'j', 'p', 'a'): - /* Motion-JPEG (format A) */ + _codec ("Motion-JPEG"); return gst_caps_from_string ("image/jpeg"); case GST_MAKE_FOURCC ('m', 'j', 'p', 'b'): - /* Motion-JPEG (format B) */ + _codec ("Motion-JPEG format B"); return gst_caps_from_string ("image/jpeg-b"); case GST_MAKE_FOURCC ('S', 'V', 'Q', '3'): + _codec ("Sorensen video v.3"); if (stsd_data != NULL) { gst_getbits_t gb; gint halfpel_flag; @@ -2709,9 +2734,10 @@ qtdemux_video_caps (GstQTDemux * qtdemux, guint32 fourcc, return gst_caps_from_string ("video/x-svq, " "svqversion = (int) 3"); case GST_MAKE_FOURCC ('s', 'v', 'q', 'i'): case GST_MAKE_FOURCC ('S', 'V', 'Q', '1'): + _codec ("Sorensen video v.1"); return gst_caps_from_string ("video/x-svq, " "svqversion = (int) 1"); case GST_MAKE_FOURCC ('r', 'a', 'w', ' '): - /* uncompressed RGB */ + _codec ("Raw RGB video"); return gst_caps_from_string ("video/x-raw-rgb, " "endianness = (int) BIG_ENDIAN"); /*"bpp", GST_PROPS_INT(x), @@ -2720,35 +2746,37 @@ qtdemux_video_caps (GstQTDemux * qtdemux, guint32 fourcc, "green_mask", GST_PROPS_INT(x), "blue_mask", GST_PROPS_INT(x), FIXME! */ case GST_MAKE_FOURCC ('Y', 'u', 'v', '2'): - /* uncompressed YUV2 */ + _codec ("Raw packed YUV 4:2:2"); return gst_caps_from_string ("video/x-raw-yuv, " "format = (fourcc) YUY2"); case GST_MAKE_FOURCC ('m', 'p', 'e', 'g'): - /* MPEG */ + _codec ("MPEG-1 video"); return gst_caps_from_string ("video/mpeg, " "systemstream = (boolean) false, " "mpegversion = (int) 1"); case GST_MAKE_FOURCC ('g', 'i', 'f', ' '): + _codec ("GIF still images"); return gst_caps_from_string ("image/gif"); case GST_MAKE_FOURCC ('h', '2', '6', '3'): case GST_MAKE_FOURCC ('s', '2', '6', '3'): - /* H.263 */ + _codec ("H.263"); /* ffmpeg uses the height/width props, don't know why */ return gst_caps_from_string ("video/x-h263"); case GST_MAKE_FOURCC ('m', 'p', '4', 'v'): - /* MPEG-4 */ + _codec ("MPEG-4 video"); return gst_caps_from_string ("video/mpeg, " "mpegversion = (int) 4, " "systemstream = (boolean) false"); case GST_MAKE_FOURCC ('3', 'I', 'V', '1'): case GST_MAKE_FOURCC ('3', 'I', 'V', '2'): + _codec ("3ivX video"); return gst_caps_from_string ("video/x-3ivx"); case GST_MAKE_FOURCC ('c', 'v', 'i', 'd'): - /* Cinepak */ + _codec ("Cinepak"); return gst_caps_from_string ("video/x-cinepak"); case GST_MAKE_FOURCC ('r', 'p', 'z', 'a'): - /* Apple Video */ + _codec ("Apple video"); return gst_caps_from_string ("video/x-apple-video"); case GST_MAKE_FOURCC ('a', 'v', 'c', '1'): - /* H.264/AVC */ + _codec ("H.264 / AVC"); return gst_caps_from_string ("video/x-h264"); case GST_MAKE_FOURCC ('r', 'l', 'e', ' '): /* Run-length encoding */ @@ -2772,7 +2800,7 @@ qtdemux_video_caps (GstQTDemux * qtdemux, guint32 fourcc, static GstCaps * qtdemux_audio_caps (GstQTDemux * qtdemux, guint32 fourcc, const guint8 * data, - int len) + int len, const gchar ** codec_name) { switch (fourcc) { #if 0 @@ -2780,50 +2808,61 @@ qtdemux_audio_caps (GstQTDemux * qtdemux, guint32 fourcc, const guint8 * data, return NULL; /*gst_caps_from_string ("audio/raw"); */ #endif case GST_MAKE_FOURCC ('r', 'a', 'w', ' '): + _codec ("Raw 8-bit PCM audio"); /* FIXME */ return gst_caps_from_string ("audio/x-raw-int, " "width = (int) 8, " "depth = (int) 8, " "signed = (boolean) true"); case GST_MAKE_FOURCC ('t', 'w', 'o', 's'): + _codec ("Raw 16-bit PCM audio"); /* FIXME */ return gst_caps_from_string ("audio/x-raw-int, " "width = (int) 16, " "depth = (int) 16, " "endianness = (int) BIG_ENDIAN, " "signed = (boolean) true"); case GST_MAKE_FOURCC ('s', 'o', 'w', 't'): + _codec ("Raw 16-bit PCM audio"); /* FIXME */ return gst_caps_from_string ("audio/x-raw-int, " "width = (int) 16, " "depth = (int) 16, " "endianness = (int) G_LITTLE_ENDIAN, " "signed = (boolean) true"); case GST_MAKE_FOURCC ('f', 'l', '6', '4'): + _codec ("Raw 64-bit floating-point audio"); return gst_caps_from_string ("audio/x-raw-float, " "width = (int) 64, " "endianness = (int) G_BIG_ENDIAN"); case GST_MAKE_FOURCC ('f', 'l', '3', '2'): + _codec ("Raw 32-bit floating-point audio"); return gst_caps_from_string ("audio/x-raw-float, " "width = (int) 32, " "endianness = (int) G_BIG_ENDIAN"); case GST_MAKE_FOURCC ('i', 'n', '2', '4'): + _codec ("Raw 24-bit PCM audio"); /* FIXME */ return gst_caps_from_string ("audio/x-raw-int, " "width = (int) 24, " "depth = (int) 32, " "endianness = (int) G_BIG_ENDIAN, " "signed = (boolean) true"); case GST_MAKE_FOURCC ('i', 'n', '3', '2'): + _codec ("Raw 32-bit PCM audio"); /* FIXME */ return gst_caps_from_string ("audio/x-raw-int, " "width = (int) 32, " "depth = (int) 32, " "endianness = (int) G_BIG_ENDIAN, " "signed = (boolean) true"); case GST_MAKE_FOURCC ('u', 'l', 'a', 'w'): + _codec ("Mu-law audio"); /* FIXME */ return gst_caps_from_string ("audio/x-mulaw"); case GST_MAKE_FOURCC ('a', 'l', 'a', 'w'): + _codec ("A-law audio"); /* FIXME */ return gst_caps_from_string ("audio/x-alaw"); case 0x6d730002: + _codec ("Microsoft ADPCM"); /* Microsoft ADPCM-ACM code 2 */ return gst_caps_from_string ("audio/x-adpcm, " "layout = (string) microsoft"); case 0x6d730011: + _codec ("DVI/Intel IMA ADPCM"); /* FIXME DVI/Intel IMA ADPCM/ACM code 17 */ return gst_caps_from_string ("audio/x-adpcm, " "layout = (string) quicktime"); @@ -2831,26 +2870,28 @@ qtdemux_audio_caps (GstQTDemux * qtdemux, guint32 fourcc, const guint8 * data, /* MPEG layer 3, CBR only (pre QT4.1) */ case 0x5500736d: case GST_MAKE_FOURCC ('.', 'm', 'p', '3'): + _codec ("MPEG-1 layer 3"); /* MPEG layer 3, CBR & VBR (QT4.1 and later) */ return gst_caps_from_string ("audio/mpeg, " "layer = (int) 3, " "mpegversion = (int) 1"); case GST_MAKE_FOURCC ('M', 'A', 'C', '3'): - /* MACE 3:1 */ + _codec ("MACE-3"); return gst_caps_from_string ("audio/x-mace, " "maceversion = (int) 3"); case GST_MAKE_FOURCC ('M', 'A', 'C', '6'): - /* MACE 6:1 */ + _codec ("MACE-6"); return gst_caps_from_string ("audio/x-mace, " "maceversion = (int) 6"); case GST_MAKE_FOURCC ('O', 'g', 'g', 'V'): - /* Ogg Vorbis */ + /* ogg/vorbis */ return gst_caps_from_string ("application/ogg"); case GST_MAKE_FOURCC ('d', 'v', 'c', 'a'): - /* DV audio */ + _codec ("DV audio"); return gst_caps_from_string ("audio/x-dv"); case GST_MAKE_FOURCC ('m', 'p', '4', 'a'): - /* MPEG-4 AAC */ + _codec ("MPEG-4 AAC audio"); return gst_caps_new_simple ("audio/mpeg", "mpegversion", G_TYPE_INT, 4, "framed", G_TYPE_BOOLEAN, TRUE, NULL); case GST_MAKE_FOURCC ('Q', 'D', 'M', '2'): + _codec ("QDesign Music v.2"); /* FIXME: QDesign music version 2 (no constant) */ if (data) { return gst_caps_new_simple ("audio/x-qdm2", @@ -2861,15 +2902,18 @@ qtdemux_audio_caps (GstQTDemux * qtdemux, guint32 fourcc, const guint8 * data, return gst_caps_new_simple ("audio/x-qdm2", NULL); } case GST_MAKE_FOURCC ('a', 'g', 's', 'm'): - /* GSM */ + _codec ("GSM audio"); return gst_caps_new_simple ("audio/x-gsm", NULL); case GST_MAKE_FOURCC ('s', 'a', 'm', 'r'): - /* AMR-NB */ + _codec ("AMR audio"); return gst_caps_new_simple ("audio/x-amr-nb", NULL); case GST_MAKE_FOURCC ('i', 'm', 'a', '4'): - /* IMA 4:1 */ + _codec ("Quicktime IMA ADPCM"); return gst_caps_new_simple ("audio/x-adpcm", "layout", G_TYPE_STRING, "quicktime", NULL); + case GST_MAKE_FOURCC ('a', 'l', 'a', 'c'): + _codec ("Apple lossless audio"); + return gst_caps_new_simple ("audio/x-alac", NULL); case GST_MAKE_FOURCC ('q', 't', 'v', 'r'): /* ? */ case GST_MAKE_FOURCC ('Q', 'D', 'M', 'C'): |