X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fcodec%2Fdirac.c;h=25389fe0241ee3ace1263fbb740c2e2563eecc41;hb=6ee1e193fd896ab9a4729fde14f009d9ce629815;hp=aa385dbceaa84b2c4ca58edc362125d3afaa3a7a;hpb=62fffadfea2834f7ff57a6ec1b15f8be35e68916;p=vlc diff --git a/modules/codec/dirac.c b/modules/codec/dirac.c index aa385dbcea..25389fe024 100644 --- a/modules/codec/dirac.c +++ b/modules/codec/dirac.c @@ -26,8 +26,9 @@ * Preamble *****************************************************************************/ #include -#include -#include +#include +#include +#include #include #include @@ -79,7 +80,6 @@ vlc_module_begin(); set_description( _("Dirac video encoder") ); set_capability( "encoder", 100 ); set_callbacks( OpenEncoder, CloseEncoder ); - add_shortcut( "dirac" ); add_float( ENC_CFG_PREFIX "quality", 7.0, NULL, ENC_QUALITY_TEXT, ENC_QUALITY_LONGTEXT, VLC_FALSE ); @@ -144,13 +144,15 @@ static picture_t *GetNewPicture( decoder_t *p_dec ) picture_t *p_pic; int i_plane; - p_dec->fmt_out.i_codec = - p_sys->p_dirac->seq_params.chroma == format411 ? - VLC_FOURCC('I','4','1','1') : - p_sys->p_dirac->seq_params.chroma == format420 ? - VLC_FOURCC('I','4','2','0') : - p_sys->p_dirac->seq_params.chroma == format422 ? - VLC_FOURCC('I','4','2','2') : 0; + switch( p_sys->p_dirac->seq_params.chroma ) + { + case format420: p_dec->fmt_out.i_codec = VLC_FOURCC('I','4','2','0'); break; + case format422: p_dec->fmt_out.i_codec = VLC_FOURCC('I','4','2','2'); break; + case format444: p_dec->fmt_out.i_codec = VLC_FOURCC('I','4','4','4'); break; // XXX 0.6 ? + default: + p_dec->fmt_out.i_codec = 0; + break; + } p_dec->fmt_out.video.i_visible_width = p_dec->fmt_out.video.i_width = p_sys->p_dirac->seq_params.width; @@ -159,17 +161,17 @@ static picture_t *GetNewPicture( decoder_t *p_dec ) p_dec->fmt_out.video.i_aspect = VOUT_ASPECT_FACTOR * 4 / 3; p_dec->fmt_out.video.i_frame_rate = - p_sys->p_dirac->seq_params.frame_rate.numerator; + p_sys->p_dirac->src_params.frame_rate.numerator; p_dec->fmt_out.video.i_frame_rate_base = - p_sys->p_dirac->seq_params.frame_rate.denominator; + p_sys->p_dirac->src_params.frame_rate.denominator; /* Get a new picture */ p_pic = p_dec->pf_vout_buffer_new( p_dec ); if( p_pic == NULL ) return NULL; + p_pic->b_progressive = !p_sys->p_dirac->src_params.interlace; + p_pic->b_top_field_first = p_sys->p_dirac->src_params.topfieldfirst; - p_pic->b_progressive = !p_sys->p_dirac->seq_params.interlace; - p_pic->b_top_field_first = p_sys->p_dirac->seq_params.topfieldfirst; p_pic->i_nb_fields = 2; /* Copy picture stride by stride */ @@ -251,8 +253,8 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block ) p_sys->p_dirac->seq_params.width, p_sys->p_dirac->seq_params.height, p_sys->p_dirac->seq_params.chroma, - (float)p_sys->p_dirac->seq_params.frame_rate.numerator/ - p_sys->p_dirac->seq_params.frame_rate.denominator ); + (float)p_sys->p_dirac->src_params.frame_rate.numerator/ + p_sys->p_dirac->src_params.frame_rate.denominator ); FreeFrameBuffer( p_sys->p_dirac ); buf[0] = malloc( p_sys->p_dirac->seq_params.width * @@ -352,20 +354,18 @@ static int OpenEncoder( vlc_object_t *p_this ) config_ChainParse( p_enc, ENC_CFG_PREFIX, ppsz_enc_options, p_enc->p_cfg ); - /* Initialse the encoder context with the presets for SD576 - Standard - * Definition Digital (some parameters will be overwritten later on) */ - dirac_encoder_context_init( &p_sys->ctx, SD576 ); - - /* Override parameters if required */ + dirac_encoder_context_init( &p_sys->ctx, VIDEO_FORMAT_CUSTOM ); + /* */ p_sys->ctx.seq_params.width = p_enc->fmt_in.video.i_width; p_sys->ctx.seq_params.height = p_enc->fmt_in.video.i_height; p_sys->ctx.seq_params.chroma = format420; - p_sys->ctx.seq_params.frame_rate.numerator = + /* */ + p_sys->ctx.src_params.frame_rate.numerator = p_enc->fmt_in.video.i_frame_rate; - p_sys->ctx.seq_params.frame_rate.denominator = + p_sys->ctx.src_params.frame_rate.denominator = p_enc->fmt_in.video.i_frame_rate_base; - p_sys->ctx.seq_params.interlace = 0; - p_sys->ctx.seq_params.topfieldfirst = 0; + p_sys->ctx.src_params.interlace = 0; + p_sys->ctx.src_params.topfieldfirst = 0; var_Get( p_enc, ENC_CFG_PREFIX "quality", &val ); f_quality = val.f_float; @@ -448,7 +448,7 @@ static block_t *Encode( encoder_t *p_enc, picture_t *p_pic ) } if( p_sys->p_dirac->decoded_frame_avail ) { - //locally decoded frame is available in + //locally decoded frame is available in //encoder->dec_buf //locally decoded frame parameters available //in encoder->dec_fparams