avcodec: fix motion vector vissualization
authorMichael Niedermayer <michaelni@gmx.at>
Tue, 12 Mar 2013 10:23:07 +0000 (11:23 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 12 Mar 2013 10:23:07 +0000 (11:23 +0100)
was broken by the buffer ref stuff

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavcodec/h261dec.c
libavcodec/h263dec.c
libavcodec/h264.c
libavcodec/mpeg12.c
libavcodec/mpegvideo.c
libavcodec/mpegvideo.h
libavcodec/rv10.c
libavcodec/rv34.c
libavcodec/vc1dec.c

index f4f4dfb..03770be 100644 (file)
@@ -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;
 
index 4f31682..084ae45 100644 (file)
@@ -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){
index 1826ced..9dd4ceb 100644 (file)
@@ -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);
             }
         }
index bf23e07..634f971 100644 (file)
@@ -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);
             }
         }
 
index b4c3c99..a8a8f0b 100644 (file)
@@ -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);
 }
 
index 2118e52..41850df 100644 (file)
@@ -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);
index e2ccee7..da34785 100644 (file)
@@ -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){
index 629564a..1ddac8e 100644 (file)
@@ -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;
     }
 
index aafc358..6ffb0c2 100644 (file)
@@ -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;