aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Almer <jamrial@gmail.com>2024-11-09 11:20:59 -0300
committerJames Almer <jamrial@gmail.com>2024-11-09 19:33:56 -0300
commitf15fc27db5b30365f2aec474bae9b8095d6d2197 (patch)
treeb6f3b0c723068fbcdb5c5fa659f5b6637b492971
parent6d5a0998b69a8ec7e67f880d3ff81367bc439574 (diff)
downloadffmpeg-f15fc27db5b30365f2aec474bae9b8095d6d2197.tar.gz
avfilter/framepool: align the frame buffers
And not just the linesizes. Use the extra align bytes allocated for this purpose. Signed-off-by: James Almer <jamrial@gmail.com>
-rw-r--r--libavfilter/framepool.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/libavfilter/framepool.c b/libavfilter/framepool.c
index e8621e07ac..1a1fc0de1e 100644
--- a/libavfilter/framepool.c
+++ b/libavfilter/framepool.c
@@ -139,7 +139,9 @@ FFFramePool *ff_frame_pool_audio_init(AVBufferRef* (*alloc)(size_t size),
if (ret < 0)
goto fail;
- pool->pools[0] = av_buffer_pool_init(pool->linesize[0], NULL);
+ if (pool->linesize[0] > SIZE_MAX - align)
+ goto fail;
+ pool->pools[0] = av_buffer_pool_init(pool->linesize[0] + align, NULL);
if (!pool->pools[0])
goto fail;
@@ -219,7 +221,7 @@ AVFrame *ff_frame_pool_get(FFFramePool *pool)
if (!frame->buf[i])
goto fail;
- frame->data[i] = frame->buf[i]->data;
+ frame->data[i] = (uint8_t *)FFALIGN((uintptr_t)frame->buf[i]->data, pool->align);
}
if (desc->flags & AV_PIX_FMT_FLAG_PAL) {
@@ -256,13 +258,15 @@ AVFrame *ff_frame_pool_get(FFFramePool *pool)
frame->buf[i] = av_buffer_pool_get(pool->pools[0]);
if (!frame->buf[i])
goto fail;
- frame->extended_data[i] = frame->data[i] = frame->buf[i]->data;
+ frame->extended_data[i] = frame->data[i] =
+ (uint8_t *)FFALIGN((uintptr_t)frame->buf[i]->data, pool->align);
}
for (i = 0; i < frame->nb_extended_buf; i++) {
frame->extended_buf[i] = av_buffer_pool_get(pool->pools[0]);
if (!frame->extended_buf[i])
goto fail;
- frame->extended_data[i + AV_NUM_DATA_POINTERS] = frame->extended_buf[i]->data;
+ frame->extended_data[i + AV_NUM_DATA_POINTERS] =
+ (uint8_t *)FFALIGN((uintptr_t)frame->extended_buf[i]->data, pool->align);
}
break;