radeonsi:create uvd hevc enc entry
authorJames Zhu <James.Zhu@amd.com>
Mon, 5 Feb 2018 22:08:22 +0000 (17:08 -0500)
committerLeo Liu <leo.liu@amd.com>
Wed, 21 Feb 2018 18:53:38 +0000 (13:53 -0500)
Add UVD hevc encode pipe video codec creation entry

Signed-off-by: James Zhu <James.Zhu@amd.com>
Reviewed-by: Boyuan Zhang <boyuan.zhang@amd.com>
src/gallium/drivers/radeonsi/si_uvd.c

index 64f2f8e4ced28a0f735a29c680dc70939489bc29..3906bbdfb827cd78a908df8a25105d8b07b2abe5 100644 (file)
@@ -31,6 +31,8 @@
 #include "radeon/radeon_vce.h"
 #include "radeon/radeon_vcn_dec.h"
 #include "radeon/radeon_vcn_enc.h"
+#include "radeon/radeon_uvd_enc.h"
+#include "util/u_video.h"
 
 /**
  * creates an video buffer with an UVD compatible memory layout
@@ -146,9 +148,16 @@ struct pipe_video_codec *si_uvd_create_decoder(struct pipe_context *context,
        struct si_context *ctx = (struct si_context *)context;
        bool vcn = (ctx->b.family == CHIP_RAVEN) ? true : false;
 
-       if (templ->entrypoint == PIPE_VIDEO_ENTRYPOINT_ENCODE)
-               return (vcn) ? radeon_create_encoder(context, templ, ctx->b.ws, si_vce_get_buffer) :
-               si_vce_create_encoder(context, templ, ctx->b.ws, si_vce_get_buffer);
+       if (templ->entrypoint == PIPE_VIDEO_ENTRYPOINT_ENCODE) {
+               if (vcn) {
+                       radeon_create_encoder(context, templ, ctx->b.ws, si_vce_get_buffer);
+               } else {
+                       if (u_reduce_video_profile(templ->profile) == PIPE_VIDEO_FORMAT_HEVC)
+                               return radeon_uvd_create_encoder(context, templ, ctx->b.ws, si_vce_get_buffer);
+                       else
+                               return si_vce_create_encoder(context, templ, ctx->b.ws, si_vce_get_buffer);
+               }
+       }
 
        return (vcn) ?  radeon_create_decoder(context, templ) :
                si_common_uvd_create_decoder(context, templ, si_uvd_set_dtb);