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}, | ||||
}; | }; | ||||