mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
support downscaling frames for dynamic b frame decission
Originally committed as revision 4776 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
c9ab8df88a
commit
e8501c93b5
@ -1869,6 +1869,13 @@ typedef struct AVCodecContext {
|
||||
* - decoding: unused
|
||||
*/
|
||||
int bidir_refine;
|
||||
|
||||
/**
|
||||
*
|
||||
* - encoding: set by user.
|
||||
* - decoding: unused
|
||||
*/
|
||||
int brd_scale;
|
||||
} AVCodecContext;
|
||||
|
||||
/**
|
||||
|
@ -2145,9 +2145,9 @@ static int estimate_best_b_count(MpegEncContext *s){
|
||||
AVCodec *codec= avcodec_find_encoder(s->avctx->codec_id);
|
||||
AVCodecContext *c= avcodec_alloc_context();
|
||||
AVFrame input[FF_MAX_B_FRAMES+2];
|
||||
const int scale= 0;
|
||||
const int scale= s->avctx->brd_scale;
|
||||
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);
|
||||
ImgReSampleContext *resample;
|
||||
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].quality= 2 * FF_QP2LAMBDA;
|
||||
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++){
|
||||
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},
|
||||
{"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},
|
||||
{"brd_scale", NULL, OFFSET(brd_scale), FF_OPT_TYPE_INT, DEFAULT, 0, 10, V|E},
|
||||
{NULL},
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user