X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fdemux%2Frawvid.c;h=21bdb4fde15cdf5bf6dd3652459b95a4dfa230f9;hb=3921a7f87de03160ecd18bcfeb68fbac459f2094;hp=7186b984d6e9bacc0af74e4f4f612836e5dc842b;hpb=81c5ac29fa2e80426c1b1dfcc941a1aabe8bc808;p=vlc diff --git a/modules/demux/rawvid.c b/modules/demux/rawvid.c index 7186b984d6..21bdb4fde1 100644 --- a/modules/demux/rawvid.c +++ b/modules/demux/rawvid.c @@ -26,7 +26,12 @@ * Preamble *****************************************************************************/ -#include +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include #include #include /* vout_InitFormat */ @@ -57,19 +62,19 @@ static void Close( vlc_object_t * ); vlc_module_begin(); set_shortname( "Raw Video" ); - set_description( _("Raw video demuxer") ); - set_capability( "demux2", 3 ); + set_description( N_("Raw video demuxer") ); + set_capability( "demux", 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 ); + add_float( "rawvid-fps", 0, 0, FPS_TEXT, FPS_LONGTEXT, false ); add_integer( "rawvid-width", 0, 0, WIDTH_TEXT, WIDTH_LONGTEXT, 0 ); add_integer( "rawvid-height", 0, 0, HEIGHT_TEXT, HEIGHT_LONGTEXT, 0 ); add_string( "rawvid-chroma", NULL, NULL, CHROMA_TEXT, CHROMA_LONGTEXT, - VLC_TRUE ); + true ); add_string( "rawvid-aspect-ratio", NULL, NULL, - ASPECT_RATIO_TEXT, ASPECT_RATIO_LONGTEXT, VLC_TRUE ); + ASPECT_RATIO_TEXT, ASPECT_RATIO_LONGTEXT, true ); vlc_module_end(); /***************************************************************************** @@ -85,7 +90,7 @@ struct demux_sys_t mtime_t i_pcr; - vlc_bool_t b_y4m; + bool b_y4m; }; /***************************************************************************** @@ -130,16 +135,16 @@ static int Open( vlc_object_t * p_this ) unsigned int i_aspect = 0; struct preset_t *p_preset = NULL; const uint8_t *p_peek; - vlc_bool_t b_valid = VLC_FALSE; - vlc_bool_t b_y4m = VLC_FALSE; + bool b_valid = false; + bool b_y4m = false; if( stream_Peek( p_demux->s, &p_peek, 9 ) == 9 ) { /* http://wiki.multimedia.cx/index.php?title=YUV4MPEG2 */ if( !strncmp( (char *)p_peek, "YUV4MPEG2", 9 ) ) { - b_valid = VLC_TRUE; - b_y4m = VLC_TRUE; + b_valid = true; + b_y4m = true; } } @@ -150,19 +155,20 @@ static int Open( vlc_object_t * p_this ) for( p_preset = p_presets; *p_preset->psz_ext; p_preset++ ) if( !strcasecmp( psz_ext, p_preset->psz_ext ) ) { - b_valid = VLC_TRUE; + b_valid = true; 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; @@ -176,19 +182,20 @@ static int Open( vlc_object_t * p_this ) { char *psz; char *buf; - int a, b; + int a = 1; + int b = 1; psz = stream_ReadLine( p_demux->s ); /* 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';\ @@ -198,43 +205,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", 4 ) ) + { + psz_chroma = strdup( "GREY" ); + } else { msg_Warn( p_demux, "Unknown YUV4MPEG2 chroma type \"%s\"", @@ -371,7 +382,7 @@ static int Demux( demux_t *p_demux ) p_block->i_dts = p_block->i_pts = p_sys->i_pcr; es_out_Send( p_demux->out, p_sys->p_es_video, p_block ); - p_sys->i_pcr += ( I64C(1000000) / p_sys->f_fps ); + p_sys->i_pcr += ( INT64_C(1000000) / p_sys->f_fps ); return 1; } @@ -384,7 +395,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args ) demux_sys_t *p_sys = p_demux->p_sys; /* XXX: DEMUX_SET_TIME is precise here */ - return demux2_vaControlHelper( p_demux->s, 0, -1, + return demux_vaControlHelper( p_demux->s, 0, -1, p_sys->frame_size * p_sys->f_fps * 8, p_sys->frame_size, i_query, args ); }