[FFmpeg-cvslog] mpegvideo: Rework various functions not to use MpegEncContext directly

Vittorio Giovara git at videolan.org
Fri May 22 22:48:11 CEST 2015


ffmpeg | branch: master | Vittorio Giovara <vittorio.giovara at gmail.com> | Mon Apr 27 22:09:21 2015 +0100| [4e17946f10d39eec6cc03fb249ae8147373141b6] | committer: Vittorio Giovara

mpegvideo: Rework various functions not to use MpegEncContext directly

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=4e17946f10d39eec6cc03fb249ae8147373141b6
---

 libavcodec/h263dec.c       |    2 +-
 libavcodec/mpegvideo.c     |   34 +++++++++++++++++-----------------
 libavcodec/mpegvideo.h     |    3 ++-
 libavcodec/mpegvideo_enc.c |    4 ++--
 4 files changed, 22 insertions(+), 21 deletions(-)

diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c
index 0a03054..0e08a8d 100644
--- a/libavcodec/h263dec.c
+++ b/libavcodec/h263dec.c
@@ -463,7 +463,7 @@ int ff_h263_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
     }
 
     if (!s->current_picture_ptr || s->current_picture_ptr->f->data[0]) {
-        int i = ff_find_unused_picture(s, 0);
+        int i = ff_find_unused_picture(s->avctx, s->picture, 0);
         if (i < 0)
             return i;
         s->current_picture_ptr = &s->picture[i];
diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index 8055d15..f81e357 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -1612,18 +1612,18 @@ av_cold void ff_init_vlc_rl(RLTable *rl)
     }
 }
 
-static void release_unused_pictures(MpegEncContext *s)
+static void release_unused_pictures(AVCodecContext *avctx, Picture *picture)
 {
     int i;
 
     /* release non reference frames */
     for (i = 0; i < MAX_PICTURE_COUNT; i++) {
-        if (!s->picture[i].reference)
-            ff_mpeg_unref_picture(s->avctx, &s->picture[i]);
+        if (!picture[i].reference)
+            ff_mpeg_unref_picture(avctx, &picture[i]);
     }
 }
 
-static inline int pic_is_unused(MpegEncContext *s, Picture *pic)
+static inline int pic_is_unused(Picture *pic)
 {
     if (!pic->f->buf[0])
         return 1;
@@ -1632,18 +1632,18 @@ static inline int pic_is_unused(MpegEncContext *s, Picture *pic)
     return 0;
 }
 
-static int find_unused_picture(MpegEncContext *s, int shared)
+static int find_unused_picture(Picture *picture, int shared)
 {
     int i;
 
     if (shared) {
         for (i = 0; i < MAX_PICTURE_COUNT; i++) {
-            if (!s->picture[i].f->buf[0])
+            if (!picture[i].f->buf[0])
                 return i;
         }
     } else {
         for (i = 0; i < MAX_PICTURE_COUNT; i++) {
-            if (pic_is_unused(s, &s->picture[i]))
+            if (pic_is_unused(&picture[i]))
                 return i;
         }
     }
@@ -1651,15 +1651,15 @@ static int find_unused_picture(MpegEncContext *s, int shared)
     return AVERROR_INVALIDDATA;
 }
 
-int ff_find_unused_picture(MpegEncContext *s, int shared)
+int ff_find_unused_picture(AVCodecContext *avctx, Picture *picture, int shared)
 {
-    int ret = find_unused_picture(s, shared);
+    int ret = find_unused_picture(picture, shared);
 
     if (ret >= 0 && ret < MAX_PICTURE_COUNT) {
-        if (s->picture[ret].needs_realloc) {
-            s->picture[ret].needs_realloc = 0;
-            ff_free_picture_tables(&s->picture[ret]);
-            ff_mpeg_unref_picture(s->avctx, &s->picture[ret]);
+        if (picture[ret].needs_realloc) {
+            picture[ret].needs_realloc = 0;
+            ff_free_picture_tables(&picture[ret]);
+            ff_mpeg_unref_picture(avctx, &picture[ret]);
         }
     }
     return ret;
@@ -1697,14 +1697,14 @@ int ff_mpv_frame_start(MpegEncContext *s, AVCodecContext *avctx)
 
     ff_mpeg_unref_picture(s->avctx, &s->current_picture);
 
-    release_unused_pictures(s);
+    release_unused_pictures(s->avctx, s->picture);
 
     if (s->current_picture_ptr && !s->current_picture_ptr->f->buf[0]) {
         // we already have a unused image
         // (maybe it was set before reading the header)
         pic = s->current_picture_ptr;
     } else {
-        i   = ff_find_unused_picture(s, 0);
+        i   = ff_find_unused_picture(s->avctx, s->picture, 0);
         if (i < 0) {
             av_log(s->avctx, AV_LOG_ERROR, "no frame buffer available\n");
             return i;
@@ -1771,7 +1771,7 @@ int ff_mpv_frame_start(MpegEncContext *s, AVCodecContext *avctx)
                    "allocate dummy last picture for field based first keyframe\n");
 
         /* Allocate a dummy frame */
-        i = ff_find_unused_picture(s, 0);
+        i = ff_find_unused_picture(s->avctx, s->picture, 0);
         if (i < 0) {
             av_log(s->avctx, AV_LOG_ERROR, "no frame buffer available\n");
             return i;
@@ -1801,7 +1801,7 @@ int ff_mpv_frame_start(MpegEncContext *s, AVCodecContext *avctx)
     if ((!s->next_picture_ptr || !s->next_picture_ptr->f->buf[0]) &&
         s->pict_type == AV_PICTURE_TYPE_B) {
         /* Allocate a dummy frame */
-        i = ff_find_unused_picture(s, 0);
+        i = ff_find_unused_picture(s->avctx, s->picture, 0);
         if (i < 0) {
             av_log(s->avctx, AV_LOG_ERROR, "no frame buffer available\n");
             return i;
diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h
index aec74b4..8ac7851 100644
--- a/libavcodec/mpegvideo.h
+++ b/libavcodec/mpegvideo.h
@@ -742,7 +742,8 @@ 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_write_quant_matrix(PutBitContext *pb, uint16_t *matrix);
-int ff_find_unused_picture(MpegEncContext *s, int shared);
+
+int ff_find_unused_picture(AVCodecContext *avctx, Picture *picture, int shared);
 int ff_update_duplicate_context(MpegEncContext *dst, MpegEncContext *src);
 int ff_mpeg_update_thread_context(AVCodecContext *dst, const AVCodecContext *src);
 void ff_set_qscale(MpegEncContext * s, int qscale);
diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c
index ec495c1..15cca64 100644
--- a/libavcodec/mpegvideo_enc.c
+++ b/libavcodec/mpegvideo_enc.c
@@ -994,7 +994,7 @@ static int load_input_picture(MpegEncContext *s, const AVFrame *pic_arg)
         ff_dlog(s->avctx, "%d %d %td %td\n", pic_arg->linesize[0],
                 pic_arg->linesize[1], s->linesize, s->uvlinesize);
 
-        i = ff_find_unused_picture(s, direct);
+        i = ff_find_unused_picture(s->avctx, s->picture, direct);
         if (i < 0)
             return i;
 
@@ -1379,7 +1379,7 @@ no_output_pic:
             // one & ensure that the shared one is reuseable
 
             Picture *pic;
-            int i = ff_find_unused_picture(s, 0);
+            int i = ff_find_unused_picture(s->avctx, s->picture, 0);
             if (i < 0)
                 return i;
             pic = &s->picture[i];



More information about the ffmpeg-cvslog mailing list