X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fdemux%2Frawvid.c;h=775d72d56f6fc9c5ba475f932e00f7c38c984302;hb=c6a78e1b9e0cd1b87783b024f66ee440965053d5;hp=7c59dc1d9197bf806b228ab235b84835dc4d0b25;hpb=7af3d91a653ca0b1b09f13e0c90466dc49c87daa;p=vlc diff --git a/modules/demux/rawvid.c b/modules/demux/rawvid.c index 7c59dc1d91..775d72d56f 100644 --- a/modules/demux/rawvid.c +++ b/modules/demux/rawvid.c @@ -25,7 +25,10 @@ /***************************************************************************** * Preamble *****************************************************************************/ -#include /* malloc(), free() */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif #include #include @@ -59,7 +62,7 @@ static void Close( vlc_object_t * ); vlc_module_begin(); set_shortname( "Raw Video" ); set_description( _("Raw video demuxer") ); - set_capability( "demux2", 3 ); + set_capability( "demux2", 10 ); set_category( CAT_INPUT ); set_subcategory( SUBCAT_INPUT_DEMUX ); set_callbacks( Open, Close ); @@ -155,15 +158,16 @@ static int Open( vlc_object_t * p_this ) break; } } - if( ( !b_valid ) && strcmp(p_demux->psz_demux, "rawvid") ) - { + if( !b_valid && !p_demux->b_force ) return VLC_EGENERIC; - } /* Set p_input field */ p_demux->pf_demux = Demux; p_demux->pf_control = Control; p_demux->p_sys = p_sys = malloc( sizeof( demux_sys_t ) ); + if( !p_sys ) + return VLC_ENOMEM; + p_sys->i_pcr = 1; p_sys->b_y4m = b_y4m; @@ -183,13 +187,13 @@ static int Open( vlc_object_t * p_this ) /* TODO: handle interlacing */ #define READ_FRAC( key, num, den ) \ - buf = strchr( psz+9, key );\ + buf = strstr( psz+9, key );\ if( buf )\ {\ - char *end = strchr( buf, ' ' );\ + char *end = strchr( buf+1, ' ' );\ char *sep;\ if( end ) *end = '\0';\ - sep = strchr( buf, ':' );\ + sep = strchr( buf+1, ':' );\ if( sep )\ {\ *sep = '\0';\ @@ -199,43 +203,47 @@ static int Open( vlc_object_t * p_this ) {\ den = 1;\ }\ - num = atoi( buf+1 );\ + num = atoi( buf+2 );\ if( sep ) *sep = ':';\ if( end ) *end = ' ';\ } - READ_FRAC( 'W', i_width, a ) - READ_FRAC( 'H', i_height, a ) - READ_FRAC( 'F', a, b ) + READ_FRAC( " W", i_width, a ) + READ_FRAC( " H", i_height, a ) + READ_FRAC( " F", a, b ) p_sys->f_fps = (double)a/(double)b; - READ_FRAC( 'A', a, b ) + READ_FRAC( " A", a, b ) if( b != 0 ) i_aspect = a * VOUT_ASPECT_FACTOR / b; - buf = strchr( psz+9, 'C' ); + buf = strstr( psz+9, " C" ); if( buf ) { - char *end = strchr( buf, ' ' ); + char *end = strchr( buf+1, ' ' ); if( end ) *end = '\0'; - buf++; - if( !strncmp( buf, "C420jpeg", 8 ) ) + buf+=2; + if( !strncmp( buf, "420jpeg", 7 ) ) { psz_chroma = strdup( "I420" ); } - else if( !strncmp( buf, "C420paldv", 9 ) ) + else if( !strncmp( buf, "420paldv", 8 ) ) { psz_chroma = strdup( "I420" ); } - else if( !strncmp( buf, "C420", 4 ) ) + else if( !strncmp( buf, "420", 3 ) ) { psz_chroma = strdup( "I420" ); } - else if( !strncmp( buf, "C422", 4 ) ) + else if( !strncmp( buf, "422", 3 ) ) { psz_chroma = strdup( "I422" ); } - else if( !strncmp( buf, "C444", 4 ) ) + else if( !strncmp( buf, "444", 3 ) ) { psz_chroma = strdup( "I444" ); } + else if( !strncmp( buf, "mono", 3 ) ) + { + psz_chroma = strdup( "GREY" ); + } else { msg_Warn( p_demux, "Unknown YUV4MPEG2 chroma type \"%s\"",