From: Ronald S. Bultje Date: Thu, 31 Jan 2002 22:22:42 +0000 (+0000) Subject: Various fixes X-Git-Tag: BRANCH-EVENTS2-ROOT~130 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1c7a0058d6e8b605fdd7b37b3ed7c603d2bee45b;p=platform%2Fupstream%2Fgst-plugins-good.git Various fixes Original commit message from CVS: Various fixes --- diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c index edb6b9e..8c0e816 100644 --- a/gst/avi/gstavidemux.c +++ b/gst/avi/gstavidemux.c @@ -66,7 +66,7 @@ GST_PADTEMPLATE_FACTORY (sink_templ, GST_CAPS_NEW ( "avidemux_sink", "video/avi", - "RIFF", GST_PROPS_STRING ("AVI") + "RIFF", GST_PROPS_STRING ("AVI") ) ) @@ -75,23 +75,73 @@ GST_PADTEMPLATE_FACTORY (src_video_templ, GST_PAD_SRC, GST_PAD_ALWAYS, GST_CAPS_NEW ( - "src_video", + "avidemux_src_video", "video/avi", "format", GST_PROPS_LIST ( GST_PROPS_STRING ("strf_vids"), GST_PROPS_STRING ("strf_iavs") ) + ), + GST_CAPS_NEW ( + "avidemux_src_video", + "video/raw", + "format", GST_PROPS_LIST ( + GST_PROPS_FOURCC (GST_MAKE_FOURCC('Y','U','Y','2')), + GST_PROPS_FOURCC (GST_MAKE_FOURCC('I','4','2','0')) + ), + "width", GST_PROPS_INT_RANGE (16, 4096), + "height", GST_PROPS_INT_RANGE (16, 4096) + ), + GST_CAPS_NEW ( + "avidemux_src_video", + "video/jpeg", + "width", GST_PROPS_INT_RANGE (16, 4096), + "height", GST_PROPS_INT_RANGE (16, 4096) + ), + GST_CAPS_NEW ( + "avidemux_src_video", + "video/dv", + "format", GST_PROPS_LIST ( + GST_PROPS_STRING ("NTSC"), + GST_PROPS_STRING ("PAL") + ) ) ) GST_PADTEMPLATE_FACTORY (src_audio_templ, - "src", + "audio_[00-32]", GST_PAD_SRC, GST_PAD_ALWAYS, GST_CAPS_NEW ( - "src_audio", + "avidemux_src_audio", "video/avi", - "format", GST_PROPS_STRING ("strf_auds") + "format", GST_PROPS_STRING ("strf_auds") + ), + GST_CAPS_NEW ( + "avidemux_src_audio", + "audio/raw", + "format", GST_PROPS_STRING ("int"), + "law", GST_PROPS_INT (0), + "endianness", GST_PROPS_INT (G_BYTE_ORDER), + "signed", GST_PROPS_LIST ( + GST_PROPS_BOOLEAN (TRUE), + GST_PROPS_BOOLEAN (FALSE) + ), + "width", GST_PROPS_LIST ( + GST_PROPS_INT (8), + GST_PROPS_INT (16) + ), + "depth", GST_PROPS_LIST ( + GST_PROPS_INT (8), + GST_PROPS_INT (16) + ), + "rate", GST_PROPS_INT_RANGE (11025, 44100), + "channels", GST_PROPS_INT_RANGE (1, 2) + ), + GST_CAPS_NEW ( + "avidemux_src_audio", + "audio/mp3", + NULL ) ) @@ -281,6 +331,7 @@ gst_avi_demux_strf_vids (GstAviDemux *avi_demux) gst_riff_strf_vids *strf; GstPad *srcpad; GstByteStream *bs = avi_demux->bs; + GstCaps *newcaps = NULL, *capslist = NULL; strf = (gst_riff_strf_vids *) gst_bytestream_peek_bytes (bs, sizeof (gst_riff_strf_vids)); @@ -302,9 +353,8 @@ gst_avi_demux_strf_vids (GstAviDemux *avi_demux) GST_PADTEMPLATE_GET (src_video_templ), g_strdup_printf ("video_%02d", avi_demux->num_video_pads)); - gst_pad_try_set_caps (srcpad, - GST_CAPS_NEW ( - "avidec_video_src", + capslist = gst_caps_append(NULL, GST_CAPS_NEW ( + "avidemux_video_src", "video/avi", "format", GST_PROPS_STRING ("strf_vids"), "size", GST_PROPS_INT (GUINT32_FROM_LE (strf->size)), @@ -320,6 +370,42 @@ gst_avi_demux_strf_vids (GstAviDemux *avi_demux) "imp_colors", GST_PROPS_INT (GUINT32_FROM_LE (strf->imp_colors)) )); + /* whoa, it doesn't fit, let's try some gstreamer-like mime-type caps */ + switch (GUINT32_FROM_LE(strf->compression)) + { + case GST_MAKE_FOURCC('I','4','2','0'): + case GST_MAKE_FOURCC('Y','U','Y','2'): + newcaps = GST_CAPS_NEW ( + "avidemux_video_src", + "video/raw", + "format", GST_PROPS_FOURCC(GUINT32_FROM_LE(strf->compression)), + "width", GST_PROPS_INT(strf->width), + "height", GST_PROPS_INT(strf->height) + ); + break; + case GST_MAKE_FOURCC('M','J','P','G'): + newcaps = GST_CAPS_NEW ( + "avidemux_video_src", + "video/jpeg", + "width", GST_PROPS_INT(strf->width), + "height", GST_PROPS_INT(strf->height) + ); + break; + case GST_MAKE_FOURCC('d','v','s','d'): + newcaps = GST_CAPS_NEW ( + "avidemux_video_src", + "video/dv", + "format", GST_PROPS_STRING("NTSC"), /* FIXME??? */ + "width", GST_PROPS_INT(strf->width), + "height", GST_PROPS_INT(strf->height) + ); + break; + } + + if (newcaps) capslist = gst_caps_append(capslist, newcaps); + + gst_pad_try_set_caps(srcpad, newcaps); + avi_demux->video_pad[avi_demux->num_video_pads++] = srcpad; gst_element_add_pad (GST_ELEMENT (avi_demux), srcpad); } @@ -330,6 +416,7 @@ gst_avi_demux_strf_auds (GstAviDemux *avi_demux) gst_riff_strf_auds *strf; GstPad *srcpad; GstByteStream *bs = avi_demux->bs; + GstCaps *newcaps = NULL, *capslist = NULL; strf = (gst_riff_strf_auds *) gst_bytestream_peek_bytes (bs, sizeof (gst_riff_strf_auds)); @@ -345,9 +432,8 @@ gst_avi_demux_strf_auds (GstAviDemux *avi_demux) GST_PADTEMPLATE_GET (src_audio_templ), g_strdup_printf ("audio_%02d", avi_demux->num_audio_pads)); - gst_pad_try_set_caps (srcpad, - GST_CAPS_NEW ( - "avidec_audio_src", + capslist = gst_caps_append(NULL, GST_CAPS_NEW ( + "avidemux_audio_src", "video/avi", "format", GST_PROPS_STRING ("strf_auds"), "fmt", GST_PROPS_INT (GUINT16_FROM_LE (strf->format)), @@ -358,6 +444,37 @@ gst_avi_demux_strf_auds (GstAviDemux *avi_demux) "size", GST_PROPS_INT (GUINT16_FROM_LE (strf->size)) )); + /* let's try some gstreamer-formatted mime types */ + switch (GUINT16_FROM_LE(strf->format)) + { + case 0x0050: + case 0x0055: /* mp3 */ + newcaps = gst_caps_new ("avidemux_audio_src", + "audio/mp3", + NULL); + break; + case 0x0001: /* PCM/wav */ + newcaps = gst_caps_new ("avidemux_audio_src", + "audio/raw", + gst_props_new ( + "format", GST_PROPS_STRING ("int"), + "law", GST_PROPS_INT (0), + "endianness", GST_PROPS_INT (G_BYTE_ORDER), + "signed", GST_PROPS_BOOLEAN ((GUINT16_FROM_LE (strf->size) != 8)), + "width", GST_PROPS_INT ((GUINT16_FROM_LE (strf->blockalign)*8) / + GUINT16_FROM_LE (strf->channels)), + "depth", GST_PROPS_INT (GUINT16_FROM_LE (strf->size)), + "rate", GST_PROPS_INT (GUINT32_FROM_LE (strf->rate)), + "channels", GST_PROPS_INT (GUINT16_FROM_LE (strf->channels)), + NULL + )); + break; + } + + if (newcaps) capslist = gst_caps_append(capslist, newcaps); + + gst_pad_try_set_caps(srcpad, newcaps); + avi_demux->audio_pad[avi_demux->num_audio_pads++] = srcpad; gst_element_add_pad (GST_ELEMENT (avi_demux), srcpad); } @@ -368,6 +485,7 @@ gst_avi_demux_strf_iavs (GstAviDemux *avi_demux) gst_riff_strf_iavs *strf; GstPad *srcpad; GstByteStream *bs = avi_demux->bs; + GstCaps *newcaps = NULL, *capslist = NULL; strf = (gst_riff_strf_iavs *) gst_bytestream_peek_bytes (bs, sizeof (gst_riff_strf_iavs)); @@ -385,9 +503,8 @@ gst_avi_demux_strf_iavs (GstAviDemux *avi_demux) GST_PADTEMPLATE_GET (src_video_templ), g_strdup_printf ("video_%02d", avi_demux->num_video_pads)); - gst_pad_try_set_caps (srcpad, - GST_CAPS_NEW ( - "avidec_iav_src", + capslist = gst_caps_append(NULL, GST_CAPS_NEW ( + "avidemux_video_src", "video/avi", "format", GST_PROPS_STRING ("strf_iavs"), "DVAAuxSrc", GST_PROPS_INT (GUINT32_FROM_LE (strf->DVAAuxSrc)), @@ -400,6 +517,16 @@ gst_avi_demux_strf_iavs (GstAviDemux *avi_demux) "DVReserved2", GST_PROPS_INT (GUINT32_FROM_LE (strf->DVReserved2)) )); + newcaps = gst_caps_new ("avi_type_dv", + "video/dv", + gst_props_new ( + "format", GST_PROPS_STRING ("NTSC"), /* FIXME??? */ + NULL)); + + if (newcaps) capslist = gst_caps_append(capslist, newcaps); + + gst_pad_try_set_caps(srcpad, newcaps); + avi_demux->video_pad[avi_demux->num_video_pads++] = srcpad; gst_element_add_pad (GST_ELEMENT (avi_demux), srcpad); }