[Libva] [PATCH 1/3] Add VAEntrypointEncFEIIntel support

Xiang, Haihao haihao.xiang at intel.com
Tue May 13 21:25:31 PDT 2014


Yes, it would be better to add a flag to indicate FEI feature.

Thanks
Haihao


> On Tue, 2014-05-13 at 19:18 -0600, Li, Zhong wrote:
> > I just add entrypoint VAEntrypointEncFEIIntel support. The whole 
> > encoding pipeline is the
> > same as VAEntrypointEncSlice for all platforms right now.
> > So I think no need to add restrictions now. We can add some restrictions 
> > when VAEntrypointEncFEIIntel pipeline
> > is different with VAEntrypointEncSlice.
> 
> Currently you only implement it on the limited platforms. right?
> If the user APPs query the VAEntryPointEncFEIntel profile on
> non-supported platforms and set the pipeline for it, they will get the
> unexpected result.
> 
> Thanks.
>     Yakui
> > 
> > On 05/14/2014 08:48 AM, Zhao, Yakui wrote:
> > > On Tue, 2014-05-13 at 03:20 -0600, Zhong Li wrote:
> > >> Support VAEncFEIMVBufferTypeIntel and VAEntrypointEncFEIIntel
> > >>
> > >> Signed-off-by: Zhong Li <zhong.li at intel.com>
> > >> ---
> > >>   src/i965_drv_video.c |   37 ++++++++++++++++++++++++-------------
> > >>   src/i965_drv_video.h |    1 +
> > >>   2 files changed, 25 insertions(+), 13 deletions(-)
> > >>
> > >> diff --git a/src/i965_drv_video.c b/src/i965_drv_video.c
> > >> index fa51651..e505e4a 100755
> > >> --- a/src/i965_drv_video.c
> > >> +++ b/src/i965_drv_video.c
> > >> @@ -340,8 +340,10 @@ i965_QueryConfigEntrypoints(VADriverContextP ctx,
> > >>           if (HAS_H264_DECODING(i965))
> > >>               entrypoint_list[n++] = VAEntrypointVLD;
> > >>   
> > >> -        if (HAS_H264_ENCODING(i965))
> > >> +        if (HAS_H264_ENCODING(i965)) {
> > >>               entrypoint_list[n++] = VAEntrypointEncSlice;
> > >> +            entrypoint_list[n++] = VAEntrypointEncFEIIntel;
> > >> +        }
> > > Is this implemented on all the platforms supporting the encoding?
> > >     
> > > If not, it will be better that you can add some restrictions before it
> > > is supported by all the platforms.
> > >
> > > Thanks.
> > >      Yakui
> > >>   
> > >>           break;
> > >>      case VAProfileH264MultiviewHigh:
> > >> @@ -405,7 +407,7 @@ i965_GetConfigAttributes(VADriverContextP ctx,
> > >>               break;
> > >>   
> > >>           case VAConfigAttribRateControl:
> > >> -            if (entrypoint == VAEntrypointEncSlice) {
> > >> +            if (entrypoint == VAEntrypointEncFEIIntel || entrypoint == VAEntrypointEncSlice) {
> > >>                   attrib_list[i].value = VA_RC_CQP;
> > >>   
> > >>                   if (profile != VAProfileMPEG2Main &&
> > >> @@ -415,13 +417,13 @@ i965_GetConfigAttributes(VADriverContextP ctx,
> > >>               }
> > >>   
> > >>           case VAConfigAttribEncPackedHeaders:
> > >> -            if (entrypoint == VAEntrypointEncSlice) {
> > >> +            if (entrypoint == VAEntrypointEncFEIIntel || entrypoint == VAEntrypointEncSlice) {
> > >>                   attrib_list[i].value = VA_ENC_PACKED_HEADER_SEQUENCE | VA_ENC_PACKED_HEADER_PICTURE | VA_ENC_PACKED_HEADER_MISC;
> > >>                   break;
> > >>               }
> > >>   
> > >>   	case VAConfigAttribEncMaxRefFrames:
> > >> -	    if (entrypoint == VAEntrypointEncSlice) {
> > >> +           if (entrypoint == VAEntrypointEncFEIIntel || entrypoint == VAEntrypointEncSlice) {
> > >>   		attrib_list[i].value = (1 << 16) | (1 << 0);
> > >>   		break;
> > >>   	    }
> > >> @@ -497,7 +499,8 @@ i965_CreateConfig(VADriverContextP ctx,
> > >>       case VAProfileH264Main:
> > >>       case VAProfileH264High:
> > >>           if ((HAS_H264_DECODING(i965) && VAEntrypointVLD == entrypoint) ||
> > >> -            (HAS_H264_ENCODING(i965) && VAEntrypointEncSlice == entrypoint)) {
> > >> +            (HAS_H264_ENCODING(i965) &&
> > >> +            ((VAEntrypointEncFEIIntel == entrypoint) || (VAEntrypointEncSlice == entrypoint)))) {
> > >>               vaStatus = VA_STATUS_SUCCESS;
> > >>           } else {
> > >>               vaStatus = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT;
> > >> @@ -1563,7 +1566,8 @@ i965_CreateContext(VADriverContextP ctx,
> > >>               obj_context->codec_state.proc.current_render_target = VA_INVALID_ID;
> > >>               assert(i965->codec_info->proc_hw_context_init);
> > >>               obj_context->hw_context = i965->codec_info->proc_hw_context_init(ctx, obj_config);
> > >> -        } else if (VAEntrypointEncSlice == obj_config->entrypoint) { /*encode routin only*/
> > >> +        } else if (VAEntrypointEncFEIIntel == obj_config->entrypoint ||
> > >> +                   VAEntrypointEncSlice == obj_config->entrypoint) { /*encode routin only*/
> > >>               obj_context->codec_type = CODEC_ENC;
> > >>               memset(&obj_context->codec_state.encode, 0, sizeof(obj_context->codec_state.encode));
> > >>               obj_context->codec_state.encode.current_render_target = VA_INVALID_ID;
> > >> @@ -1663,6 +1667,7 @@ i965_create_buffer_internal(VADriverContextP ctx,
> > >>       case VAProcFilterParameterBufferType:
> > >>       case VAHuffmanTableBufferType:
> > >>       case VAProbabilityBufferType:
> > >> +    case VAEncFEIMVBufferTypeIntel:
> > >>           /* Ok */
> > >>           break;
> > >>   
> > >> @@ -2326,7 +2331,8 @@ i965_RenderPicture(VADriverContextP ctx,
> > >>   
> > >>       if (VAEntrypointVideoProc == obj_config->entrypoint) {
> > >>           vaStatus = i965_proc_render_picture(ctx, context, buffers, num_buffers);
> > >> -    } else if (VAEntrypointEncSlice == obj_config->entrypoint ) {
> > >> +    } else if (VAEntrypointEncFEIIntel == obj_config->entrypoint ||
> > >> +               VAEntrypointEncSlice == obj_config->entrypoint ) {
> > >>           vaStatus = i965_encoder_render_picture(ctx, context, buffers, num_buffers);
> > >>       } else {
> > >>           vaStatus = i965_decoder_render_picture(ctx, context, buffers, num_buffers);
> > >> @@ -2349,7 +2355,7 @@ i965_EndPicture(VADriverContextP ctx, VAContextID context)
> > >>       if (obj_context->codec_type == CODEC_PROC) {
> > >>           ASSERT_RET(VAEntrypointVideoProc == obj_config->entrypoint, VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT);
> > >>       } else if (obj_context->codec_type == CODEC_ENC) {
> > >> -        ASSERT_RET(VAEntrypointEncSlice == obj_config->entrypoint, VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT);
> > >> +        ASSERT_RET(VAEntrypointEncFEIIntel == obj_config->entrypoint || VAEntrypointEncSlice == obj_config->entrypoint, VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT);
> > >>   
> > >>           if (!(obj_context->codec_state.encode.pic_param ||
> > >>                   obj_context->codec_state.encode.pic_param_ext)) {
> > >> @@ -4326,7 +4332,8 @@ i965_GetSurfaceAttributes(
> > >>                           attrib_list[i].flags = VA_SURFACE_ATTRIB_NOT_SUPPORTED;
> > >>                       }
> > >>                   } else if (IS_GEN6(i965->intel.device_info)) {
> > >> -                    if (obj_config->entrypoint == VAEntrypointEncSlice ||
> > >> +                    if (obj_config->entrypoint == VAEntrypointEncFEIIntel ||
> > >> +                        obj_config->entrypoint == VAEntrypointEncSlice ||
> > >>                           obj_config->entrypoint == VAEntrypointVideoProc) {
> > >>                           switch (attrib_list[i].value.value.i) {
> > >>                           case VA_FOURCC_NV12:
> > >> @@ -4351,7 +4358,8 @@ i965_GetSurfaceAttributes(
> > >>                       }
> > >>                   } else if (IS_GEN7(i965->intel.device_info) ||
> > >>                              IS_GEN8(i965->intel.device_info)) {
> > >> -                    if (obj_config->entrypoint == VAEntrypointEncSlice ||
> > >> +                    if (obj_config->entrypoint == VAEntrypointEncFEIIntel ||
> > >> +                        obj_config->entrypoint == VAEntrypointEncSlice ||
> > >>                           obj_config->entrypoint == VAEntrypointVideoProc) {
> > >>                           switch (attrib_list[i].value.value.i) {
> > >>                           case VA_FOURCC_NV12:
> > >> @@ -4488,7 +4496,8 @@ i965_QuerySurfaceAttributes(VADriverContextP ctx,
> > >>               attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE | VA_SURFACE_ATTRIB_SETTABLE;
> > >>               attribs[i].value.value.i = VA_FOURCC_NV12;
> > >>               i++;
> > >> -        } else if (obj_config->entrypoint == VAEntrypointEncSlice ||  /* encode */
> > >> +        } else if (obj_config->entrypoint == VAEntrypointEncFEIIntel ||
> > >> +                   obj_config->entrypoint == VAEntrypointEncSlice ||  /* encode */
> > >>                      obj_config->entrypoint == VAEntrypointVideoProc) { /* vpp */
> > >>               attribs[i].type = VASurfaceAttribPixelFormat;
> > >>               attribs[i].value.type = VAGenericValueTypeInteger;
> > >> @@ -4579,7 +4588,8 @@ i965_QuerySurfaceAttributes(VADriverContextP ctx,
> > >>                   attribs[i].value.value.i = VA_FOURCC_NV12;
> > >>                   i++;
> > >>               }
> > >> -        } else if (obj_config->entrypoint == VAEntrypointEncSlice ||  /* encode */
> > >> +        } else if (obj_config->entrypoint == VAEntrypointEncFEIIntel ||
> > >> +                   obj_config->entrypoint == VAEntrypointEncSlice ||  /* encode */
> > >>                      obj_config->entrypoint == VAEntrypointVideoProc) { /* vpp */
> > >>               attribs[i].type = VASurfaceAttribPixelFormat;
> > >>               attribs[i].value.type = VAGenericValueTypeInteger;
> > >> @@ -4682,7 +4692,8 @@ i965_QuerySurfaceAttributes(VADriverContextP ctx,
> > >>                   attribs[i].value.value.i = VA_FOURCC_NV12;
> > >>                   i++;
> > >>               }
> > >> -        } else if (obj_config->entrypoint == VAEntrypointEncSlice ||  /* encode */
> > >> +        } else if (obj_config->entrypoint == VAEntrypointEncFEIIntel ||
> > >> +                   obj_config->entrypoint == VAEntrypointEncSlice ||  /* encode */
> > >>                      obj_config->entrypoint == VAEntrypointVideoProc) { /* vpp */
> > >>   
> > >>               attribs[i].type = VASurfaceAttribPixelFormat;
> > >> diff --git a/src/i965_drv_video.h b/src/i965_drv_video.h
> > >> index 0e32f7d..7c2306c 100644
> > >> --- a/src/i965_drv_video.h
> > >> +++ b/src/i965_drv_video.h
> > >> @@ -36,6 +36,7 @@
> > >>   #include <va/va_vpp.h>
> > >>   #include <va/va_backend.h>
> > >>   #include <va/va_backend_vpp.h>
> > >> +#include <va/va_intel_fei.h>
> > >>   
> > >>   #include "i965_mutext.h"
> > >>   #include "object_heap.h"
> > >
> > 
> 
> 
> _______________________________________________
> Libva mailing list
> Libva at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/libva




More information about the Libva mailing list