X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fdemux%2Frawvid.c;h=add4213e0b12627334d2383119a72181ebc776f2;hb=da686e46efe4a3085c7aa9286e0b2d55dbd1e918;hp=a36cc957cea89897511171ccaee46be7d755df72;hpb=806cf5165824be921bf2402ecf11fd3ee6501f9c;p=vlc diff --git a/modules/demux/rawvid.c b/modules/demux/rawvid.c index a36cc957ce..add4213e0b 100644 --- a/modules/demux/rawvid.c +++ b/modules/demux/rawvid.c @@ -26,6 +26,10 @@ * Preamble *****************************************************************************/ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + #include #include #include /* vout_InitFormat */ @@ -58,23 +62,18 @@ 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 ); add_shortcut( "rawvideo" ); add_float( "rawvid-fps", 0, 0, FPS_TEXT, FPS_LONGTEXT, VLC_FALSE ); - change_safe(); add_integer( "rawvid-width", 0, 0, WIDTH_TEXT, WIDTH_LONGTEXT, 0 ); - change_safe(); add_integer( "rawvid-height", 0, 0, HEIGHT_TEXT, HEIGHT_LONGTEXT, 0 ); - change_safe(); add_string( "rawvid-chroma", NULL, NULL, CHROMA_TEXT, CHROMA_LONGTEXT, VLC_TRUE ); - change_safe(); add_string( "rawvid-aspect-ratio", NULL, NULL, ASPECT_RATIO_TEXT, ASPECT_RATIO_LONGTEXT, VLC_TRUE ); - change_safe(); vlc_module_end(); /***************************************************************************** @@ -166,6 +165,9 @@ static int Open( vlc_object_t * p_this ) 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_EGENERIC; + p_sys->i_pcr = 1; p_sys->b_y4m = b_y4m; @@ -185,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';\ @@ -201,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\"",