[07/12] st/va: add HEVC picture desc

Submitted by Zhang, Boyuan on Feb. 2, 2018, 4:10 p.m.

Details

Message ID 1517587848-10779-7-git-send-email-boyuan.zhang@amd.com
State New
Headers show
Series "Series without cover letter" ( rev: 3 2 1 ) in Mesa

Not browsing as part of any series.

Commit Message

Zhang, Boyuan Feb. 2, 2018, 4:10 p.m.
From: Boyuan Zhang <boyuan.zhang@amd.com>

Add HEVC picture desc, and add codec check when creating and destroying
context.

Signed-off-by: Boyuan Zhang <boyuan.zhang@amd.com>
Acked-by: Christian K├Ânig <christian.koenig@amd.com>
---
 src/gallium/state_trackers/va/context.c    | 26 ++++++++++++++++++++++----
 src/gallium/state_trackers/va/va_private.h |  1 +
 2 files changed, 23 insertions(+), 4 deletions(-)

Patch hide | download patch | download mbox

diff --git a/src/gallium/state_trackers/va/context.c b/src/gallium/state_trackers/va/context.c
index 78e1f19..f03b326 100644
--- a/src/gallium/state_trackers/va/context.c
+++ b/src/gallium/state_trackers/va/context.c
@@ -284,8 +284,18 @@  vlVaCreateContext(VADriverContextP ctx, VAConfigID config_id, int picture_width,
    context->desc.base.profile = config->profile;
    context->desc.base.entry_point = config->entrypoint;
    if (config->entrypoint == PIPE_VIDEO_ENTRYPOINT_ENCODE) {
-      context->desc.h264enc.rate_ctrl.rate_ctrl_method = config->rc;
-      context->desc.h264enc.frame_idx = util_hash_table_create(handle_hash, handle_compare);
+      switch (u_reduce_video_profile(context->templat.profile)) {
+      case PIPE_VIDEO_FORMAT_MPEG4_AVC:
+         context->desc.h264enc.rate_ctrl.rate_ctrl_method = config->rc;
+         context->desc.h264enc.frame_idx = util_hash_table_create(handle_hash, handle_compare);
+         break;
+      case PIPE_VIDEO_FORMAT_HEVC:
+         context->desc.h265enc.rc.rate_ctrl_method = config->rc;
+         context->desc.h265enc.frame_idx = util_hash_table_create(handle_hash, handle_compare);
+         break;
+      default:
+         break;
+      }
    }
 
    mtx_lock(&drv->mutex);
@@ -314,8 +324,16 @@  vlVaDestroyContext(VADriverContextP ctx, VAContextID context_id)
 
    if (context->decoder) {
       if (context->desc.base.entry_point == PIPE_VIDEO_ENTRYPOINT_ENCODE) {
-         if (context->desc.h264enc.frame_idx)
-            util_hash_table_destroy (context->desc.h264enc.frame_idx);
+         if (u_reduce_video_profile(context->decoder->profile) ==
+             PIPE_VIDEO_FORMAT_MPEG4_AVC) {
+            if (context->desc.h264enc.frame_idx)
+               util_hash_table_destroy (context->desc.h264enc.frame_idx);
+         }
+         if (u_reduce_video_profile(context->decoder->profile) ==
+             PIPE_VIDEO_FORMAT_HEVC) {
+            if (context->desc.h265enc.frame_idx)
+               util_hash_table_destroy (context->desc.h265enc.frame_idx);
+         }
       } else {
          if (u_reduce_video_profile(context->decoder->profile) ==
                PIPE_VIDEO_FORMAT_MPEG4_AVC) {
diff --git a/src/gallium/state_trackers/va/va_private.h b/src/gallium/state_trackers/va/va_private.h
index eef75c6..9b526ea 100644
--- a/src/gallium/state_trackers/va/va_private.h
+++ b/src/gallium/state_trackers/va/va_private.h
@@ -270,6 +270,7 @@  typedef struct {
       struct pipe_h265_picture_desc h265;
       struct pipe_mjpeg_picture_desc mjpeg;
       struct pipe_h264_enc_picture_desc h264enc;
+      struct pipe_h265_enc_picture_desc h265enc;
    } desc;
 
    struct {