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 <[email protected]> > > >> --- > > >> 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 > [email protected] > http://lists.freedesktop.org/mailman/listinfo/libva _______________________________________________ Libva mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libva
