mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-28 13:16:41 +00:00
libva-driver-intel: VPP: Make sure the store buffer is allocated
fixes a segfault. thanks fritsch
This commit is contained in:
parent
f9e4c0b900
commit
6f25fd325c
@ -0,0 +1,73 @@
|
|||||||
|
From 545888beaa727d588c78422161a43355898cc908 Mon Sep 17 00:00:00 2001
|
||||||
|
From: "Xiang, Haihao" <haihao.xiang@intel.com>
|
||||||
|
Date: Mon, 23 Mar 2015 09:41:52 +0800
|
||||||
|
Subject: [PATCH] VPP: Make sure the store buffer is allocated
|
||||||
|
|
||||||
|
Signed-off-by: Xiang, Haihao <haihao.xiang@intel.com>
|
||||||
|
---
|
||||||
|
src/i965_post_processing.c | 38 ++++++++++++++++++++++----------------
|
||||||
|
1 file changed, 22 insertions(+), 16 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/i965_post_processing.c b/src/i965_post_processing.c
|
||||||
|
index 2c01e43..f5bf89c 100755
|
||||||
|
--- a/src/i965_post_processing.c
|
||||||
|
+++ b/src/i965_post_processing.c
|
||||||
|
@@ -1294,25 +1294,32 @@ pp_dndi_context_ensure_surfaces_storage(VADriverContextP ctx,
|
||||||
|
VASurfaceID new_surface;
|
||||||
|
unsigned int width, height;
|
||||||
|
|
||||||
|
- if (dndi_ctx->frame_store[i].obj_surface)
|
||||||
|
+ if (dndi_ctx->frame_store[i].obj_surface &&
|
||||||
|
+ dndi_ctx->frame_store[i].obj_surface->bo)
|
||||||
|
continue; // user allocated surface, not VPP internal
|
||||||
|
|
||||||
|
- if (i <= DNDI_FRAME_IN_STMM) {
|
||||||
|
- width = src_surface->orig_width;
|
||||||
|
- height = src_surface->orig_height;
|
||||||
|
- }
|
||||||
|
- else {
|
||||||
|
- width = dst_surface->orig_width;
|
||||||
|
- height = dst_surface->orig_height;
|
||||||
|
- }
|
||||||
|
+ if (dndi_ctx->frame_store[i].obj_surface) {
|
||||||
|
+ obj_surface = dndi_ctx->frame_store[i].obj_surface;
|
||||||
|
+ dndi_ctx->frame_store[i].is_scratch_surface = 0;
|
||||||
|
+ } else {
|
||||||
|
+ if (i <= DNDI_FRAME_IN_STMM) {
|
||||||
|
+ width = src_surface->orig_width;
|
||||||
|
+ height = src_surface->orig_height;
|
||||||
|
+ }
|
||||||
|
+ else {
|
||||||
|
+ width = dst_surface->orig_width;
|
||||||
|
+ height = dst_surface->orig_height;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- status = i965_CreateSurfaces(ctx, width, height, VA_RT_FORMAT_YUV420,
|
||||||
|
- 1, &new_surface);
|
||||||
|
- if (status != VA_STATUS_SUCCESS)
|
||||||
|
- return status;
|
||||||
|
+ status = i965_CreateSurfaces(ctx, width, height, VA_RT_FORMAT_YUV420,
|
||||||
|
+ 1, &new_surface);
|
||||||
|
+ if (status != VA_STATUS_SUCCESS)
|
||||||
|
+ return status;
|
||||||
|
|
||||||
|
- obj_surface = SURFACE(new_surface);
|
||||||
|
- assert(obj_surface != NULL);
|
||||||
|
+ obj_surface = SURFACE(new_surface);
|
||||||
|
+ assert(obj_surface != NULL);
|
||||||
|
+ dndi_ctx->frame_store[i].is_scratch_surface = 1;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if (i <= DNDI_FRAME_IN_PREVIOUS) {
|
||||||
|
status = i965_check_alloc_surface_bo(ctx, obj_surface,
|
||||||
|
@@ -1330,7 +1337,6 @@ pp_dndi_context_ensure_surfaces_storage(VADriverContextP ctx,
|
||||||
|
return status;
|
||||||
|
|
||||||
|
dndi_ctx->frame_store[i].obj_surface = obj_surface;
|
||||||
|
- dndi_ctx->frame_store[i].is_scratch_surface = 1;
|
||||||
|
}
|
||||||
|
return VA_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
1.7.9.5
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user