diff --git a/opencl/api/opencl/amdocl/cl_common.hpp b/opencl/api/opencl/amdocl/cl_common.hpp index 4ba956a8e7..4674ebd0f4 100644 --- a/opencl/api/opencl/amdocl/cl_common.hpp +++ b/opencl/api/opencl/amdocl/cl_common.hpp @@ -9,8 +9,8 @@ #include "platform/runtime.hpp" #include "platform/command.hpp" #include "platform/memory.hpp" -#include "platform/video_session.hpp" #include "thread/thread.hpp" +#include "platform/commandqueue.hpp" #include #include @@ -213,23 +213,6 @@ public: }; #define AMD_PLATFORM (reinterpret_cast(&amd::PlatformID::Platform)) -#if cl_amd_open_video -cl_int clEnqueueVideoDecodeAMD( - VideoSession& session, - cl_video_decode_data_amd* video_data, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event); - -cl_int clEnqueueVideoEncodeAMD( - VideoSession& session, - cl_video_encode_data_amd* video_data, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event); - -#endif // cl_amd_open_video - } // namespace amd extern "C" { @@ -285,103 +268,6 @@ clSetCommandQueueProperty( cl_command_queue_properties *old_properties) CL_API_SUFFIX__VERSION_1_0; #endif // CL_VERSION_1_1 -#if cl_amd_open_video -extern CL_API_ENTRY cl_video_session_amd CL_API_CALL -clCreateVideoSessionAMD( - cl_context context, - cl_device_id device, - cl_video_session_flags_amd flags, - cl_video_config_type_amd config_buffer_type, - cl_uint config_buffer_size, - void* config_buffer, - cl_int* errcode_ret); - -extern CL_API_ENTRY cl_int CL_API_CALL -clRetainVideoSessionAMD( - cl_video_session_amd video_session); - -extern CL_API_ENTRY cl_int CL_API_CALL -clReleaseVideoSessionAMD( - cl_video_session_amd video_session); - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetVideoSessionInfoAMD( - cl_video_session_amd video_session, - cl_video_session_info_amd param_name, - size_t param_value_size, - void* param_value, - size_t* param_value_size_ret); - - -extern CL_API_ENTRY cl_video_session_amd CL_API_CALL -clCreateVideoEncSessionAMD( - cl_context context, - cl_device_id device, - cl_video_session_flags_amd flags, - cl_video_config_type_amd config_buffer_type, - cl_uint config_buffer_size, - void* config_buffer, - cl_int* errcode_ret); - - -extern CL_API_ENTRY cl_int CL_API_CALL -clDestroyVideoEncSessionAMD( - cl_video_session_amd video_session); - - -extern CL_API_ENTRY cl_int CL_API_CALL -clGetVideoSessionEncInfoAMD( - cl_video_session_amd video_session, - cl_video_session_enc_info_amd param_name, - size_t param_value_size, - void* param_value, - size_t* param_value_size_ret); - -extern CL_API_ENTRY cl_int CL_API_CALL -clSendEncodeConfigInfoAMD( - cl_video_session_amd video_session, - size_t numBuffers, - void* pConfigBuffers); - -extern CL_API_ENTRY cl_int CL_API_CALL -clEnqueueRunVideoProgramAMD( - cl_video_session_amd video_session, - void* video_data_struct, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event); - -extern CL_API_ENTRY cl_int CL_API_CALL -clEncodeGetDeviceCapAMD( - cl_device_id device_id, - cl_uint encode_mode, - cl_uint encode_cap_total_size, - cl_uint* num_encode_cap, - void* pEncodeCAP); - -#if 1 -extern CL_API_ENTRY cl_int CL_API_CALL -clEncodePictureAMD( - cl_video_session_amd video_session, - cl_uint number_of_encode_task_input_buffers, - void* encode_task_input_buffer_list, - void* picture_parameter, - cl_uint* pTaskID); -#endif -extern CL_API_ENTRY cl_int CL_API_CALL -clEncodeQueryTaskDescriptionAMD( - cl_video_session_amd session, - cl_uint num_of_task_description_request, - cl_uint* num_of_task_description_return, - void * task_description_list); - -extern CL_API_ENTRY cl_int CL_API_CALL -clEncodeReleaseOutputResourceAMD( - cl_video_session_amd session, - cl_uint task_id); - -#endif // cl_amd_open_video - extern CL_API_ENTRY cl_mem CL_API_CALL clConvertImageAMD( cl_context context, diff --git a/opencl/api/opencl/amdocl/cl_context.cpp b/opencl/api/opencl/amdocl/cl_context.cpp index c3615a7794..3aa4c324d4 100644 --- a/opencl/api/opencl/amdocl/cl_context.cpp +++ b/opencl/api/opencl/amdocl/cl_context.cpp @@ -27,10 +27,6 @@ #include #include "CL/cl_gl.h" -#ifndef WITH_GPU_DEVICE -# undef cl_amd_open_video -#endif // WITH_GPU_DEVICE - /*! \addtogroup API * @{ * @@ -510,18 +506,11 @@ clGetExtensionFunctionAddress(const char* func_name) #ifdef cl_ext_device_fission CL_EXTENSION_ENTRYPOINT_CHECK(clCreateSubDevicesEXT); #endif // cl_ext_device_fission -#if cl_amd_open_video - CL_EXTENSION_ENTRYPOINT_CHECK(clCreateVideoSessionAMD); - CL_EXTENSION_ENTRYPOINT_CHECK(clCreateVideoEncSessionAMD); -#endif // cl_amd_open_video CL_EXTENSION_ENTRYPOINT_CHECK(clCreateKeyAMD); CL_EXTENSION_ENTRYPOINT_CHECK(clConvertImageAMD); CL_EXTENSION_ENTRYPOINT_CHECK(clCreateBufferFromImageAMD); break; case 'D': -#if cl_amd_open_video - CL_EXTENSION_ENTRYPOINT_CHECK(clDestroyVideoEncSessionAMD); -#endif // cl_amd_open_video break; case 'E': CL_EXTENSION_ENTRYPOINT_CHECK(clEnqueueBeginPerfCounterAMD); @@ -536,13 +525,6 @@ clGetExtensionFunctionAddress(const char* func_name) CL_EXTENSION_ENTRYPOINT_CHECK(clEnqueueAcquireDX9MediaSurfacesKHR); CL_EXTENSION_ENTRYPOINT_CHECK(clEnqueueReleaseDX9MediaSurfacesKHR); #endif //_WIN32 -#if cl_amd_open_video - CL_EXTENSION_ENTRYPOINT_CHECK(clEnqueueRunVideoProgramAMD); - CL_EXTENSION_ENTRYPOINT_CHECK(clEncodeGetDeviceCapAMD); - CL_EXTENSION_ENTRYPOINT_CHECK(clEncodePictureAMD); - CL_EXTENSION_ENTRYPOINT_CHECK(clEncodeQueryTaskDescriptionAMD); - CL_EXTENSION_ENTRYPOINT_CHECK(clEncodeReleaseOutputResourceAMD); -#endif // cl_amd_open_video CL_EXTENSION_ENTRYPOINT_CHECK(clEnqueueWaitSignalAMD); CL_EXTENSION_ENTRYPOINT_CHECK(clEnqueueWriteSignalAMD); CL_EXTENSION_ENTRYPOINT_CHECK(clEnqueueMakeBuffersResidentAMD); @@ -554,10 +536,6 @@ clGetExtensionFunctionAddress(const char* func_name) CL_EXTENSION_ENTRYPOINT_CHECK(clGetGLTextureInfo); CL_EXTENSION_ENTRYPOINT_CHECK(clGetGLContextInfoKHR); CL_EXTENSION_ENTRYPOINT_CHECK(clGetThreadTraceInfoAMD); -#if cl_amd_open_video - CL_EXTENSION_ENTRYPOINT_CHECK(clGetVideoSessionInfoAMD); - CL_EXTENSION_ENTRYPOINT_CHECK(clGetVideoSessionEncInfoAMD); -#endif // cl_amd_open_video #ifdef _WIN32 CL_EXTENSION_ENTRYPOINT_CHECK(clGetDeviceIDsFromD3D10KHR); CL_EXTENSION_ENTRYPOINT_CHECK(clGetDeviceIDsFromDX9MediaAdapterKHR); @@ -609,15 +587,8 @@ clGetExtensionFunctionAddress(const char* func_name) CL_EXTENSION_ENTRYPOINT_CHECK(clRetainDeviceEXT); CL_EXTENSION_ENTRYPOINT_CHECK(clReleaseDeviceEXT); #endif // cl_ext_device_fission -#if cl_amd_open_video - CL_EXTENSION_ENTRYPOINT_CHECK(clRetainVideoSessionAMD); - CL_EXTENSION_ENTRYPOINT_CHECK(clReleaseVideoSessionAMD); -#endif // cl_amd_open_video break; case 'S': -#if cl_amd_open_video - CL_EXTENSION_ENTRYPOINT_CHECK(clSendEncodeConfigInfoAMD); -#endif // cl_amd_open_video CL_EXTENSION_ENTRYPOINT_CHECK(clSetThreadTraceParamAMD); break; case 'U': diff --git a/opencl/api/opencl/amdocl/cl_device.cpp b/opencl/api/opencl/amdocl/cl_device.cpp index ce50acc300..661c33b5af 100644 --- a/opencl/api/opencl/amdocl/cl_device.cpp +++ b/opencl/api/opencl/amdocl/cl_device.cpp @@ -568,47 +568,6 @@ RUNTIME_ENTRY(cl_int, clGetDeviceInfo, ( CASE(CL_DEVICE_IMAGE_PITCH_ALIGNMENT, imagePitchAlignment_); CASE(CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT, imageBaseAddressAlignment_); -#if cl_amd_open_video - CASE(CL_DEVICE_MAX_VIDEO_SESSIONS_AMD, maxVideoSessions_); - CASE(CL_DEVICE_NUM_VIDEO_ATTRIBS_AMD, numVideoAttribs_); - CASE(CL_DEVICE_NUM_VIDEO_ENC_ATTRIBS_AMD, numVideoEncAttribs_); - case CL_DEVICE_VIDEO_ATTRIBS_AMD: - { - size_t valueSize = sizeof(cl_video_attrib_amd) - * as_amd(device)->info().numVideoAttribs_; - if (param_value != NULL && param_value_size < valueSize) { - return CL_INVALID_VALUE; - } - *not_null(param_value_size_ret) = valueSize; - if (param_value != NULL) { - ::memcpy(param_value, as_amd(device)->info().videoAttribs_, - valueSize); - if (param_value_size > valueSize) { - ::memset(static_cast(param_value) + valueSize, - '\0', param_value_size - valueSize); - } - } - return CL_SUCCESS; - } - case CL_DEVICE_VIDEO_ATTRIBS_ENC_AMD: - { - size_t valueSize = sizeof(cl_video_attrib_encode_amd) // has profile & format - * as_amd(device)->info().numVideoEncAttribs_; - if (param_value != NULL && param_value_size < valueSize) { - return CL_INVALID_VALUE; - } - *not_null(param_value_size_ret) = valueSize; - if (param_value != NULL) { - ::memcpy(param_value, as_amd(device)->info().videoEncAttribs_, valueSize); - // Zero out remaining bytes if encode CAP List + profile is < parameter value size. - if (param_value_size > valueSize) { - ::memset(static_cast(param_value) + valueSize, - '\0', param_value_size - valueSize); - } - } - return CL_SUCCESS; - } -#endif //cl_amd_open_video default: break; } diff --git a/opencl/api/opencl/amdocl/cl_open_video.cpp b/opencl/api/opencl/amdocl/cl_open_video.cpp deleted file mode 100644 index f27e2c3535..0000000000 --- a/opencl/api/opencl/amdocl/cl_open_video.cpp +++ /dev/null @@ -1,829 +0,0 @@ -// -// Copyright (c) 2010 Advanced Micro Devices, Inc. All rights reserved. -// - -#include "cl_common.hpp" -#include "platform/command.hpp" -#include - -#if cl_amd_open_video - -#include "platform/video_session.hpp" - -#include "cal.h" -#include "calcl.h" - -amd::HostQueue* staticQueue; //@todo fix the interface and remove hardcoded queue -/* Helper function GetCalDecodeProfile() -*/ -static bool -GetCalVideoProfile(cl_video_decode_profile_amd clVideoProfile, - CALdecodeProfile& calVideoProfile) -{ - switch(clVideoProfile) { - case CL_VIDEO_DECODE_PROFILE_H264_BASELINE_AMD: - calVideoProfile = CAL_VID_H264_BASELINE; - break; - case CL_VIDEO_DECODE_PROFILE_H264_MAIN_AMD: - calVideoProfile = CAL_VID_H264_MAIN; - break; - case CL_VIDEO_DECODE_PROFILE_H264_HIGH_AMD: - calVideoProfile = CAL_VID_H264_HIGH; - break; - case CL_VIDEO_DECODE_PROFILE_VC1_SIMPLE_AMD: - calVideoProfile = CAL_VID_VC1_SIMPLE; - break; - case CL_VIDEO_DECODE_PROFILE_VC1_MAIN_AMD: - calVideoProfile = CAL_VID_VC1_MAIN; - break; - case CL_VIDEO_DECODE_PROFILE_VC1_ADVANCED_AMD: - calVideoProfile = CAL_VID_VC1_ADVANCED; - break; - case CL_VIDEO_DECODE_PROFILE_MPEG2_VLD_AMD: - calVideoProfile = CAL_VID_MPEG2_VLD; - break; - //case CL_VIDEO_DECODE_PROFILE_MPEG2_SIMPLE_AMD: - //case CL_VIDEO_DECODE_PROFILE_MPEG2_MAIN_AMD: - default: - return false; - break; - } - return true; -} -/* Helper function GetCalDecodeProfile() -*/ -static bool -GetCalVideoFormat(cl_video_format_amd clVideoFormat, - CALdecodeFormat& calVideoFormat) -{ - switch(clVideoFormat) { - case CL_VIDEO_NV12_INTERLEAVED_AMD: - calVideoFormat = CAL_VID_NV12_INTERLEAVED; - break; - case CL_VIDEO_YV12_INTERLEAVED_AMD: - calVideoFormat = CAL_VID_YV12_INTERLEAVED; - break; - default: - return false; - } - return true; -} -/*! \addtogroup API - * @{ - * - * \addtogroup cl_amd_open_video - * - * This section provides OpenCL extension functions that allow applications - * to use kernel decoding of video streams using corresponding HW capabilities. - * - * @} - * \addtogroup clQueryVidDecoderCapsAMD - * @{ - */ - - -/*! \brief Creates a video session object. - * - * \param context is a valid OpenCL context on which the image object - * is to be created. - * - * \param device must be a device associated with context. It can either be in - * the list of devices specified when context is created using - * clCreateContext or have the same device type as the device type - * specified when the context is created using clCreateContextFromType - * - * \param flags is a bit-field that is used to specify the video session - * operation mode, available flags are as follows: - * - CL_VIDEO_DECODE_ACCELERATION_AMD - the video session supports HW - * acceleration of video decoding operation. - * - * \param errcode_ret will return CL_SUCCESS if no error occurs; - * or an appropriate error code: - * - CL_INVALID_CONTEXT if \a context is not a valid context; - * - CL_INVALID_DEVICE if \a device is not a valid device; - * - CL_INVALID_VIDEO_SESSION_FLAGS_AMD if flags is NULL or contains invalid - * configuration; - * - CL_INVALID_OPERATION if video decode extension is not supported by - * any device associated with context; - * - CL_OUT_OF_HOST_MEMORY if there is a failure to allocate resources required - * by the runtime. - * - * \version 1.1r25 - */ -RUNTIME_ENTRY_RET(cl_video_session_amd, clCreateVideoSessionAMD, ( - cl_context context, - cl_device_id device, - cl_video_session_flags_amd flags, - cl_video_config_type_amd config_buffer_type, - cl_uint config_buffer_size, - void* config_buffer, - cl_int* errcode_ret)) -{ - *not_null(errcode_ret) = CL_SUCCESS; - - if (!is_valid(context)) { - *not_null(errcode_ret) = CL_INVALID_CONTEXT; - LogWarning("invalid parameter \"context\""); - return (cl_video_session_amd) 0; - } - if (!is_valid(device)) { - *not_null(errcode_ret) = CL_INVALID_DEVICE; - LogWarning("invalid parameter \"device\""); - return (cl_video_session_amd) 0; - } - amd::Device* amdDevice = as_amd(device); - if (!amdDevice->info().openVideo_) { - *not_null(errcode_ret) = CL_INVALID_OPERATION; - LogWarning("Device or CAL does not support Open Video extension"); - return (cl_video_session_amd) 0; - } - - // Create video command queue - cl_video_encode_desc_amd ovSessionProperties; - CALvideoProperties calVideoProperties; - calVideoProperties.size = sizeof(calVideoProperties); - calVideoProperties.flags = static_cast(flags); - switch(config_buffer_type) { - case CL_VIDEO_DECODE_CONFIGURATION_AMD: - { - cl_video_decode_desc_amd* videoDecodeDesc = - static_cast(config_buffer); - if (!GetCalVideoProfile(videoDecodeDesc->attrib.profile, - calVideoProperties.profile)) { - *not_null(errcode_ret) = CL_INVALID_OPERATION; - LogWarning("Profile is not supported or invalid"); - return (cl_video_session_amd) 0; - } - if (!GetCalVideoFormat(videoDecodeDesc->attrib.format, - calVideoProperties.format)) { - *not_null(errcode_ret) = CL_INVALID_OPERATION; - LogWarning("Format is not supported or invalid"); - return (cl_video_session_amd) 0; - } - calVideoProperties.width = videoDecodeDesc->image_width; - calVideoProperties.height = videoDecodeDesc->image_height; - calVideoProperties.VideoEngine_name = CAL_CONTEXT_VIDEO; - } - break; - default: - *not_null(errcode_ret) = CL_INVALID_VIDEO_CONFIG_TYPE_AMD; - LogWarning("invalid parameter \"config_buffer_type\""); - return (cl_video_session_amd) 0; - break; - } - - ovSessionProperties.calVideoProperties = &calVideoProperties; - - amd::HostQueue* queue = new amd::HostQueue( - *as_amd(context), *as_amd(device), 0, &ovSessionProperties); - - if (queue == NULL || !queue->create()) { - *not_null(errcode_ret) = CL_OUT_OF_HOST_MEMORY; - LogWarning("not enough host memory"); - return (cl_video_session_amd) 0; - } - - staticQueue = queue; - amd::VideoSession* video_session = new amd::VideoSession( - *as_amd(context), *as_amd(device), queue, flags, config_buffer_type, - config_buffer_size, config_buffer); - if (!video_session) { - queue->release(); - *not_null(errcode_ret) = CL_OUT_OF_HOST_MEMORY; - LogWarning("not enough host memory"); - return (cl_video_session_amd) 0; - } - - return as_cl(video_session); -} -RUNTIME_EXIT - - -RUNTIME_ENTRY_RET(cl_video_session_amd, clCreateVideoEncSessionAMD, ( - cl_context context, - cl_device_id device, - cl_video_session_flags_amd flags, - cl_video_config_type_amd config_buffer_type, - cl_uint config_buffer_size, - void* config_buffer, - cl_int* errcode_ret)) -{ - *not_null(errcode_ret) = CL_SUCCESS; - - // Make sure the context is valid - if (!is_valid(context)) { - *not_null(errcode_ret) = CL_INVALID_CONTEXT; - LogWarning("invalid parameter \"context\""); - return (cl_video_session_amd) 0; - } - - // Make sure the device is valid - if (!is_valid(device)) { - *not_null(errcode_ret) = CL_INVALID_DEVICE; - LogWarning("invalid parameter \"device\""); - return (cl_video_session_amd) 0; - } - - // Make sure the device supports Open Video extensions - amd::Device* amdDevice = as_amd(device); - if (!amdDevice->info().openVideo_) { - *not_null(errcode_ret) = CL_INVALID_OPERATION; - LogWarning("Device or CAL does not support Open Video extension"); - return (cl_video_session_amd) 0; - } - - cl_video_encode_desc_amd *ovSessionProperties = (cl_video_encode_desc_amd *)config_buffer; - - // Create video command queue - CALvideoProperties calVideoProperties; - - switch(config_buffer_type) - { - case CL_VIDEO_ENCODE_CONFIGURATION_AMD: - calVideoProperties.size = sizeof(calVideoProperties); - calVideoProperties.flags = static_cast(flags); - calVideoProperties.profile = (CALdecodeProfile)ovSessionProperties->attrib.codec_profile; - calVideoProperties.format = (CALdecodeFormat)ovSessionProperties->attrib.format; - calVideoProperties.width = ovSessionProperties->image_width; - calVideoProperties.height = ovSessionProperties->image_height; - calVideoProperties.VideoEngine_name = CAL_CONTEXT_VIDEO_VCE; - ovSessionProperties->calVideoProperties = &calVideoProperties; - break; - default: - *not_null(errcode_ret) = CL_INVALID_VIDEO_CONFIG_TYPE_AMD; - LogWarning("invalid parameter \"config_buffer_type\""); - return (cl_video_session_amd) 0; - break; - } - - amd::HostQueue* queue = new amd::HostQueue( - *as_amd(context), *as_amd(device), 0, ovSessionProperties); - - if (queue == NULL || !queue->create()) { - *not_null(errcode_ret) = CL_OUT_OF_HOST_MEMORY; - LogWarning("not enough host memory"); - return (cl_video_session_amd) 0; - } - staticQueue = queue; -#if 0 // this doesn't work here due to context value... - CAL_VID_PROFILE_LEVEL encode_profile_level; - encode_profile_level.profile = buffer->attrib.profile; - encode_profile_level.level = buffer->attrib.level; - CALuint frameRate = 0; - CALuint YUVwidth = buffer->image_width; - CALuint YUVhigh = buffer->image_height; - - cal::details::extensions_.extEncodeCreateSession_((CALcontext)as_amd(context), 0, CAL_VID_encode_AVC_FULL, encode_profile_level, - CAL_VID_PICTURE_NV12, YUVwidth, YUVhigh, frameRate, CAL_VID_ENCODE_JOB_PRIORITY_LEVEL1); -#endif - - amd::VideoSession* video_session = new amd::VideoSession( - *as_amd(context), *as_amd(device), queue, flags, config_buffer_type, - config_buffer_size, config_buffer); - if (!video_session) - { - queue->release(); - *not_null(errcode_ret) = CL_OUT_OF_HOST_MEMORY; - LogWarning("not enough host memory"); - return (cl_video_session_amd) 0; - } - - return as_cl(video_session); -} -RUNTIME_EXIT - -RUNTIME_ENTRY(cl_int, clDestroyVideoEncSessionAMD, - (cl_video_session_amd video_session)) -{ - if (!is_valid(video_session)) { - LogWarning("invalid parameter \"video_session\""); - return CL_INVALID_VIDEO_SESSION_AMD; - } - - cl_int errcode_ret = CL_SUCCESS; - amd::VideoSession* session = as_amd(video_session); - - amd::Command::EventWaitList eventWaitList; - cl_int err = amd::clSetEventWaitList(eventWaitList, - session->context(), 0, NULL); - amd::Command* command = new amd::SetVideoSessionCommand( - session->queue(), eventWaitList, - amd::SetVideoSessionCommand::CloseSession, NULL); - if (command == NULL) { - return CL_OUT_OF_HOST_MEMORY; - } - command->enqueue(); - command->release(); - - session->queue().finish(); - session->release(); - - return errcode_ret; -} -RUNTIME_EXIT - -/*! \brief Increments the video session reference count. - * - * \param video_session is a valid OpenCL Video Session. - * - * \return CL_SUCCESS if the function executes successfully; - * Otherwise an error code is returned: - * - CL_INVALID_VIDEO_SESSION_AMD if video_session is not a valid - * video session; - * - * \version 1.1r25 - */ -RUNTIME_ENTRY(cl_int, clRetainVideoSessionAMD, - (cl_video_session_amd video_session)) -{ - if (!is_valid(video_session)) { - LogWarning("invalid parameter \"video_session\""); - return CL_INVALID_VIDEO_SESSION_AMD; - } - as_amd(video_session)->retain(); - return CL_SUCCESS; -} -RUNTIME_EXIT - -/*! \brief Decrements the video session reference count. - * - * \param video_session is a valid OpenCL Video Session. - * - * \return CL_SUCCESS if the function executes successfully; - * Otherwise an error code is returned: - * - CL_INVALID_VIDEO_SESSION_AMD if video_session is not a valid - * video session; - * - * \version 1.1r25 - */ -RUNTIME_ENTRY(cl_int, clReleaseVideoSessionAMD, - (cl_video_session_amd video_session)) -{ - if (!is_valid(video_session)) { - LogWarning("invalid parameter \"video_session\""); - return CL_INVALID_VIDEO_SESSION_AMD; - } - as_amd(video_session)->release(); - return CL_SUCCESS; -} -RUNTIME_EXIT - -/*! \brief Queries the configuration of a specific video session. - * - * \param video_session is a valid OpenCL Video Session. - * - * \param config_buffer_type is an enumeration constant that identifies the type - * of the configuration buffer. It can be one of the following values: - * - CL_VIDEO_DECODE_CONFIGURATION_AMD - The buffer contains decoder configuration, - * according to the cl_video_decode_desc_amd structure definition. - * - * \param config_buffer_size is a pointer to size of config_buffer in bytes. - * The implementation returns the size of the config_buffer in this argument. - * - * \param config_buffer is a pointer to a configuration buffer. The - * implementation writes the configuration query data into this - * buffer. If this pointer is NULL, it is ignored (which enables the - * application to query the required buffer size for this configuration type). - * - * \returns CL_SUCCESS if the video session configuration was set properly; - * Otherwise an appropriate error code is returned: - * - CL_INVALID_VIDEO_SESSION_AMD if video_session is not a valid video session; - * - CL_INVALID_VIDEO_CONFIG_TYPE_AMD if config_buffer_type is NULL or contains a - * configuration type which is not supported by the specific implementation; - * - CL_OUT_OF_HOST_MEMORY if there is a failure to allocate resources required - * by the runtime. - * - * \version 1.1r25 - */ -RUNTIME_ENTRY(cl_int, clGetVideoSessionInfoAMD, ( - cl_video_session_amd video_session, - cl_video_session_info_amd param_name, - size_t param_value_size, - void* param_value, - size_t* param_value_size_ret)) -{ - if (!is_valid(video_session)) { - LogWarning("invalid parameter \"video_session\""); - return CL_INVALID_VIDEO_SESSION_AMD; - } - //switch(config_buffer_type) { - //case CL_VIDEO_DECODE_CONFIGURATION_AMD: - // break; - //default: - // return CL_INVALID_VIDEO_CONFIG_TYPE_AMD; - //} -/* - return amd::clGetVideoSessionInfoAMD(*as_amd(video_session), - config_buffer_type, config_buffer_size, config_buffer); -*/ - return CL_INVALID_VALUE; -// return CL_SUCCESS; -} -RUNTIME_EXIT - - -/*! \brief Queries the configuration of a specific video session. - * - * \param video_session is a valid OpenCL Video Session. - * - * \param config_buffer_type is an enumeration constant that identifies the type - * of the configuration buffer. It can be one of the following values: - * - CL_VIDEO_ENCODE_CONFIGURATION_AMD - The buffer contains encoder configuration, - * according to the cl_video_decode_desc_amd structure definition. - * - * \param config_buffer_size is a pointer to size of config_buffer in bytes. - * The implementation returns the size of the config_buffer in this argument. - * - * \param config_buffer is a pointer to a configuration buffer. The - * implementation writes the configuration query data into this - * buffer. If this pointer is NULL, it is ignored (which enables the - * application to query the required buffer size for this configuration type). - * - * \returns CL_SUCCESS if the video session configuration was set properly; - * Otherwise an appropriate error code is returned: - * - CL_INVALID_VIDEO_SESSION_AMD if video_session is not a valid video session; - * - CL_INVALID_VIDEO_CONFIG_TYPE_AMD if config_buffer_type is NULL or contains a - * configuration type which is not supported by the specific implementation; - * - CL_OUT_OF_HOST_MEMORY if there is a failure to allocate resources required - * by the runtime. - * - * \version 1.1r25 - */ -RUNTIME_ENTRY(cl_int, clGetVideoSessionEncInfoAMD, ( - cl_video_session_amd video_session, - cl_video_session_enc_info_amd param_name, - size_t param_value_size, - void* param_value, - size_t* param_value_size_ret)) -{ - cl_uint errcode_ret = CL_SUCCESS; - - if (!is_valid(video_session)) { - LogWarning("invalid parameter \"video_session\""); - return CL_INVALID_VIDEO_SESSION_AMD; - } - - amd::VideoSession& session = *as_amd(video_session); - amd::Command::EventWaitList eventWaitList; - cl_int err = amd::clSetEventWaitList(eventWaitList, session.context(), 0, NULL); - amd::Command* command = NULL; - - switch(param_name) { - case CL_CONFIG_TYPE_PICTURE_CONTROL : - command = new amd::SetVideoSessionCommand( - session.queue(), eventWaitList, - amd::SetVideoSessionCommand::ConfigTypePictureControl, param_value); - break; - case CL_CONFIG_TYPE_RATE_CONTROL : - command = new amd::SetVideoSessionCommand( - session.queue(), eventWaitList, - amd::SetVideoSessionCommand::ConfigTypeRateControl, param_value); - break; - case CL_CONFIG_TYPE_MOTION_ESTIMATION : - command = new amd::SetVideoSessionCommand( - session.queue(), eventWaitList, - amd::SetVideoSessionCommand::ConfigTypeMotionEstimation, param_value); - break; - case CL_CONFIG_TYPE_RDO : - command = new amd::SetVideoSessionCommand( - session.queue(), eventWaitList, - amd::SetVideoSessionCommand::ConfigTypeRDO, param_value); - break; - default: - errcode_ret = CL_INVALID_VIDEO_CONFIG_TYPE_AMD; - break; - } - if (command == NULL) { - return CL_OUT_OF_HOST_MEMORY; - } - command->enqueue(); - command->release(); - - session.queue().finish(); - * param_value_size_ret = sizeof(param_value); - - return errcode_ret; -} -RUNTIME_EXIT - - -RUNTIME_ENTRY(cl_int, clSendEncodeConfigInfoAMD, ( - cl_video_session_amd video_session, - size_t numBuffers, - void* pConfigBuffers)) -{ - cl_uint errcode_ret = CL_SUCCESS; - - if (!is_valid(video_session)) { - LogWarning("invalid parameter \"video_session\""); - return CL_INVALID_VIDEO_SESSION_AMD; - } - - amd::VideoSession& session = *as_amd(video_session); - amd::Command::EventWaitList eventWaitList; - cl_int err = amd::clSetEventWaitList(eventWaitList, session.context(), 0, NULL); - amd::Command* command = new amd::SetVideoSessionCommand( - session.queue(), eventWaitList, - amd::SetVideoSessionCommand::SendEncodeConfig, pConfigBuffers, numBuffers); - if (command == NULL) { - return CL_OUT_OF_HOST_MEMORY; - } - command->enqueue(); - command->release(); - - session.queue().finish(); - - return errcode_ret; -} -RUNTIME_EXIT - -/*! \brief Enqueues execution of a decode/encode command on UVD unit of the device - * specified at creation of video session. - * - * \param video_session is a valid OpenCL video session. - * - * \param video_data_structure is a valid pointer to a structure - * containing control and video stream data for decoding/encoding. - * - * \param config_buffer_size is a pointer to size of config_buffer in bytes. - * The implementation returns the size of the config_buffer in this argument. - * - * \param event_wait_list and \param num_events_in_wait_list specify events - * that need to complete before this particular command can be executed. - * - * \param event returns an event object that identifies this particular - * video program execution instance. - * - * \returns CL_SUCCESS if the video program execution was - * successfully passed to the CAL for execution and CAL returned CAL_RESULT_OK. - * Otherwise, it returnes one of the following errors: - * - * - CL_INVALID_VIDEO_SESSION_AMD if the parameter video_session is not - * a valid video session object returned by a call to function - * clCreateVideoSessionAMD; - * - CL_IVALID_VIDEO_DATA_AMD if pointer video_data_struct is NULL, points - * to invalid memory, or any of the pointers/objects provided in the - * video_data_structure is NULL or invalid; - * - CL_INVALID_CONTEXT if context associated with video_session is not - * the same as context associated with event_wait_list; - * - CL_INVALID_EVENT_WAIT_LIST if event_wait_list is NULL and - * num_events_in_wait_list > 0, or event_wait_list is not NULL and - * num_events_in_wait_list is 0, or if event objects in event_wait_list - * are not valid events; - * - CL_OUT_OF_HOST_MEMORY if there is a failure to allocate resources - * required by the Open CL implementation on the host. - * - * \version 1.1r33 - */ -RUNTIME_ENTRY(cl_int, clEnqueueRunVideoProgramAMD, ( - cl_video_session_amd video_session, - void* video_data, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event)) -{ - if (!is_valid(video_session)) { - LogWarning("invalid parameter \"video_session\""); - return CL_INVALID_VIDEO_SESSION_AMD; - } - cl_int errcode = CL_SUCCESS; - - amd::VideoSession& session = *as_amd(video_session); - - switch(session.type()) { - case CL_VIDEO_DECODE_CONFIGURATION_AMD: - errcode = amd::clEnqueueVideoDecodeAMD(session, - (cl_video_decode_data_amd*) video_data, - num_events_in_wait_list, event_wait_list, event); - break; - case CL_VIDEO_ENCODE_CONFIGURATION_AMD: - errcode = amd::clEnqueueVideoEncodeAMD(session, - (cl_video_encode_data_amd*) video_data, - num_events_in_wait_list, event_wait_list, event); - break; - - default: - errcode = CL_INVALID_VIDEO_CONFIG_TYPE_AMD; - } - return errcode; -} -RUNTIME_EXIT - -RUNTIME_ENTRY(cl_int, clEncodeGetDeviceCapAMD, ( - cl_device_id device_id, - cl_uint encode_mode, - cl_uint encode_cap_total_size, - cl_uint *num_encode_cap, - void *pEncodeCAP)) -{ - // Make sure the device supports Open Video extensions - amd::Device* device = as_amd(device_id); - if (!device->info().openVideo_) { - return CL_DEVICE_NOT_FOUND; - } - -// amd::VideoSession& session = *as_amd(video_session); - amd::Command::EventWaitList eventWaitList; - cl_int err = amd::clSetEventWaitList(eventWaitList, staticQueue->context(), 0, NULL); - amd::Command* command = new amd::SetVideoSessionCommand( - *staticQueue, eventWaitList, - amd::SetVideoSessionCommand::GetDeviceCapVCE, pEncodeCAP, encode_cap_total_size); - if (command == NULL) { - return CL_OUT_OF_HOST_MEMORY; - } - command->enqueue(); - command->release(); - staticQueue->finish(); - - return CL_SUCCESS; -} -RUNTIME_EXIT - -#if 1 -RUNTIME_ENTRY(cl_int, clEncodePictureAMD, ( - cl_video_session_amd video_session, - cl_uint number_of_encode_task_input_buffers, - void* encode_task_input_buffer_list, - void* picture_parameter, - cl_uint* pTaskID)) - -{ - cl_uint errcode_ret = CL_SUCCESS; - - if (!is_valid(video_session)) { - LogWarning("invalid parameter \"video_session\""); - return CL_INVALID_VIDEO_SESSION_AMD; - } - - return errcode_ret; -} -RUNTIME_EXIT -#endif - -RUNTIME_ENTRY(cl_int, clEncodeQueryTaskDescriptionAMD, ( - cl_video_session_amd video_session, - cl_uint num_of_task_description_request, - cl_uint* num_of_task_description_return, - void * task_description_list)) -{ - cl_uint errcode_ret = CL_SUCCESS; - - if (!is_valid(video_session)) { - LogWarning("invalid parameter \"video_session\""); - return CL_INVALID_VIDEO_SESSION_AMD; - } - - amd::VideoSession& session = *as_amd(video_session); - amd::Command::EventWaitList eventWaitList; - cl_int err = amd::clSetEventWaitList(eventWaitList, session.context(), 0, NULL); - amd::Command* command = new amd::SetVideoSessionCommand( - session.queue(), eventWaitList, - amd::SetVideoSessionCommand::EncodeQueryTaskDescription, - num_of_task_description_request, task_description_list, num_of_task_description_return); - if (command == NULL) { - return CL_OUT_OF_HOST_MEMORY; - } - command->enqueue(); - command->release(); - session.queue().finish(); - - return errcode_ret; -} -RUNTIME_EXIT - - -RUNTIME_ENTRY(cl_int, clEncodeReleaseOutputResourceAMD, ( - cl_video_session_amd video_session, - cl_uint task_id)) -{ - cl_uint errcode_ret = CL_SUCCESS; - - if (!is_valid(video_session)) { - LogWarning("invalid parameter \"video_session\""); - return CL_INVALID_VIDEO_SESSION_AMD; - } - - amd::VideoSession& session = *as_amd(video_session); - amd::Command::EventWaitList eventWaitList; - cl_int err = amd::clSetEventWaitList(eventWaitList, session.context(), 0, NULL); - amd::Command* command = new amd::SetVideoSessionCommand( - session.queue(), eventWaitList, - amd::SetVideoSessionCommand::ReleaseOutputResource, - NULL, task_id); - if (command == NULL) { - return CL_OUT_OF_HOST_MEMORY; - } - command->enqueue(); - command->release(); - session.queue().finish(); - - return errcode_ret; -} -RUNTIME_EXIT - -namespace amd { - -cl_int -clEnqueueVideoDecodeAMD(VideoSession& session, - cl_video_decode_data_amd* data, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) -{ - if ((NULL == data) || (data->video_type.type != CL_VIDEO_DECODE)) { - return CL_INVALID_OPERATION; - } - - if (!is_valid(data->output_surface)) { - return CL_INVALID_MEM_OBJECT; - } - - amd::Command::EventWaitList eventWaitList; - cl_int errcode = amd::clSetEventWaitList(eventWaitList, - session.context(), num_events_in_wait_list, event_wait_list); - if (errcode != CL_SUCCESS){ - return errcode; - } - - //! Now create command and enqueue - amd::RunVideoProgramCommand* command = - new amd::RunVideoProgramCommand(session.queue(), - eventWaitList, data, *as_amd(data->output_surface), - CL_COMMAND_VIDEO_DECODE_AMD); - if (command == NULL) { - LogError("Cannot create new RunVideoProgramCommand"); - return CL_OUT_OF_HOST_MEMORY; - } - - // Make sure we have memory for the command execution - if (!command->validateMemory()) { - delete command; - return CL_MEM_OBJECT_ALLOCATION_FAILURE; - } - - command->enqueue(); - - *not_null(event) = as_cl(&command->event()); - if (event == NULL) { - command->release(); - } - return CL_SUCCESS; -} - -cl_int -clEnqueueVideoEncodeAMD(VideoSession& session, - cl_video_encode_data_amd* data, - cl_uint num_events_in_wait_list, - const cl_event* event_wait_list, - cl_event* event) -{ - if ((NULL == data) || (data->video_type.type != CL_VIDEO_ENCODE)) { - return CL_INVALID_OPERATION; - } - - CAL_VID_BUFFER_DESCRIPTION *bufferList = - reinterpret_cast(data->pictureParam1); - cl_mem memory = static_cast(bufferList[0].buffer.pPicture); - - if (!is_valid(memory)) { - return CL_INVALID_MEM_OBJECT; - } - - // Start up the event queue - amd::Command::EventWaitList eventWaitList; - cl_int errcode = amd::clSetEventWaitList(eventWaitList, - session.context(), num_events_in_wait_list, event_wait_list); - if (errcode != CL_SUCCESS){ - return errcode; - } - - //! Now create command and enqueue - amd::RunVideoProgramCommand* command = - new amd::RunVideoProgramCommand(session.queue(), - eventWaitList, data, *as_amd(memory), - CL_COMMAND_VIDEO_ENCODE_AMD); - if (command == NULL) { - LogError("Cannot create new RunVideoProgramCommand"); - return CL_OUT_OF_HOST_MEMORY; - } - - // Make sure we have memory for the command execution - if (!command->validateMemory()) { - delete command; - return CL_MEM_OBJECT_ALLOCATION_FAILURE; - } - - // Issue the command via the queue system. - command->enqueue(); - - *not_null(event) = as_cl(&command->event()); - if (event == NULL) { - command->release(); - } - return CL_SUCCESS; -} - - -} // namespace amd - -#endif // cl_amd_video_session diff --git a/opencl/api/opencl/amdocl/cl_open_video_amd.h b/opencl/api/opencl/amdocl/cl_open_video_amd.h deleted file mode 100644 index 7f4a6a585a..0000000000 --- a/opencl/api/opencl/amdocl/cl_open_video_amd.h +++ /dev/null @@ -1,362 +0,0 @@ -/* ============================================================ - -Copyright (c) 2010 Advanced Micro Devices, Inc. All rights reserved. - -Redistribution and use of this material is permitted under the following -conditions: - -Redistributions must retain the above copyright notice and all terms of this -license. - -In no event shall anyone redistributing or accessing or using this material -commence or participate in any arbitration or legal action relating to this -material against Advanced Micro Devices, Inc. or any copyright holders or -contributors. The foregoing shall survive any expiration or termination of -this license or any agreement or access or use related to this material. - -ANY BREACH OF ANY TERM OF THIS LICENSE SHALL RESULT IN THE IMMEDIATE REVOCATION -OF ALL RIGHTS TO REDISTRIBUTE, ACCESS OR USE THIS MATERIAL. - -THIS MATERIAL IS PROVIDED BY ADVANCED MICRO DEVICES, INC. AND ANY COPYRIGHT -HOLDERS AND CONTRIBUTORS "AS IS" IN ITS CURRENT CONDITION AND WITHOUT ANY -REPRESENTATIONS, GUARANTEE, OR WARRANTY OF ANY KIND OR IN ANY WAY RELATED TO -SUPPORT, INDEMNITY, ERROR FREE OR UNINTERRUPTED OPERATION, OR THAT IT IS FREE -FROM DEFECTS OR VIRUSES. ALL OBLIGATIONS ARE HEREBY DISCLAIMED - WHETHER -EXPRESS, IMPLIED, OR STATUTORY - INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED -WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, -ACCURACY, COMPLETENESS, OPERABILITY, QUALITY OF SERVICE, OR NON-INFRINGEMENT. -IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. OR ANY COPYRIGHT HOLDERS OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT -OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, REVENUE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED OR BASED ON ANY THEORY OF LIABILITY -ARISING IN ANY WAY RELATED TO THIS MATERIAL, EVEN IF ADVISED OF THE POSSIBILITY -OF SUCH DAMAGE. THE ENTIRE AND AGGREGATE LIABILITY OF ADVANCED MICRO DEVICES, -INC. AND ANY COPYRIGHT HOLDERS AND CONTRIBUTORS SHALL NOT EXCEED TEN DOLLARS -(US $10.00). ANYONE REDISTRIBUTING OR ACCESSING OR USING THIS MATERIAL ACCEPTS -THIS ALLOCATION OF RISK AND AGREES TO RELEASE ADVANCED MICRO DEVICES, INC. AND -ANY COPYRIGHT HOLDERS AND CONTRIBUTORS FROM ANY AND ALL LIABILITIES, -OBLIGATIONS, CLAIMS, OR DEMANDS IN EXCESS OF TEN DOLLARS (US $10.00). THE -FOREGOING ARE ESSENTIAL TERMS OF THIS LICENSE AND, IF ANY OF THESE TERMS ARE -CONSTRUED AS UNENFORCEABLE, FAIL IN ESSENTIAL PURPOSE, OR BECOME VOID OR -DETRIMENTAL TO ADVANCED MICRO DEVICES, INC. OR ANY COPYRIGHT HOLDERS OR -CONTRIBUTORS FOR ANY REASON, THEN ALL RIGHTS TO REDISTRIBUTE, ACCESS OR USE -THIS MATERIAL SHALL TERMINATE IMMEDIATELY. MOREOVER, THE FOREGOING SHALL -SURVIVE ANY EXPIRATION OR TERMINATION OF THIS LICENSE OR ANY AGREEMENT OR -ACCESS OR USE RELATED TO THIS MATERIAL. - -NOTICE IS HEREBY PROVIDED, AND BY REDISTRIBUTING OR ACCESSING OR USING THIS -MATERIAL SUCH NOTICE IS ACKNOWLEDGED, THAT THIS MATERIAL MAY BE SUBJECT TO -RESTRICTIONS UNDER THE LAWS AND REGULATIONS OF THE UNITED STATES OR OTHER -COUNTRIES, WHICH INCLUDE BUT ARE NOT LIMITED TO, U.S. EXPORT CONTROL LAWS SUCH -AS THE EXPORT ADMINISTRATION REGULATIONS AND NATIONAL SECURITY CONTROLS AS -DEFINED THEREUNDER, AS WELL AS STATE DEPARTMENT CONTROLS UNDER THE U.S. -MUNITIONS LIST. THIS MATERIAL MAY NOT BE USED, RELEASED, TRANSFERRED, IMPORTED, -EXPORTED AND/OR RE-EXPORTED IN ANY MANNER PROHIBITED UNDER ANY APPLICABLE LAWS, -INCLUDING U.S. EXPORT CONTROL LAWS REGARDING SPECIFICALLY DESIGNATED PERSONS, -COUNTRIES AND NATIONALS OF COUNTRIES SUBJECT TO NATIONAL SECURITY CONTROLS. -MOREOVER, THE FOREGOING SHALL SURVIVE ANY EXPIRATION OR TERMINATION OF ANY -LICENSE OR AGREEMENT OR ACCESS OR USE RELATED TO THIS MATERIAL. - -NOTICE REGARDING THE U.S. GOVERNMENT AND DOD AGENCIES: This material is -provided with "RESTRICTED RIGHTS" and/or "LIMITED RIGHTS" as applicable to -computer software and technical data, respectively. Use, duplication, -distribution or disclosure by the U.S. Government and/or DOD agencies is -subject to the full extent of restrictions in all applicable regulations, -including those found at FAR52.227 and DFARS252.227 et seq. and any successor -regulations thereof. Use of this material by the U.S. Government and/or DOD -agencies is acknowledgment of the proprietary rights of any copyright holders -and contributors, including those of Advanced Micro Devices, Inc., as well as -the provisions of FAR52.227-14 through 23 regarding privately developed and/or -commercial computer software. - -This license forms the entire agreement regarding the subject matter hereof and -supersedes all proposals and prior discussions and writings between the parties -with respect thereto. This license does not affect any ownership, rights, title, -or interest in, or relating to, this material. No terms of this license can be -modified or waived, and no breach of this license can be excused, unless done -so in a writing signed by all affected parties. Each term of this license is -separately enforceable. If any term of this license is determined to be or -becomes unenforceable or illegal, such term shall be reformed to the minimum -extent necessary in order for this license to remain in effect in accordance - -with its terms as modified by such reformation. This license shall be governed -by and construed in accordance with the laws of the State of Texas without -regard to rules on conflicts of law of any state or jurisdiction or the United -Nations Convention on the International Sale of Goods. All disputes arising out -of this license shall be subject to the jurisdiction of the federal and state -courts in Austin, Texas, and all defenses are hereby waived concerning personal -jurisdiction and venue of these courts. - -============================================================ */ - -#ifndef __CL_OPEN_VIDEO_AMD_H -#define __CL_OPEN_VIDEO_AMD_H - -/****************************************** -* Private AMD extension cl_amd_open_video * -******************************************/ -#define cl_amd_open_video 0 - -#if cl_amd_open_video - -#ifdef __cplusplus -extern "C" { -#endif /*__cplusplus*/ - -/* cl_device_info*/ -#define CL_DEVICE_MAX_VIDEO_SESSIONS_AMD 0x10010 -#define CL_DEVICE_NUM_VIDEO_ATTRIBS_AMD 0x10011 -#define CL_DEVICE_VIDEO_ATTRIBS_AMD 0x10012 - -#define CL_DEVICE_VIDEO_ATTRIBS_ENC_AMD 0x10014 -#define CL_DEVICE_MAX_VIDEO_ENC_SESSIONS_AMD 0x10015 -#define CL_DEVICE_NUM_VIDEO_ENC_ATTRIBS_AMD 0x10016 - -/* cl_video_session_flags_amd */ -typedef cl_bitfield cl_video_session_flags_amd; - -/* cl_video_config_type_amd enumeration */ -// - // Open Encode Porting TBD check if the 0x4101 enum. that will result is OK - // - -/* cl_video_config_type_amd enumeration */ -typedef enum _cl_video_config_type_amd { - CL_VIDEO_DECODE_CONFIGURATION_AMD = 0x4100, - CL_VIDEO_ENCODE_CONFIGURATION_AMD = 0x4101 -} cl_video_config_type_amd; - -/* cl_video_session_info_amd enumeration */ -typedef enum _cl_video_session_info_amd { - CL_VIDEO_SESSION_CONFIG_SIZE_AMD = 0x10013, - CL_VIDEO_SESSION_CONFIG_TYPE_AMD, - CL_VIDEO_SESSION_CONFIG_BUDDEF_AMD -} cl_video_session_info_amd; - -typedef enum _cl_video_session_enc_info_amd { - CL_CONFIG_TYPE_NONE = 0, - CL_CONFIG_TYPE_PICTURE_CONTROL = 1, - CL_CONFIG_TYPE_RATE_CONTROL = 2, - CL_CONFIG_TYPE_MOTION_ESTIMATION = 3, - CL_CONFIG_TYPE_RDO = 4 -} cl_video_session_enc_info_amd; - -/* cl_amd_open_video typedefs */ -typedef struct _cl_video_session_amd* cl_video_session_amd; - -//typedef cl_bitfield cl_video_session_flags_amd; - -/* cl_video_decode_profile_amd enumeration */ -typedef enum _cl_video_decode_profile_amd -{ - CL_VIDEO_DECODE_PROFILE_H264_BASELINE_AMD = 1, - CL_VIDEO_DECODE_PROFILE_H264_MAIN_AMD, - CL_VIDEO_DECODE_PROFILE_H264_HIGH_AMD, - CL_VIDEO_DECODE_PROFILE_VC1_SIMPLE_AMD, - CL_VIDEO_DECODE_PROFILE_VC1_MAIN_AMD, - CL_VIDEO_DECODE_PROFILE_VC1_ADVANCED_AMD, - CL_VIDEO_DECODE_PROFILE_MPEG2_VLD_AMD, -} cl_video_decode_profile_amd; - -// -// Open Encode ported for encode -// -/* cl_video_encode_profile_amd enumeration */ -typedef enum _cl_video_encode_profile_amd -{ - CL_VIDEO_ENCODE_PROFILE_H264_BASELINE_AMD = 1, - CL_VIDEO_ENCODE_PROFILE_H264_MAIN_AMD, - CL_VIDEO_ENCODE_PROFILE_H264_HIGH_AMD, - -} cl_video_encode_profile_amd; - - -/* cl_video_format_amd enumeration */ -typedef enum _cl_video_format_amd -{ - CL_VIDEO_NV12_INTERLEAVED_AMD = 1, - CL_VIDEO_YV12_INTERLEAVED_AMD -} cl_video_format_amd; - -/* cl_video_attrib_amd */ -typedef struct _cl_video_attrib_amd { - cl_video_decode_profile_amd profile; - cl_video_format_amd format; -} cl_video_attrib_amd; - -/* cl_video_decode_desc_amd */ -typedef struct _cl_video_decode_desc_amd { - cl_video_attrib_amd attrib; - size_t image_width; - size_t image_height; -} cl_video_decode_desc_amd; - - -// -// Open Encode ported -// - -/* cl_video_attrib_amd */ -typedef struct _cl_video_attrib_encode_amd { - cl_video_encode_profile_amd codec_profile; - cl_uint profile; - cl_uint level; - cl_video_format_amd format; -} cl_video_attrib_encode_amd; - -/* cl_video_encode_desc_amd */ -typedef struct _cl_video_encode_desc_amd { - cl_video_attrib_encode_amd attrib; - size_t image_width; - size_t image_height; - cl_uint priority; - cl_uint encodeMode; - cl_uint frameRateNumerator; - cl_uint frameRateDenominator; - void * calVideoProperties; -} cl_video_encode_desc_amd; - -/* cl_video_program_type_amd enumeration*/ -typedef enum _cl_video_program_type_amd -{ - CL_VIDEO_DECODE = 1, - CL_VIDEO_ENCODE = 2, -} cl_video_program_type_amd; - -/* cl_video_program_data_amd */ -typedef struct _cl_video_program_data_amd { - cl_uint size; - cl_video_program_type_amd type; - cl_uint flags; -} cl_video_program_data_amd; - -/* cl_video_decode_data_amd */ -typedef struct _cl_video_decode_data_amd { - cl_video_program_data_amd video_type; - cl_mem output_surface; - void* picture_parameter_1; - void* picture_parameter_2; - cl_uint picture_parameter_2_size; - void* bitstream_data; - cl_uint bitstream_data_size; - void* slice_data_control; - cl_uint slice_data_control_size; -} cl_video_decode_data_amd; - -/* cl_video_encode_data_amd */ -typedef struct _cl_video_encode_data_amd { - cl_video_program_data_amd video_type; - cl_uint pictureParam1Size; - cl_uint pictureParam2Size; - void* pictureParam1; - void* pictureParam2; - cl_uint uiTaskID; -} cl_video_encode_data_amd; - -/* cl_command_type */ -#define CL_COMMAND_VIDEO_DECODE_AMD 0x4101 -#define CL_COMMAND_VIDEO_ENCODE_AMD 0x4102 -#define CL_COMMAND_VIDEO_QUERY_TASK_AMD 0x4103 - -/* cl_amd_open_video error codes */ -#define CL_INVALID_VIDEO_SESSION_FLAGS_AMD -1100 -#define CL_INVALID_VIDEO_SESSION_AMD -1101 -#define CL_INVALID_VIDEO_CONFIG_TYPE_AMD -1102 -#define CL_INVALID_VIDEO_CONFIG_BUFFER_AMD -1103 -#define CL_INVALID_VIDEO_DATA_AMD -1104 - -/* cl_video_session_flags_amd - bitfield */ -#define CL_VIDEO_DECODE_ACCELERATION_AMD (1<<0) -// Open Encode ported -#define CL_VIDEO_ENCODE_ACCELERATION_AMD (1<<0) - -// /* cl_video_session_info_amd enumeration */ -//typedef enum _cl_video_session_info_amd { -// CL_VIDEO_SESSION_CONFIG_SIZE_AMD = 0x10012, -// CL_VIDEO_SESSION_CONFIG_TYPE_AMD, -// CL_VIDEO_SESSION_CONFIG_BUDDEF_AMD -//} cl_video_session_info_amd; - -typedef CL_API_ENTRY cl_video_session_amd (CL_API_CALL* clCreateVideoSessionAMD_fn)( - cl_context /* context */, - cl_device_id /* device */, - cl_video_session_flags_amd /* flags */, - cl_video_config_type_amd /* config_buffer_type */, - cl_uint /* config_buffer_size */, - void* /* config_buffer */, - cl_int* /* errcode_ret */); - -// Open Encode Changes add Enc CreateSession -typedef CL_API_ENTRY cl_video_session_amd (CL_API_CALL* clCreateVideoEncSessionAMD_fn)( - cl_context /* context */, - cl_device_id /* device */, - cl_video_session_flags_amd /* flags */, - cl_video_config_type_amd /* config_buffer_type */, - cl_uint /* config_buffer_size */, - void* /* config_buffer */, - cl_int* /* errcode_ret */); - -typedef CL_API_ENTRY cl_int (CL_API_CALL* clDestroyVideoEncSessionAMD_fn)( - cl_video_session_amd /*video_session*/); - -// Open Encode Changes - -typedef CL_API_ENTRY cl_int (CL_API_CALL* clRetainVideoSessionAMD_fn)( - cl_video_session_amd /* video_session */); - -typedef CL_API_ENTRY cl_int (CL_API_CALL* clReleaseVideoSessionAMD_fn)( - cl_video_session_amd /* video_session*/); - -typedef CL_API_ENTRY cl_int (CL_API_CALL* clGetVideoSessionInfoAMD_fn)( - cl_video_session_amd /* video_session */, - cl_video_session_info_amd /* param_name */, - size_t /* param_value_size */, - void* /* param_value */, - size_t* /* param_value_size_ret */); - -typedef CL_API_ENTRY cl_int (CL_API_CALL* clGetVideoSessionEncInfoAMD_fn)( - cl_video_session_amd /* video_session */, - cl_video_session_enc_info_amd /* param_name */, - size_t /* param_value_size */, - void* /* param_value */, - size_t* /* param_value_size_ret */); - -typedef CL_API_ENTRY cl_int (CL_API_CALL* clSendEncodeConfigInfoAMD_fn) ( - cl_video_session_amd /* video_session */, - size_t /* numBuffers */, - void* /* pConfigBuffers */); - -typedef CL_API_ENTRY cl_int (CL_API_CALL* clEnqueueRunVideoProgramAMD_fn)( - cl_video_session_amd /* video_session */, - void* /* video_data_struct */, - cl_uint /* num_events_in_wait_list */, - const cl_event* /* event_wait_list */, - cl_event* /* event*/); - -typedef CL_API_ENTRY cl_int (CL_API_CALL* clEncodeGetDeviceCapAMD_fn)( - cl_device_id /* device_id */, - cl_uint /* encode_mode */, - cl_uint /* encode_cap_total_size */, - cl_uint* /* num_encode_cap */, - void* /* pEncodeCAP */); - -typedef CL_API_ENTRY cl_int (CL_API_CALL* clEncodeQueryTaskDescriptionAMD_fn)( - cl_video_session_amd /* video_session */, - cl_uint /* num_of_task_description_request */, - cl_uint* /* num_of_task_description_return */, - void * /* task_description_list */ - ); - -typedef CL_API_ENTRY cl_int (CL_API_CALL* clEncodeReleaseOutputResourceAMD_fn)( - cl_video_session_amd /* video_session */, - cl_uint /* task_id */ - ); - -#ifdef __cplusplus -} -#endif /*__cplusplus*/ - -#endif /*cl_amd_open_video*/ - -#endif /*!__CL_OPEN_VIDEO_AMD_H*/