mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
avcodec: fix motion vector vissualization
was broken by the buffer ref stuff Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
6ae4372532
commit
53fd4f5594
@ -634,7 +634,7 @@ retry:
|
||||
|
||||
if ((ret = av_frame_ref(pict, &s->current_picture_ptr->f)) < 0)
|
||||
return ret;
|
||||
ff_print_debug_info(s, s->current_picture_ptr);
|
||||
ff_print_debug_info(s, s->current_picture_ptr, pict);
|
||||
|
||||
*got_frame = 1;
|
||||
|
||||
|
@ -749,11 +749,11 @@ intrax8_decoded:
|
||||
if (s->pict_type == AV_PICTURE_TYPE_B || s->low_delay) {
|
||||
if ((ret = av_frame_ref(pict, &s->current_picture_ptr->f)) < 0)
|
||||
return ret;
|
||||
ff_print_debug_info(s, s->current_picture_ptr);
|
||||
ff_print_debug_info(s, s->current_picture_ptr, pict);
|
||||
} else if (s->last_picture_ptr != NULL) {
|
||||
if ((ret = av_frame_ref(pict, &s->last_picture_ptr->f)) < 0)
|
||||
return ret;
|
||||
ff_print_debug_info(s, s->last_picture_ptr);
|
||||
ff_print_debug_info(s, s->last_picture_ptr, pict);
|
||||
}
|
||||
|
||||
if(s->last_picture_ptr || s->low_delay){
|
||||
|
@ -4920,7 +4920,7 @@ not_extra:
|
||||
*got_frame = 1;
|
||||
if (CONFIG_MPEGVIDEO) {
|
||||
ff_print_debug_info2(h->avctx, h->next_output_pic, pict, h->er.mbskip_table,
|
||||
h->visualization_buffer, &h->low_delay,
|
||||
&h->low_delay,
|
||||
h->mb_width, h->mb_height, h->mb_stride, 1);
|
||||
}
|
||||
}
|
||||
|
@ -1989,7 +1989,7 @@ static int slice_end(AVCodecContext *avctx, AVFrame *pict)
|
||||
int ret = av_frame_ref(pict, &s->current_picture_ptr->f);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
ff_print_debug_info(s, s->current_picture_ptr);
|
||||
ff_print_debug_info(s, s->current_picture_ptr, pict);
|
||||
} else {
|
||||
if (avctx->active_thread_type & FF_THREAD_FRAME)
|
||||
s->picture_number++;
|
||||
@ -1999,7 +1999,7 @@ static int slice_end(AVCodecContext *avctx, AVFrame *pict)
|
||||
int ret = av_frame_ref(pict, &s->last_picture_ptr->f);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
ff_print_debug_info(s, s->last_picture_ptr);
|
||||
ff_print_debug_info(s, s->last_picture_ptr, pict);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1914,7 +1914,7 @@ static void draw_arrow(uint8_t *buf, int sx, int sy, int ex,
|
||||
* Print debugging info for the given picture.
|
||||
*/
|
||||
void ff_print_debug_info2(AVCodecContext *avctx, Picture *p, AVFrame *pict, uint8_t *mbskip_table,
|
||||
uint8_t *visualization_buffer[3], int *low_delay,
|
||||
int *low_delay,
|
||||
int mb_width, int mb_height, int mb_stride, int quarter_sample)
|
||||
{
|
||||
if (avctx->hwaccel || !p || !p->mb_type
|
||||
@ -2001,20 +2001,16 @@ void ff_print_debug_info2(AVCodecContext *avctx, Picture *p, AVFrame *pict, uint
|
||||
int h_chroma_shift, v_chroma_shift, block_height;
|
||||
const int width = avctx->width;
|
||||
const int height = avctx->height;
|
||||
const int mv_sample_log2 = 4 - pict->motion_subsample_log2;
|
||||
const int mv_sample_log2 = avctx->codec_id == AV_CODEC_ID_H264 || avctx->codec_id == AV_CODEC_ID_SVQ3 ? 2 : 1;
|
||||
const int mv_stride = (mb_width << mv_sample_log2) +
|
||||
(avctx->codec->id == AV_CODEC_ID_H264 ? 0 : 1);
|
||||
|
||||
*low_delay = 0; // needed to see the vectors without trashing the buffers
|
||||
|
||||
avcodec_get_chroma_sub_sample(avctx->pix_fmt, &h_chroma_shift, &v_chroma_shift);
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
size_t size= (i == 0) ? pict->linesize[i] * FFALIGN(height, 16):
|
||||
pict->linesize[i] * FFALIGN(height, 16) >> v_chroma_shift;
|
||||
visualization_buffer[i]= av_realloc(visualization_buffer[i], size);
|
||||
memcpy(visualization_buffer[i], pict->data[i], size);
|
||||
pict->data[i] = visualization_buffer[i];
|
||||
}
|
||||
av_frame_make_writable(pict);
|
||||
|
||||
pict->opaque = NULL;
|
||||
ptr = pict->data[0];
|
||||
block_height = 16 >> v_chroma_shift;
|
||||
@ -2203,9 +2199,9 @@ void ff_print_debug_info2(AVCodecContext *avctx, Picture *p, AVFrame *pict, uint
|
||||
}
|
||||
}
|
||||
|
||||
void ff_print_debug_info(MpegEncContext *s, Picture *p)
|
||||
void ff_print_debug_info(MpegEncContext *s, Picture *p, AVFrame *pict)
|
||||
{
|
||||
ff_print_debug_info2(s->avctx, p, &p->f, s->mbskip_table, s->visualization_buffer, &s->low_delay,
|
||||
ff_print_debug_info2(s->avctx, p, pict, s->mbskip_table, &s->low_delay,
|
||||
s->mb_width, s->mb_height, s->mb_stride, s->quarter_sample);
|
||||
}
|
||||
|
||||
|
@ -808,9 +808,9 @@ void ff_draw_horiz_band(AVCodecContext *avctx, DSPContext *dsp, Picture *cur,
|
||||
void ff_mpeg_draw_horiz_band(MpegEncContext *s, int y, int h);
|
||||
void ff_mpeg_flush(AVCodecContext *avctx);
|
||||
|
||||
void ff_print_debug_info(MpegEncContext *s, Picture *p);
|
||||
void ff_print_debug_info(MpegEncContext *s, Picture *p, AVFrame *pict);
|
||||
void ff_print_debug_info2(AVCodecContext *avctx, Picture *p, AVFrame *pict, uint8_t *mbskip_table,
|
||||
uint8_t *visualization_buffer[3], int *low_delay,
|
||||
int *low_delay,
|
||||
int mb_width, int mb_height, int mb_stride, int quarter_sample);
|
||||
|
||||
void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix);
|
||||
|
@ -741,11 +741,11 @@ static int rv10_decode_frame(AVCodecContext *avctx,
|
||||
if (s->pict_type == AV_PICTURE_TYPE_B || s->low_delay) {
|
||||
if ((ret = av_frame_ref(pict, &s->current_picture_ptr->f)) < 0)
|
||||
return ret;
|
||||
ff_print_debug_info(s, s->current_picture_ptr);
|
||||
ff_print_debug_info(s, s->current_picture_ptr, pict);
|
||||
} else if (s->last_picture_ptr != NULL) {
|
||||
if ((ret = av_frame_ref(pict, &s->last_picture_ptr->f)) < 0)
|
||||
return ret;
|
||||
ff_print_debug_info(s, s->last_picture_ptr);
|
||||
ff_print_debug_info(s, s->last_picture_ptr, pict);
|
||||
}
|
||||
|
||||
if(s->last_picture_ptr || s->low_delay){
|
||||
|
@ -1583,12 +1583,12 @@ static int finish_frame(AVCodecContext *avctx, AVFrame *pict)
|
||||
if (s->pict_type == AV_PICTURE_TYPE_B || s->low_delay) {
|
||||
if ((ret = av_frame_ref(pict, &s->current_picture_ptr->f)) < 0)
|
||||
return ret;
|
||||
ff_print_debug_info(s, s->current_picture_ptr);
|
||||
ff_print_debug_info(s, s->current_picture_ptr, pict);
|
||||
got_picture = 1;
|
||||
} else if (s->last_picture_ptr != NULL) {
|
||||
if ((ret = av_frame_ref(pict, &s->last_picture_ptr->f)) < 0)
|
||||
return ret;
|
||||
ff_print_debug_info(s, s->last_picture_ptr);
|
||||
ff_print_debug_info(s, s->last_picture_ptr, pict);
|
||||
got_picture = 1;
|
||||
}
|
||||
|
||||
|
@ -5763,11 +5763,11 @@ image:
|
||||
if (s->pict_type == AV_PICTURE_TYPE_B || s->low_delay) {
|
||||
if ((ret = av_frame_ref(pict, &s->current_picture_ptr->f)) < 0)
|
||||
goto err;
|
||||
ff_print_debug_info(s, s->current_picture_ptr);
|
||||
ff_print_debug_info(s, s->current_picture_ptr, pict);
|
||||
} else if (s->last_picture_ptr != NULL) {
|
||||
if ((ret = av_frame_ref(pict, &s->last_picture_ptr->f)) < 0)
|
||||
goto err;
|
||||
ff_print_debug_info(s, s->last_picture_ptr);
|
||||
ff_print_debug_info(s, s->last_picture_ptr, pict);
|
||||
}
|
||||
if (s->last_picture_ptr || s->low_delay) {
|
||||
*got_frame = 1;
|
||||
|
Loading…
Reference in New Issue
Block a user