mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
mpegvideo: Fix exported qp table offest
Found-by: wm4 Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
70c0ae915d
commit
64308941d4
@ -750,12 +750,12 @@ intrax8_decoded:
|
|||||||
if ((ret = av_frame_ref(pict, &s->current_picture_ptr->f)) < 0)
|
if ((ret = av_frame_ref(pict, &s->current_picture_ptr->f)) < 0)
|
||||||
return ret;
|
return ret;
|
||||||
ff_print_debug_info(s, s->current_picture_ptr, pict);
|
ff_print_debug_info(s, s->current_picture_ptr, pict);
|
||||||
av_frame_set_qp_table(pict, av_buffer_ref(s->current_picture_ptr->qscale_table_buf), s->mb_stride, FF_QSCALE_TYPE_MPEG1);
|
ff_mpv_export_qp_table(s, pict, s->current_picture_ptr, FF_QSCALE_TYPE_MPEG1);
|
||||||
} else if (s->last_picture_ptr != NULL) {
|
} else if (s->last_picture_ptr != NULL) {
|
||||||
if ((ret = av_frame_ref(pict, &s->last_picture_ptr->f)) < 0)
|
if ((ret = av_frame_ref(pict, &s->last_picture_ptr->f)) < 0)
|
||||||
return ret;
|
return ret;
|
||||||
ff_print_debug_info(s, s->last_picture_ptr, pict);
|
ff_print_debug_info(s, s->last_picture_ptr, pict);
|
||||||
av_frame_set_qp_table(pict, av_buffer_ref(s->last_picture_ptr->qscale_table_buf), s->mb_stride, FF_QSCALE_TYPE_MPEG1);
|
ff_mpv_export_qp_table(s, pict, s->last_picture_ptr, FF_QSCALE_TYPE_MPEG1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(s->last_picture_ptr || s->low_delay){
|
if(s->last_picture_ptr || s->low_delay){
|
||||||
|
@ -1990,7 +1990,7 @@ static int slice_end(AVCodecContext *avctx, AVFrame *pict)
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
ff_print_debug_info(s, s->current_picture_ptr, pict);
|
ff_print_debug_info(s, s->current_picture_ptr, pict);
|
||||||
av_frame_set_qp_table(pict, av_buffer_ref(s->current_picture_ptr->qscale_table_buf), s->mb_stride, FF_QSCALE_TYPE_MPEG2);
|
ff_mpv_export_qp_table(s, pict, s->current_picture_ptr, FF_QSCALE_TYPE_MPEG2);
|
||||||
} else {
|
} else {
|
||||||
if (avctx->active_thread_type & FF_THREAD_FRAME)
|
if (avctx->active_thread_type & FF_THREAD_FRAME)
|
||||||
s->picture_number++;
|
s->picture_number++;
|
||||||
@ -2001,7 +2001,7 @@ static int slice_end(AVCodecContext *avctx, AVFrame *pict)
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
ff_print_debug_info(s, s->last_picture_ptr, pict);
|
ff_print_debug_info(s, s->last_picture_ptr, pict);
|
||||||
av_frame_set_qp_table(pict, av_buffer_ref(s->last_picture_ptr->qscale_table_buf), s->mb_stride, FF_QSCALE_TYPE_MPEG2);
|
ff_mpv_export_qp_table(s, pict, s->last_picture_ptr, FF_QSCALE_TYPE_MPEG2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2196,6 +2196,18 @@ void ff_print_debug_info(MpegEncContext *s, Picture *p, AVFrame *pict)
|
|||||||
s->mb_width, s->mb_height, s->mb_stride, s->quarter_sample);
|
s->mb_width, s->mb_height, s->mb_stride, s->quarter_sample);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ff_mpv_export_qp_table(MpegEncContext *s, AVFrame *f, Picture *p, int qp_type)
|
||||||
|
{
|
||||||
|
AVBufferRef *ref = av_buffer_ref(p->qscale_table_buf);
|
||||||
|
int offset = 2*s->mb_stride + 1;
|
||||||
|
if(!ref)
|
||||||
|
return AVERROR(ENOMEM);
|
||||||
|
av_assert0(ref->size >= offset + s->mb_stride * ((f->height+15)/16));
|
||||||
|
ref->size -= offset;
|
||||||
|
ref->data += offset;
|
||||||
|
return av_frame_set_qp_table(f, ref, s->mb_stride, qp_type);
|
||||||
|
}
|
||||||
|
|
||||||
static inline int hpel_motion_lowres(MpegEncContext *s,
|
static inline int hpel_motion_lowres(MpegEncContext *s,
|
||||||
uint8_t *dest, uint8_t *src,
|
uint8_t *dest, uint8_t *src,
|
||||||
int field_based, int field_select,
|
int field_based, int field_select,
|
||||||
|
@ -813,6 +813,8 @@ void ff_print_debug_info2(AVCodecContext *avctx, Picture *p, AVFrame *pict, uint
|
|||||||
int *low_delay,
|
int *low_delay,
|
||||||
int mb_width, int mb_height, int mb_stride, int quarter_sample);
|
int mb_width, int mb_height, int mb_stride, int quarter_sample);
|
||||||
|
|
||||||
|
int ff_mpv_export_qp_table(MpegEncContext *s, AVFrame *f, Picture *p, int qp_type);
|
||||||
|
|
||||||
void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix);
|
void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix);
|
||||||
void ff_release_unused_pictures(MpegEncContext *s, int remove_current);
|
void ff_release_unused_pictures(MpegEncContext *s, int remove_current);
|
||||||
int ff_find_unused_picture(MpegEncContext *s, int shared);
|
int ff_find_unused_picture(MpegEncContext *s, int shared);
|
||||||
|
@ -742,12 +742,12 @@ static int rv10_decode_frame(AVCodecContext *avctx,
|
|||||||
if ((ret = av_frame_ref(pict, &s->current_picture_ptr->f)) < 0)
|
if ((ret = av_frame_ref(pict, &s->current_picture_ptr->f)) < 0)
|
||||||
return ret;
|
return ret;
|
||||||
ff_print_debug_info(s, s->current_picture_ptr, pict);
|
ff_print_debug_info(s, s->current_picture_ptr, pict);
|
||||||
av_frame_set_qp_table(pict, av_buffer_ref(s->current_picture_ptr->qscale_table_buf), s->mb_stride, FF_QSCALE_TYPE_MPEG1);
|
ff_mpv_export_qp_table(s, pict, s->current_picture_ptr, FF_QSCALE_TYPE_MPEG1);
|
||||||
} else if (s->last_picture_ptr != NULL) {
|
} else if (s->last_picture_ptr != NULL) {
|
||||||
if ((ret = av_frame_ref(pict, &s->last_picture_ptr->f)) < 0)
|
if ((ret = av_frame_ref(pict, &s->last_picture_ptr->f)) < 0)
|
||||||
return ret;
|
return ret;
|
||||||
ff_print_debug_info(s, s->last_picture_ptr, pict);
|
ff_print_debug_info(s, s->last_picture_ptr, pict);
|
||||||
av_frame_set_qp_table(pict, av_buffer_ref(s->last_picture_ptr->qscale_table_buf), s->mb_stride, FF_QSCALE_TYPE_MPEG1);
|
ff_mpv_export_qp_table(s, pict,s->last_picture_ptr, FF_QSCALE_TYPE_MPEG1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(s->last_picture_ptr || s->low_delay){
|
if(s->last_picture_ptr || s->low_delay){
|
||||||
|
@ -1584,13 +1584,13 @@ static int finish_frame(AVCodecContext *avctx, AVFrame *pict)
|
|||||||
if ((ret = av_frame_ref(pict, &s->current_picture_ptr->f)) < 0)
|
if ((ret = av_frame_ref(pict, &s->current_picture_ptr->f)) < 0)
|
||||||
return ret;
|
return ret;
|
||||||
ff_print_debug_info(s, s->current_picture_ptr, pict);
|
ff_print_debug_info(s, s->current_picture_ptr, pict);
|
||||||
av_frame_set_qp_table(pict, av_buffer_ref(s->current_picture_ptr->qscale_table_buf), s->mb_stride, FF_QSCALE_TYPE_MPEG1);
|
ff_mpv_export_qp_table(s, pict, s->current_picture_ptr, FF_QSCALE_TYPE_MPEG1);
|
||||||
got_picture = 1;
|
got_picture = 1;
|
||||||
} else if (s->last_picture_ptr != NULL) {
|
} else if (s->last_picture_ptr != NULL) {
|
||||||
if ((ret = av_frame_ref(pict, &s->last_picture_ptr->f)) < 0)
|
if ((ret = av_frame_ref(pict, &s->last_picture_ptr->f)) < 0)
|
||||||
return ret;
|
return ret;
|
||||||
ff_print_debug_info(s, s->last_picture_ptr, pict);
|
ff_print_debug_info(s, s->last_picture_ptr, pict);
|
||||||
av_frame_set_qp_table(pict, av_buffer_ref(s->last_picture_ptr->qscale_table_buf), s->mb_stride, FF_QSCALE_TYPE_MPEG1);
|
ff_mpv_export_qp_table(s, pict, s->last_picture_ptr, FF_QSCALE_TYPE_MPEG1);
|
||||||
got_picture = 1;
|
got_picture = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user