[FFmpeg-devel] [PATCH,v3] lavf/qsvvpp:allocate continuous memory
Linjie Fu
linjie.fu at intel.com
Tue Jun 4 18:59:07 EEST 2019
Mediasdk calls CMRT to copy from video to system memory and requires
memory to be continuously allocated across Y and UV.
Add a new path to allocate continuous memory when using system out.
Use av_frame_get_buffer to arrange data according to pixfmt, and remove
the introduced plane_padding.
Signed-off-by: Linjie Fu <linjie.fu at intel.com>
---
libavfilter/qsvvpp.c | 26 ++++++++++++++++++++------
1 file changed, 20 insertions(+), 6 deletions(-)
diff --git a/libavfilter/qsvvpp.c b/libavfilter/qsvvpp.c
index 5cd1d5d345..c06171444f 100644
--- a/libavfilter/qsvvpp.c
+++ b/libavfilter/qsvvpp.c
@@ -350,7 +350,7 @@ static QSVFrame *query_frame(QSVVPPContext *s, AVFilterLink *outlink)
{
AVFilterContext *ctx = outlink->src;
QSVFrame *out_frame;
- int ret;
+ int i, ret;
clear_unused_frames(s->out_frame_list);
@@ -374,12 +374,26 @@ static QSVFrame *query_frame(QSVVPPContext *s, AVFilterLink *outlink)
out_frame->surface = (mfxFrameSurface1 *)out_frame->frame->data[3];
} else {
/* Get a frame with aligned dimensions.
- * Libmfx need system memory being 128x64 aligned */
- out_frame->frame = ff_get_video_buffer(outlink,
- FFALIGN(outlink->w, 128),
- FFALIGN(outlink->h, 64));
- if (!out_frame->frame)
+ * Libmfx need system memory being 128x64 aligned
+ * and continuously allocated across Y and UV */
+ out_frame->frame = av_frame_alloc();
+ if (!out_frame->frame) {
return NULL;
+ }
+
+ out_frame->frame->width = FFALIGN(outlink->w, 128);
+ out_frame->frame->height = FFALIGN(outlink->h, 64);
+ out_frame->frame->format = outlink->format;
+
+ ret = av_frame_get_buffer(out_frame->frame, 128);
+ if (ret < 0)
+ return NULL;
+
+ /* remove plane_padding introduced by av_frame_get_buffer */
+ for (i = 1; i < 4; i++) {
+ if (out_frame->frame->data[i])
+ out_frame->frame->data[i] -= i * 128;
+ }
out_frame->frame->width = outlink->w;
out_frame->frame->height = outlink->h;
--
2.17.1
More information about the ffmpeg-devel
mailing list