Originally committed as revision 4776 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.5
| @@ -1869,6 +1869,13 @@ typedef struct AVCodecContext { | |||||
| * - decoding: unused | * - decoding: unused | ||||
| */ | */ | ||||
| int bidir_refine; | int bidir_refine; | ||||
| /** | |||||
| * | |||||
| * - encoding: set by user. | |||||
| * - decoding: unused | |||||
| */ | |||||
| int brd_scale; | |||||
| } AVCodecContext; | } AVCodecContext; | ||||
| /** | /** | ||||
| @@ -2145,9 +2145,9 @@ static int estimate_best_b_count(MpegEncContext *s){ | |||||
| AVCodec *codec= avcodec_find_encoder(s->avctx->codec_id); | AVCodec *codec= avcodec_find_encoder(s->avctx->codec_id); | ||||
| AVCodecContext *c= avcodec_alloc_context(); | AVCodecContext *c= avcodec_alloc_context(); | ||||
| AVFrame input[FF_MAX_B_FRAMES+2]; | AVFrame input[FF_MAX_B_FRAMES+2]; | ||||
| const int scale= 0; | |||||
| const int scale= s->avctx->brd_scale; | |||||
| int i, j, out_size; | int i, j, out_size; | ||||
| int outbuf_size= (s->width * s->height) >> (2*scale); //FIXME | |||||
| int outbuf_size= s->width * s->height; //FIXME | |||||
| uint8_t *outbuf= av_malloc(outbuf_size); | uint8_t *outbuf= av_malloc(outbuf_size); | ||||
| ImgReSampleContext *resample; | ImgReSampleContext *resample; | ||||
| int64_t best_rd= INT64_MAX; | int64_t best_rd= INT64_MAX; | ||||
| @@ -2198,6 +2198,7 @@ static int estimate_best_b_count(MpegEncContext *s){ | |||||
| input[0].pict_type= I_TYPE; | input[0].pict_type= I_TYPE; | ||||
| input[0].quality= 2 * FF_QP2LAMBDA; | input[0].quality= 2 * FF_QP2LAMBDA; | ||||
| out_size = avcodec_encode_video(c, outbuf, outbuf_size, &input[0]); | out_size = avcodec_encode_video(c, outbuf, outbuf_size, &input[0]); | ||||
| rd += (out_size * lambda2) >> FF_LAMBDA_SHIFT; | |||||
| for(i=0; i<s->max_b_frames+1; i++){ | for(i=0; i<s->max_b_frames+1; i++){ | ||||
| int is_p= i % (j+1) == j || i==s->max_b_frames; | int is_p= i % (j+1) == j || i==s->max_b_frames; | ||||
| @@ -708,6 +708,7 @@ static AVOption options[]={ | |||||
| {"mb_lmax", NULL, OFFSET(mb_lmax), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, | {"mb_lmax", NULL, OFFSET(mb_lmax), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, | ||||
| {"me_penalty_compensation", NULL, OFFSET(me_penalty_compensation), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, | {"me_penalty_compensation", NULL, OFFSET(me_penalty_compensation), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, | ||||
| {"bidir_refine", NULL, OFFSET(bidir_refine), FF_OPT_TYPE_INT, DEFAULT, 0, 4, V|E}, | {"bidir_refine", NULL, OFFSET(bidir_refine), FF_OPT_TYPE_INT, DEFAULT, 0, 4, V|E}, | ||||
| {"brd_scale", NULL, OFFSET(brd_scale), FF_OPT_TYPE_INT, DEFAULT, 0, 10, V|E}, | |||||
| {NULL}, | {NULL}, | ||||
| }; | }; | ||||