mirror of
https://github.com/nyanmisaka/ffmpeg-rockchip.git
synced 2026-01-24 02:20:56 +01:00
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>
(cherry picked from commit f15fc27db5)
This commit is contained in:
parent
b9abdd9eaa
commit
fa15e3839d
1 changed files with 8 additions and 4 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue