{"structured_slices","Write slice start position at every GOB header instead of just GOB number.",OFFSET(h263_slice_structured),FF_OPT_TYPE_INT,{0},0,1,VE},
{"structured_slices","Write slice start position at every GOB header instead of just GOB number.",OFFSET(h263_slice_structured),FF_OPT_TYPE_INT,{0},0,1,VE},
{"global_header","place global headers in extradata instead of every keyframe",0,FF_OPT_TYPE_CONST,{.dbl=CODEC_FLAG_GLOBAL_HEADER},INT_MIN,INT_MAX,V|A|E,"flags"},
{"global_header","place global headers in extradata instead of every keyframe",0,FF_OPT_TYPE_CONST,{.dbl=CODEC_FLAG_GLOBAL_HEADER},INT_MIN,INT_MAX,V|A|E,"flags"},
{"bitexact","use only bitexact stuff (except (i)dct)",0,FF_OPT_TYPE_CONST,{.dbl=CODEC_FLAG_BITEXACT},INT_MIN,INT_MAX,A|V|S|D|E,"flags"},
{"bitexact","use only bitexact stuff (except (i)dct)",0,FF_OPT_TYPE_CONST,{.dbl=CODEC_FLAG_BITEXACT},INT_MIN,INT_MAX,A|V|S|D|E,"flags"},
{"aic","h263 advanced intra coding / mpeg4 ac prediction",0,FF_OPT_TYPE_CONST,{.dbl=CODEC_FLAG_AC_PRED},INT_MIN,INT_MAX,V|E,"flags"},
{"aic","h263 advanced intra coding / mpeg4 ac prediction",0,FF_OPT_TYPE_CONST,{.dbl=CODEC_FLAG_AC_PRED},INT_MIN,INT_MAX,V|E,"flags"},
{"scan_offset","will reserve space for svcd scan offset user data",0,FF_OPT_TYPE_CONST,{.dbl=CODEC_FLAG_SVCD_SCAN_OFFSET},INT_MIN,INT_MAX,V|E,"flags"},
{"scan_offset","will reserve space for svcd scan offset user data",0,FF_OPT_TYPE_CONST,{.dbl=CODEC_FLAG_SVCD_SCAN_OFFSET},INT_MIN,INT_MAX,V|E,"flags"},
{"bpyramid","allows B-frames to be used as references for predicting",0,FF_OPT_TYPE_CONST,{.dbl=CODEC_FLAG2_BPYRAMID},INT_MIN,INT_MAX,V|E,"flags2"},
{"bpyramid","allows B-frames to be used as references for predicting",0,FF_OPT_TYPE_CONST,{.dbl=CODEC_FLAG2_BPYRAMID},INT_MIN,INT_MAX,V|E,"flags2"},
{"wpred","weighted biprediction for b-frames (H.264)",0,FF_OPT_TYPE_CONST,{.dbl=CODEC_FLAG2_WPRED},INT_MIN,INT_MAX,V|E,"flags2"},
{"wpred","weighted biprediction for b-frames (H.264)",0,FF_OPT_TYPE_CONST,{.dbl=CODEC_FLAG2_WPRED},INT_MIN,INT_MAX,V|E,"flags2"},
{"mixed_refs","one reference per partition, as opposed to one reference per macroblock",0,FF_OPT_TYPE_CONST,{.dbl=CODEC_FLAG2_MIXED_REFS},INT_MIN,INT_MAX,V|E,"flags2"},
{"mixed_refs","one reference per partition, as opposed to one reference per macroblock",0,FF_OPT_TYPE_CONST,{.dbl=CODEC_FLAG2_MIXED_REFS},INT_MIN,INT_MAX,V|E,"flags2"},
{"max_partition_order","deprecated, use flac-specific options",OFFSET(max_partition_order),FF_OPT_TYPE_INT,{.dbl=-1},INT_MIN,INT_MAX,A|E},
{"max_partition_order","deprecated, use flac-specific options",OFFSET(max_partition_order),FF_OPT_TYPE_INT,{.dbl=-1},INT_MIN,INT_MAX,A|E},
#endif
#endif
{"timecode_frame_start","GOP timecode frame start number, in non drop frame format",OFFSET(timecode_frame_start),FF_OPT_TYPE_INT64,{.dbl=0},0,INT64_MAX,V|E},
{"timecode_frame_start","GOP timecode frame start number, in non drop frame format",OFFSET(timecode_frame_start),FF_OPT_TYPE_INT64,{.dbl=0},0,INT64_MAX,V|E},
{"aq_mode","specify aq method",OFFSET(aq_mode),FF_OPT_TYPE_INT,{.dbl=-1},-1,INT_MAX,V|E},
{"aq_mode","specify aq method",OFFSET(aq_mode),FF_OPT_TYPE_INT,{.dbl=-1},-1,INT_MAX,V|E},
{"aq_strength","specify aq strength",OFFSET(aq_strength),FF_OPT_TYPE_FLOAT,{.dbl=-1.0},-1,FLT_MAX,V|E},
{"aq_strength","specify aq strength",OFFSET(aq_strength),FF_OPT_TYPE_FLOAT,{.dbl=-1.0},-1,FLT_MAX,V|E},
{"rc_lookahead","specify number of frames to look ahead for frametype",OFFSET(rc_lookahead),FF_OPT_TYPE_INT,{.dbl=40},0,INT_MAX,V|E},
{"rc_lookahead","specify number of frames to look ahead for frametype",OFFSET(rc_lookahead),FF_OPT_TYPE_INT,{.dbl=40},0,INT_MAX,V|E},
#endif
{"ssim","ssim will be calculated during encoding",0,FF_OPT_TYPE_CONST,{.dbl=CODEC_FLAG2_SSIM},INT_MIN,INT_MAX,V|E,"flags2"},
{"ssim","ssim will be calculated during encoding",0,FF_OPT_TYPE_CONST,{.dbl=CODEC_FLAG2_SSIM},INT_MIN,INT_MAX,V|E,"flags2"},
{"intra_refresh","use periodic insertion of intra blocks instead of keyframes",0,FF_OPT_TYPE_CONST,{.dbl=CODEC_FLAG2_INTRA_REFRESH},INT_MIN,INT_MAX,V|E,"flags2"},
{"intra_refresh","use periodic insertion of intra blocks instead of keyframes",0,FF_OPT_TYPE_CONST,{.dbl=CODEC_FLAG2_INTRA_REFRESH},INT_MIN,INT_MAX,V|E,"flags2"},
#if FF_API_X264_GLOBAL_OPTS
{"crf_max","in crf mode, prevents vbv from lowering quality beyond this point",OFFSET(crf_max),FF_OPT_TYPE_FLOAT,{.dbl=DEFAULT},0,51,V|E},
{"crf_max","in crf mode, prevents vbv from lowering quality beyond this point",OFFSET(crf_max),FF_OPT_TYPE_FLOAT,{.dbl=DEFAULT},0,51,V|E},
#endif
#endif
{"log_level_offset","set the log level offset",OFFSET(log_level_offset),FF_OPT_TYPE_INT,{.dbl=0},INT_MIN,INT_MAX},
{"log_level_offset","set the log level offset",OFFSET(log_level_offset),FF_OPT_TYPE_INT,{.dbl=0},INT_MIN,INT_MAX},
MpegEncContextm;// needed for motion estimation, should not be used for anything else, the idea is to eventually make the motion estimation independent of MpegEncContext, so this will be removed then (FIXME/XXX)
MpegEncContextm;// needed for motion estimation, should not be used for anything else, the idea is to eventually make the motion estimation independent of MpegEncContext, so this will be removed then (FIXME/XXX)
@ -3518,7 +3521,7 @@ redo_frame:
intx,y;
intx,y;
// int bits= put_bits_count(&s->c.pb);
// int bits= put_bits_count(&s->c.pb);
if(!(avctx->flags2&CODEC_FLAG2_MEMC_ONLY)){
if(!s->memc_only){
//FIXME optimize
//FIXME optimize
if(pict->data[plane_index])//FIXME gray hack
if(pict->data[plane_index])//FIXME gray hack
for(y=0;y<h;y++){
for(y=0;y<h;y++){
@ -3676,6 +3679,20 @@ static av_cold int encode_end(AVCodecContext *avctx)
return0;
return0;
}
}
#define OFFSET(x) offsetof(SnowContext, x)
#define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
staticconstAVOptionoptions[]={
{"memc_only","Only do ME/MC (I frames -> ref, P frame -> ME+MC).",OFFSET(memc_only),FF_OPT_TYPE_INT,{0},0,1,VE},