]> git.sesse.net Git - ffmpeg/commitdiff
mpegvideo: Rework frame_size_alloc function
authorVittorio Giovara <vittorio.giovara@gmail.com>
Sun, 31 May 2015 13:49:53 +0000 (15:49 +0200)
committerVittorio Giovara <vittorio.giovara@gmail.com>
Mon, 8 Jun 2015 11:39:42 +0000 (12:39 +0100)
Use more generic arguments and remove its static attribute since it will
be moved to a separate file.

libavcodec/mpegvideo.c
libavcodec/mpegvideo.h

index a8ed98d5caec427cabedcf4b51732565b042ffb2..ded56c916c6507e2ea4bba7e80333c258f3bd1ee 100644 (file)
@@ -343,25 +343,25 @@ av_cold void ff_mpv_idct_init(MpegEncContext *s)
     ff_init_scantable(s->idsp.idct_permutation, &s->intra_v_scantable, ff_alternate_vertical_scan);
 }
 
-static int frame_size_alloc(MpegEncContext *s, int linesize)
+int ff_mpeg_framesize_alloc(AVCodecContext *avctx, MotionEstContext *me,
+                            ScratchpadContext *sc, int linesize)
 {
     int alloc_size = FFALIGN(FFABS(linesize) + 32, 32);
-    ScratchpadContext *sc = &s->sc;
 
     // edge emu needs blocksize + filter length - 1
     // (= 17x17 for  halfpel / 21x21 for  h264)
     // VC1 computes luma and chroma simultaneously and needs 19X19 + 9x9
     // at uvlinesize. It supports only YUV420 so 24x24 is enough
     // linesize * interlaced * MBsize
-    FF_ALLOCZ_OR_GOTO(s->avctx, sc->edge_emu_buffer, alloc_size * 2 * 24,
+    FF_ALLOCZ_OR_GOTO(avctx, sc->edge_emu_buffer, alloc_size * 2 * 24,
                       fail);
 
-    FF_ALLOCZ_OR_GOTO(s->avctx, s->me.scratchpad, alloc_size * 2 * 16 * 3,
+    FF_ALLOCZ_OR_GOTO(avctx, me->scratchpad, alloc_size * 2 * 16 * 3,
                       fail)
-    s->me.temp          = s->me.scratchpad;
-    sc->rd_scratchpad   = s->me.scratchpad;
-    sc->b_scratchpad    = s->me.scratchpad;
-    sc->obmc_scratchpad = s->me.scratchpad + 16;
+    me->temp            = me->scratchpad;
+    sc->rd_scratchpad   = me->scratchpad;
+    sc->b_scratchpad    = me->scratchpad;
+    sc->obmc_scratchpad = me->scratchpad + 16;
 
     return 0;
 fail:
@@ -441,7 +441,8 @@ static int alloc_frame_buffer(MpegEncContext *s, Picture *pic)
     }
 
     if (!s->sc.edge_emu_buffer &&
-        (ret = frame_size_alloc(s, pic->f->linesize[0])) < 0) {
+        (ret = ff_mpeg_framesize_alloc(s->avctx, &s->me, &s->sc,
+                                       pic->f->linesize[0])) < 0) {
         av_log(s->avctx, AV_LOG_ERROR,
                "get_buffer() failed to allocate context scratch buffers.\n");
         ff_mpeg_unref_picture(s->avctx, pic);
@@ -804,7 +805,8 @@ int ff_update_duplicate_context(MpegEncContext *dst, MpegEncContext *src)
         dst->pblocks[5] = tmp;
     }
     if (!dst->sc.edge_emu_buffer &&
-        (ret = frame_size_alloc(dst, dst->linesize)) < 0) {
+        (ret = ff_mpeg_framesize_alloc(dst->avctx, &dst->me,
+                                       &dst->sc, dst->linesize)) < 0) {
         av_log(dst->avctx, AV_LOG_ERROR, "failed to allocate context "
                "scratch buffers.\n");
         return ret;
@@ -919,7 +921,8 @@ do {\
     // linesize dependend scratch buffer allocation
     if (!s->sc.edge_emu_buffer)
         if (s1->linesize) {
-            if (frame_size_alloc(s, s1->linesize) < 0) {
+            if (ff_mpeg_framesize_alloc(s->avctx, &s->me,
+                                        &s->sc, s1->linesize) < 0) {
                 av_log(s->avctx, AV_LOG_ERROR, "Failed to allocate context "
                        "scratch buffers.\n");
                 return AVERROR(ENOMEM);
index 5bcc4505c8fdebe7cdf45aafa96202fa38ca7e29..ecb13caf75ce14b689a69b42c08db36b0b7a7916 100644 (file)
@@ -710,6 +710,8 @@ void ff_mpv_motion(MpegEncContext *s,
  */
 int ff_alloc_picture(MpegEncContext *s, Picture *pic, int shared);
 
+int ff_mpeg_framesize_alloc(AVCodecContext *avctx, MotionEstContext *me,
+                            ScratchpadContext *sc, int linesize);
 /**
  * permute block according to permuatation.
  * @param last last non zero element in scantable order