Browse Source

avcodec/mpegvideo_enc: fix frame skipping with intra only codecs

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
tags/n2.2-rc1
Michael Niedermayer 12 years ago
parent
commit
34fe125f4b
2 changed files with 17 additions and 14 deletions
  1. +3
    -1
      libavcodec/mpegvideo.c
  2. +14
    -13
      libavcodec/mpegvideo_enc.c

+ 3
- 1
libavcodec/mpegvideo.c View File

@@ -2655,7 +2655,9 @@ FF_ENABLE_DEPRECATION_WARNINGS
else if (!is_mpeg12 && (s->h263_pred || s->h263_aic))
s->mbintra_table[mb_xy]=1;

if ((s->flags&CODEC_FLAG_PSNR) || !(s->encoding && (s->intra_only || s->pict_type==AV_PICTURE_TYPE_B) && s->avctx->mb_decision != FF_MB_DECISION_RD)) { //FIXME precalc
if ( (s->flags&CODEC_FLAG_PSNR)
|| s->avctx->frame_skip_threshold || s->avctx->frame_skip_factor
|| !(s->encoding && (s->intra_only || s->pict_type==AV_PICTURE_TYPE_B) && s->avctx->mb_decision != FF_MB_DECISION_RD)) { //FIXME precalc
uint8_t *dest_y, *dest_cb, *dest_cr;
int dct_linesize, dct_offset;
op_pixels_func (*op_pix)[4];


+ 14
- 13
libavcodec/mpegvideo_enc.c View File

@@ -1300,6 +1300,20 @@ static int select_input_picture(MpegEncContext *s)

/* set next picture type & ordering */
if (s->reordered_input_picture[0] == NULL && s->input_picture[0]) {
if (s->avctx->frame_skip_threshold || s->avctx->frame_skip_factor) {
if (s->picture_in_gop_number < s->gop_size &&
s->next_picture_ptr &&
skip_check(s, s->input_picture[0], s->next_picture_ptr)) {
// FIXME check that te gop check above is +-1 correct
av_frame_unref(&s->input_picture[0]->f);

emms_c();
ff_vbv_update(s, 0);

goto no_output_pic;
}
}

if (/*s->picture_in_gop_number >= s->gop_size ||*/
s->next_picture_ptr == NULL || s->intra_only) {
s->reordered_input_picture[0] = s->input_picture[0];
@@ -1309,19 +1323,6 @@ static int select_input_picture(MpegEncContext *s)
} else {
int b_frames;

if (s->avctx->frame_skip_threshold || s->avctx->frame_skip_factor) {
if (s->picture_in_gop_number < s->gop_size &&
skip_check(s, s->input_picture[0], s->next_picture_ptr)) {
// FIXME check that te gop check above is +-1 correct
av_frame_unref(&s->input_picture[0]->f);

emms_c();
ff_vbv_update(s, 0);

goto no_output_pic;
}
}

if (s->flags & CODEC_FLAG_PASS2) {
for (i = 0; i < s->max_b_frames + 1; i++) {
int pict_num = s->input_picture[0]->f.display_picture_number + i;


Loading…
Cancel
Save