vlc | branch: master | Ilkka Ollakka <[email protected]> | Sun Mar 20 23:21:16 2016 +0200| [a2627abdbaaac1e5929e94077a7f4ba409d3b42c] | committer: Ilkka Ollakka
transcode: refactor video init function > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=a2627abdbaaac1e5929e94077a7f4ba409d3b42c --- modules/stream_out/transcode/video.c | 131 +++++++++++++++++++++------------- 1 file changed, 80 insertions(+), 51 deletions(-) diff --git a/modules/stream_out/transcode/video.c b/modules/stream_out/transcode/video.c index 4d2c369..b9cae2b 100644 --- a/modules/stream_out/transcode/video.c +++ b/modules/stream_out/transcode/video.c @@ -341,19 +341,54 @@ static void conversion_video_filter_append( sout_stream_id_sys_t *id ) } } -static void transcode_video_encoder_init( sout_stream_t *p_stream, - sout_stream_id_sys_t *id ) +static void transcode_video_framerate_init( sout_stream_t *p_stream, + sout_stream_id_sys_t *id, + const es_format_t *p_fmt_out ) { - sout_stream_sys_t *p_sys = p_stream->p_sys; - - const es_format_t *p_fmt_out = &id->p_decoder->fmt_out; - if( id->p_f_chain ) { - p_fmt_out = filter_chain_GetFmtOut( id->p_f_chain ); - } - if( id->p_uf_chain ) { - p_fmt_out = filter_chain_GetFmtOut( id->p_uf_chain ); + /* Handle frame rate conversion */ + if( !id->p_encoder->fmt_out.video.i_frame_rate || + !id->p_encoder->fmt_out.video.i_frame_rate_base ) + { + if( p_fmt_out->video.i_frame_rate && + p_fmt_out->video.i_frame_rate_base ) + { + id->p_encoder->fmt_out.video.i_frame_rate = + p_fmt_out->video.i_frame_rate; + id->p_encoder->fmt_out.video.i_frame_rate_base = + p_fmt_out->video.i_frame_rate_base; + } + else + { + /* Pick a sensible default value */ + id->p_encoder->fmt_out.video.i_frame_rate = ENC_FRAMERATE; + id->p_encoder->fmt_out.video.i_frame_rate_base = ENC_FRAMERATE_BASE; + } } + id->p_encoder->fmt_in.video.i_frame_rate = + id->p_encoder->fmt_out.video.i_frame_rate; + id->p_encoder->fmt_in.video.i_frame_rate_base = + id->p_encoder->fmt_out.video.i_frame_rate_base; + + vlc_ureduce( &id->p_encoder->fmt_in.video.i_frame_rate, + &id->p_encoder->fmt_in.video.i_frame_rate_base, + id->p_encoder->fmt_in.video.i_frame_rate, + id->p_encoder->fmt_in.video.i_frame_rate_base, + 0 ); + msg_Dbg( p_stream, "source fps %u/%u, destination %u/%u", + id->p_decoder->fmt_out.video.i_frame_rate, + id->p_decoder->fmt_out.video.i_frame_rate_base, + id->p_encoder->fmt_in.video.i_frame_rate, + id->p_encoder->fmt_in.video.i_frame_rate_base ); + +} + +static void transcode_video_size_init( sout_stream_t *p_stream, + sout_stream_id_sys_t *id, + const es_format_t *p_fmt_out ) +{ + sout_stream_sys_t *p_sys = p_stream->p_sys; + /* Calculate scaling * width/height of source */ int i_src_visible_width = p_fmt_out->video.i_visible_width; @@ -470,47 +505,19 @@ static void transcode_video_encoder_init( sout_stream_t *p_stream, i_src_visible_width, i_src_visible_height, i_dst_visible_width, i_dst_visible_height ); +}; - /* Handle frame rate conversion */ - if( !id->p_encoder->fmt_out.video.i_frame_rate || - !id->p_encoder->fmt_out.video.i_frame_rate_base ) - { - if( p_fmt_out->video.i_frame_rate && - p_fmt_out->video.i_frame_rate_base ) - { - id->p_encoder->fmt_out.video.i_frame_rate = - p_fmt_out->video.i_frame_rate; - id->p_encoder->fmt_out.video.i_frame_rate_base = - p_fmt_out->video.i_frame_rate_base; - } - else - { - /* Pick a sensible default value */ - id->p_encoder->fmt_out.video.i_frame_rate = ENC_FRAMERATE; - id->p_encoder->fmt_out.video.i_frame_rate_base = ENC_FRAMERATE_BASE; - } - } - - id->p_encoder->fmt_in.video.orientation = - id->p_encoder->fmt_out.video.orientation = - id->p_decoder->fmt_in.video.orientation; - - id->p_encoder->fmt_in.video.i_frame_rate = - id->p_encoder->fmt_out.video.i_frame_rate; - id->p_encoder->fmt_in.video.i_frame_rate_base = - id->p_encoder->fmt_out.video.i_frame_rate_base; - - vlc_ureduce( &id->p_encoder->fmt_in.video.i_frame_rate, - &id->p_encoder->fmt_in.video.i_frame_rate_base, - id->p_encoder->fmt_in.video.i_frame_rate, - id->p_encoder->fmt_in.video.i_frame_rate_base, - 0 ); - msg_Dbg( p_stream, "source fps %u/%u, destination %u/%u", - id->p_decoder->fmt_out.video.i_frame_rate, - id->p_decoder->fmt_out.video.i_frame_rate_base, - id->p_encoder->fmt_in.video.i_frame_rate, - id->p_encoder->fmt_in.video.i_frame_rate_base ); +static void transcode_video_sar_init( sout_stream_t *p_stream, + sout_stream_id_sys_t *id, + const es_format_t *p_fmt_out ) +{ + int i_src_visible_width = p_fmt_out->video.i_visible_width; + int i_src_visible_height = p_fmt_out->video.i_visible_height; + if (i_src_visible_width == 0) + i_src_visible_width = p_fmt_out->video.i_width; + if (i_src_visible_height == 0) + i_src_visible_height = p_fmt_out->video.i_height; /* Check whether a particular aspect ratio was requested */ if( id->p_encoder->fmt_out.video.i_sar_num <= 0 || @@ -518,8 +525,8 @@ static void transcode_video_encoder_init( sout_stream_t *p_stream, { vlc_ureduce( &id->p_encoder->fmt_out.video.i_sar_num, &id->p_encoder->fmt_out.video.i_sar_den, - (uint64_t)p_fmt_out->video.i_sar_num * i_src_visible_width * i_dst_visible_height, - (uint64_t)p_fmt_out->video.i_sar_den * i_src_visible_height * i_dst_visible_width, + (uint64_t)p_fmt_out->video.i_sar_num * id->p_encoder->fmt_out.video.i_width * p_fmt_out->video.i_height, + (uint64_t)p_fmt_out->video.i_sar_den * id->p_encoder->fmt_out.video.i_height * p_fmt_out->video.i_width, 0 ); } else @@ -542,6 +549,28 @@ static void transcode_video_encoder_init( sout_stream_t *p_stream, } +static void transcode_video_encoder_init( sout_stream_t *p_stream, + sout_stream_id_sys_t *id ) +{ + const es_format_t *p_fmt_out = &id->p_decoder->fmt_out; + if( id->p_f_chain ) { + p_fmt_out = filter_chain_GetFmtOut( id->p_f_chain ); + } + if( id->p_uf_chain ) { + p_fmt_out = filter_chain_GetFmtOut( id->p_uf_chain ); + } + + id->p_encoder->fmt_in.video.orientation = + id->p_encoder->fmt_out.video.orientation = + id->p_decoder->fmt_in.video.orientation; + + transcode_video_framerate_init( p_stream, id, p_fmt_out ); + + transcode_video_size_init( p_stream, id, p_fmt_out ); + transcode_video_sar_init( p_stream, id, p_fmt_out ); + +} + static int transcode_video_encoder_open( sout_stream_t *p_stream, sout_stream_id_sys_t *id ) { _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
