mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-01-30 03:13:18 +00:00
avfilter/framepool: use av_image_fill_plane_sizes() to calculate pool sizes
Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
parent
837c55da3d
commit
8fcd9d7375
@ -57,6 +57,8 @@ FFFramePool *ff_frame_pool_video_init(AVBufferRef* (*alloc)(size_t size),
|
||||
int i, ret;
|
||||
FFFramePool *pool;
|
||||
const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(format);
|
||||
ptrdiff_t linesizes[4];
|
||||
size_t sizes[4];
|
||||
|
||||
if (!desc)
|
||||
return NULL;
|
||||
@ -89,13 +91,19 @@ FFFramePool *ff_frame_pool_video_init(AVBufferRef* (*alloc)(size_t size),
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < 4 && pool->linesize[i]; i++) {
|
||||
int h = pool->height;
|
||||
if (i == 1 || i == 2)
|
||||
h = AV_CEIL_RSHIFT(h, desc->log2_chroma_h);
|
||||
for (i = 0; i < 4; i++)
|
||||
linesizes[i] = pool->linesize[i];
|
||||
|
||||
pool->pools[i] = av_buffer_pool_init(pool->linesize[i] * h + align,
|
||||
alloc);
|
||||
if (av_image_fill_plane_sizes(sizes, pool->format,
|
||||
pool->height,
|
||||
linesizes) < 0) {
|
||||
goto fail;
|
||||
}
|
||||
|
||||
for (i = 0; i < 4 && sizes[i]; i++) {
|
||||
if (sizes[i] > SIZE_MAX - align)
|
||||
goto fail;
|
||||
pool->pools[i] = av_buffer_pool_init(sizes[i] + align, alloc);
|
||||
if (!pool->pools[i])
|
||||
goto fail;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user