aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorVittorio Giovara <vittorio.giovara@gmail.com>2015-05-31 15:49:53 +0200
committerVittorio Giovara <vittorio.giovara@gmail.com>2015-06-08 12:39:42 +0100
commitf8716a1408f4f4ec63857b7015fbd62f9eac344a (patch)
tree1bf39b444916b085027897027d5ff16d3152f069 /libavcodec
parentda0c8664b4dc906696803685f7e53ade68594ab8 (diff)
downloadffmpeg-f8716a1408f4f4ec63857b7015fbd62f9eac344a.tar.gz
mpegvideo: Rework frame_size_alloc function
Use more generic arguments and remove its static attribute since it will be moved to a separate file.
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/mpegvideo.c25
-rw-r--r--libavcodec/mpegvideo.h2
2 files changed, 16 insertions, 11 deletions
diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index a8ed98d5ca..ded56c916c 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -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);
diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h
index 5bcc4505c8..ecb13caf75 100644
--- a/libavcodec/mpegvideo.h
+++ b/libavcodec/mpegvideo.h
@@ -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