[Libva] [PATCH V3: 1/4] HEVC10bit ENC: add private surface for p010 conversion to nv12
Pengfei Qu
Pengfei.Qu at intel.com
Tue Sep 6 00:09:28 UTC 2016
Signed-off-by: Pengfei Qu <Pengfei.Qu at intel.com>
---
src/intel_media.h | 5 +++++
src/intel_media_common.c | 10 ++++++++++
2 files changed, 15 insertions(+)
diff --git a/src/intel_media.h b/src/intel_media.h
index 87d315f..4a55a93 100644
--- a/src/intel_media.h
+++ b/src/intel_media.h
@@ -57,6 +57,11 @@ struct gen_hevc_surface
{
GenCodecSurface base;
dri_bo *motion_vector_temporal_bo;
+ //Encoding HEVC10:internal surface keep for P010->NV12 , this is only for hevc10 to save the P010->NV12
+ struct object_surface *nv12_surface_obj;
+ VASurfaceID nv12_surface_id;
+ VADriverContextP ctx;
+ int has_p010_to_nv12_done;
};
typedef struct gen_vp9_surface GenVP9Surface;
diff --git a/src/intel_media_common.c b/src/intel_media_common.c
index 8821bc4..01828b0 100644
--- a/src/intel_media_common.c
+++ b/src/intel_media_common.c
@@ -29,6 +29,7 @@
#include "intel_driver.h"
#include "intel_media.h"
+#include "i965_drv_video.h"
static pthread_mutex_t free_avc_surface_lock = PTHREAD_MUTEX_INITIALIZER;
@@ -92,6 +93,9 @@ gen_free_hevc_surface(void **data)
pthread_mutex_lock(&free_hevc_surface_lock);
+ if (!data || !*data)
+ return;
+
hevc_surface = *data;
if (!hevc_surface) {
@@ -102,6 +106,12 @@ gen_free_hevc_surface(void **data)
dri_bo_unreference(hevc_surface->motion_vector_temporal_bo);
hevc_surface->motion_vector_temporal_bo = NULL;
+ if (hevc_surface->nv12_surface_obj) {
+ i965_DestroySurfaces(hevc_surface->ctx, &hevc_surface->nv12_surface_id, 1);
+ hevc_surface->nv12_surface_id = VA_INVALID_SURFACE;
+ hevc_surface->nv12_surface_obj = NULL;
+ }
+
free(hevc_surface);
*data = NULL;
--
2.7.4
More information about the Libva
mailing list