obs-ffmpeg: Update AMF SDK to v1.4.29

This commit is contained in:
Roman Huts
2023-02-13 14:38:18 -05:00
committed by Ryan Foster
parent c24ec240af
commit c5a06d3cf2
13 changed files with 170 additions and 52 deletions
@@ -43,9 +43,10 @@ enum AMF_HQ_SCALER_ALGORITHM_ENUM
{
AMF_HQ_SCALER_ALGORITHM_BILINEAR = 0,
AMF_HQ_SCALER_ALGORITHM_BICUBIC = 1,
AMF_HQ_SCALER_ALGORITHM_FSR = 2,
AMF_HQ_SCALER_ALGORITHM_FSR = 2, // deprecated
AMF_HQ_SCALER_ALGORITHM_VIDEOSR1_0 = 2,
AMF_HQ_SCALER_ALGORITHM_POINT = 3,
AMF_HQ_SCALER_ALGORITHM_FSR1_1 = 4,
AMF_HQ_SCALER_ALGORITHM_VIDEOSR1_1 = 4,
};
@@ -63,5 +64,6 @@ enum AMF_HQ_SCALER_ALGORITHM_ENUM
#define AMF_HQ_SCALER_FROM_SRGB L"FromSRGB" // bool (default=true) Convert to SRGB.
#define AMF_HQ_SCALER_SHARPNESS L"HQScalerSharpness" // Float in the range of [0.0, 2.0]
#define AMF_HQ_SCALER_FRAME_RATE L"HQScalerFrameRate" // Frame rate (off, 15, 30, 60)
#endif //#ifndef AMFHQScaler_h
@@ -0,0 +1,61 @@
//
// Notice Regarding Standards. AMD does not provide a license or sublicense to
// any Intellectual Property Rights relating to any standards, including but not
// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4;
// AVC/H.264; HEVC/H.265; AAC decode/FFMPEG; AAC encode/FFMPEG; VC-1; and MP3
// (collectively, the "Media Technologies"). For clarity, you will pay any
// royalties due for such third party technologies, which may include the Media
// Technologies that are owed as a result of AMD providing the Software to you.
//
// MIT license
//
// Copyright (c) 2017 Advanced Micro Devices, Inc. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
//-------------------------------------------------------------------------------------------------
// An interface available on some components to provide information on supported input and output codecs
//-------------------------------------------------------------------------------------------------
#ifndef AMF_SupportedCodecs_h
#define AMF_SupportedCodecs_h
#pragma once
#include "public/include/core/Interface.h"
//properties on the returned AMFPropertyStorage
#define SUPPORTEDCODEC_ID L"CodecId" //amf_int64
#define SUPPORTEDCODEC_SAMPLERATE L"SampleRate" //amf_int32
namespace amf
{
class AMFSupportedCodecs : public AMFInterface
{
public:
AMF_DECLARE_IID(0xc1003a83, 0x7934, 0x408a, 0x95, 0x5b, 0xc4, 0xdd, 0x85, 0x9d, 0xf5, 0x61)
//call with increasing values until it returns AMF_OUT_OF_RANGE
virtual AMF_RESULT AMF_STD_CALL GetInputCodecAt(amf_size index, AMFPropertyStorage** codec) const = 0;
virtual AMF_RESULT AMF_STD_CALL GetOutputCodecAt(amf_size index, AMFPropertyStorage** codec) const = 0;
};
typedef AMFInterfacePtr_T<AMFSupportedCodecs> AMFSupportedCodecsPtr;
}
#endif
@@ -1,4 +1,4 @@
//
//
// Notice Regarding Standards. AMD does not provide a license or sublicense to
// any Intellectual Property Rights relating to any standards, including but not
// limited to any audio and/or video codec technologies such as MPEG-2, MPEG-4;
@@ -6,9 +6,9 @@
// (collectively, the "Media Technologies"). For clarity, you will pay any
// royalties due for such third party technologies, which may include the Media
// Technologies that are owed as a result of AMD providing the Software to you.
//
// MIT license
//
//
// MIT license
//
// Copyright (c) 2021 Advanced Micro Devices, Inc. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -40,8 +40,9 @@
#define AMFVQEnhancer L"AMFVQEnhancer"
#define AMF_VIDEO_ENHANCER_ENGINE_TYPE L"AMF_VIDEI_ENHANCER_ENGINE_TYPE" // AMF_MEMORY_TYPE (DX11, DX12, OPENCL, VULKAN default : DX11)" - determines how the object is initialized and what kernels to use
#define AMF_VIDEO_ENHANCER_OUTPUT_SIZE L"AMF_VIDEO_ENHANCER_OUTPUT_SIZE" // AMFSize
#define AMF_VIDEO_ENHANCER_OUTPUT_SIZE L"AMF_VIDEO_ENHANCER_OUTPUT_SIZE" // AMFSize
#define AMF_VE_FCR_ATTENUATION L"AMF_VE_FCR_ATTENUATION" // Float in the range of [0.02, 0.4], default : 0.1
#define AMF_VE_FCR_RADIUS L"AMF_VE_FCR_RADIUS" // int in the range of [1, 4]
#define AMF_VE_FCR_SPLIT_VIEW L"AMF_VE_FCR_SPLIT_VIEW" // FCR View split window
#endif //#ifndef AMFVQEnhancer_h
@@ -106,7 +106,7 @@ enum AMF_TIMESTAMP_MODE_ENUM
// properties to be set on decoder if internal converter is used
#define AMF_VIDEO_DECODER_OUTPUT_TRANSFER_CHARACTERISTIC L"OutColorTransferChar" // amf_int64(AMF_COLOR_TRANSFER_CHARACTERISTIC_ENUM); default = AMF_COLOR_TRANSFER_CHARACTERISTIC_UNDEFINED, ISO/IEC 23001-8_2013 7.2 See VideoDecoderUVD.h for enum
#define AMF_VIDEO_DECODER_OUTPUT_COLOR_PRIMARIES L"OutputColorPrimaries" // amf_int64(AMF_COLOR_PRIMARIES_ENUM); default = AMF_COLOR_PRIMARIES_UNDEFINED, ISO/IEC 23001-8_2013 7.1 See ColorSpace.h for enum
#define AMF_VIDEO_DECODER_OUTPUT_COLOR_PRIMARIES L"OutputColorPrimaries" // amf_int64(AMF_COLOR_PRIMARIES_ENUM); default = AMF_COLOR_PRIMARIES_UNDEFINED, ISO/IEC 23001-8_2013 7.1 See ColorSpace.h for enum
#define AMF_VIDEO_DECODER_OUTPUT_HDR_METADATA L"OutHDRMetadata" // AMFBuffer containing AMFHDRMetadata; default NULL
#define AMF_VIDEO_DECODER_LOW_LATENCY L"LowLatencyDecode" // amf_bool; default = false; true = low latency decode, false = regular decode
@@ -120,4 +120,7 @@ enum AMF_TIMESTAMP_MODE_ENUM
#define AMF_VIDEO_DECODER_NATIVEWINDOW L"AppleNativeWindow" // amf_int64; default = 0; pointer to native window
#endif //__APPLE__
#define AMF_VIDEO_DECODER_ENABLE_SMART_ACCESS_VIDEO L"EnableDecoderSmartAccessVideo" // amf_bool; default = false; true = enables smart access video feature
#define AMF_VIDEO_DECODER_SKIP_TRANSFER_SMART_ACCESS_VIDEO L"SkipTransferSmartAccessVideo" // amf_bool; default = false; true = keeps output on GPU where it ran
#endif //#ifndef AMF_VideoDecoderUVD_h
@@ -120,8 +120,8 @@ enum AMF_VIDEO_ENCODER_AV1_OUTPUT_FRAME_TYPE_ENUM
enum AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET_ENUM
{
AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET_HIGH_QUALITY = 0,
AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET_QUALITY = 30,
AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET_HIGH_QUALITY = 0,
AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET_QUALITY = 30,
AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET_BALANCED = 70,
AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET_SPEED = 100
};
@@ -163,13 +163,18 @@ enum AMF_VIDEO_ENCODER_AV1_INTRA_REFRESH_MODE_ENUM
AMF_VIDEO_ENCODER_AV1_INTRA_REFRESH_MODE__GOP_ALIGNED = 1,
AMF_VIDEO_ENCODER_AV1_INTRA_REFRESH_MODE__CONTINUOUS = 2
};
enum AMF_VIDEO_ENCODER_AV1_LTR_MODE_ENUM
{
AMF_VIDEO_ENCODER_AV1_LTR_MODE_RESET_UNUSED = 0,
AMF_VIDEO_ENCODER_AV1_LTR_MODE_KEEP_UNUSED = 1
};
// *** Static properties - can be set only before Init() ***
// *** Static properties - can be set only before Init() ***
// Encoder Engine Settings
#define AMF_VIDEO_ENCODER_AV1_ENCODER_INSTANCE_INDEX L"Av1EncoderInstanceIndex" // amf_int64; default = 0; selected HW instance idx. The number of instances is queried by using AMF_VIDEO_ENCODER_AV1_CAP_NUM_OF_HW_INSTANCES
#define AMF_VIDEO_ENCODER_AV1_ENCODING_LATENCY_MODE L"Av1EncodingLatencyMode" // amf_int64(AMF_VIDEO_ENCODER_AV1_ENCODING_LATENCY_MODE_ENUM); default = depends on USAGE; The encoding latency mode.
#define AMF_VIDEO_ENCODER_AV1_ENCODING_LATENCY_MODE L"Av1EncodingLatencyMode" // amf_int64(AMF_VIDEO_ENCODER_AV1_ENCODING_LATENCY_MODE_ENUM); default = depends on USAGE; The encoding latency mode.
#define AMF_VIDEO_ENCODER_AV1_QUERY_TIMEOUT L"Av1QueryTimeout" // amf_int64; default = 0 (no wait); timeout for QueryOutput call in ms.
// Usage Settings
@@ -184,7 +189,7 @@ enum AMF_VIDEO_ENCODER_AV1_INTRA_REFRESH_MODE_ENUM
#define AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET L"Av1QualityPreset" // amf_int64(AMF_VIDEO_ENCODER_AV1_QUALITY_PRESET_ENUM); default = depends on USAGE; Quality Preset
// Codec Configuration
#define AMF_VIDEO_ENCODER_AV1_SCREEN_CONTENT_TOOLS L"Av1ScreenContentTools" // bool; default = depends on USAGE; If true, allow enabling screen content tools by AMF_VIDEO_ENCODER_AV1_PALETTE_MODE_ENABLE and AMF_VIDEO_ENCODER_AV1_FORCE_INTEGER_MV; if false, all screen content tools are disabled.
#define AMF_VIDEO_ENCODER_AV1_SCREEN_CONTENT_TOOLS L"Av1ScreenContentTools" // bool; default = depends on USAGE; If true, allow enabling screen content tools by AMF_VIDEO_ENCODER_AV1_PALETTE_MODE and AMF_VIDEO_ENCODER_AV1_FORCE_INTEGER_MV; if false, all screen content tools are disabled.
#define AMF_VIDEO_ENCODER_AV1_ORDER_HINT L"Av1OrderHint" // bool; default = depends on USAGE; If true, code order hint; if false, don't code order hint
#define AMF_VIDEO_ENCODER_AV1_FRAME_ID L"Av1FrameId" // bool; default = depends on USAGE; If true, code frame id; if false, don't code frame id
#define AMF_VIDEO_ENCODER_AV1_TILE_GROUP_OBU L"Av1TileGroupObu" // bool; default = depends on USAGE; If true, code FrameHeaderObu + TileGroupObu and each TileGroupObu contains one tile; if false, code FrameObu.
@@ -207,6 +212,7 @@ enum AMF_VIDEO_ENCODER_AV1_INTRA_REFRESH_MODE_ENUM
// Picture Management Configuration
#define AMF_VIDEO_ENCODER_AV1_MAX_NUM_TEMPORAL_LAYERS L"Av1MaxNumOfTemporalLayers" // amf_int64; default = depends on USAGE; Max number of temporal layers might be enabled. The maximum value can be queried from AMF_VIDEO_ENCODER_AV1_CAP_MAX_NUM_TEMPORAL_LAYERS
#define AMF_VIDEO_ENCODER_AV1_MAX_LTR_FRAMES L"Av1MaxNumLTRFrames" // amf_int64; default = depends on USAGE; Max number of LTR frames. The maximum value can be queried from AMF_VIDEO_ENCODER_AV1_CAP_MAX_NUM_LTR_FRAMES
#define AMF_VIDEO_ENCODER_AV1_LTR_MODE L"Av1LTRMode" // amf_int64(AMF_VIDEO_ENCODER_AV1_LTR_MODE_ENUM); default = AMF_VIDEO_ENCODER_AV1_LTR_MODE_RESET_UNUSED; remove/keep unused LTRs (not specified in property AMF_VIDEO_ENCODER_AV1_FORCE_LTR_REFERENCE_BITFIELD)
#define AMF_VIDEO_ENCODER_AV1_MAX_NUM_REFRAMES L"Av1MaxNumRefFrames" // amf_int64; default = 1; Maximum number of reference frames
// color conversion
@@ -216,7 +222,7 @@ enum AMF_VIDEO_ENCODER_AV1_INTRA_REFRESH_MODE_ENUM
#define AMF_VIDEO_ENCODER_AV1_EXTRA_DATA L"Av1ExtraData" // AMFInterface* - > AMFBuffer*; buffer to retrieve coded sequence header
// *** Dynamic properties - can be set anytime ***
// *** Dynamic properties - can be set anytime ***
// Codec Configuration
#define AMF_VIDEO_ENCODER_AV1_PALETTE_MODE L"Av1PaletteMode" // bool; default = depends on USAGE; If true, enable palette mode; if false, disable palette mode. Valid only when AMF_VIDEO_ENCODER_AV1_SCREEN_CONTENT_TOOLS is true.
@@ -289,4 +295,6 @@ enum AMF_VIDEO_ENCODER_AV1_INTRA_REFRESH_MODE_ENUM
#define AMF_VIDEO_ENCODER_AV1_CAP_MAX_NUM_TEMPORAL_LAYERS L"Av1CapMaxNumTemporalLayers" // amf_int64; default = N/A; The cap of maximum number of temporal layers
#define AMF_VIDEO_ENCODER_AV1_CAP_MAX_NUM_LTR_FRAMES L"Av1CapMaxNumLTRFrames" // amf_int64; default = N/A; The cap of maximum number of LTR frames. This value is calculated based on current value of AMF_VIDEO_ENCODER_AV1_MAX_NUM_TEMPORAL_LAYERS.
#define AMF_VIDEO_ENCODER_AV1_ENABLE_SMART_ACCESS_VIDEO L"Av1EnableEncoderSmartAccessVideo" // amf_bool; default = false; true = enables smart access video feature
#endif //#ifndef AMF_VideoEncoderAV1_h
@@ -302,4 +302,6 @@ enum AMF_VIDEO_ENCODER_HEVC_LTR_MODE_ENUM
// properties set on AMFComponent to control component creation
#define AMF_VIDEO_ENCODER_HEVC_MEMORY_TYPE L"HevcEncoderMemoryType" // amf_int64(AMF_MEMORY_TYPE) , default is AMF_MEMORY_UNKNOWN, Values : AMF_MEMORY_DX11, AMF_MEMORY_DX9, AMF_MEMORY_UNKNOWN (auto)
#define AMF_VIDEO_ENCODER_HEVC_ENABLE_SMART_ACCESS_VIDEO L"HevcEnableEncoderSmartAccessVideo" // amf_bool; default = false; true = enables smart access video feature
#endif //#ifndef AMF_VideoEncoderHEVC_h
@@ -66,6 +66,29 @@ enum AMF_VIDEO_ENCODER_PROFILE_ENUM
AMF_VIDEO_ENCODER_PROFILE_CONSTRAINED_HIGH = 257
};
enum AMF_VIDEO_ENCODER_H264_LEVEL_ENUM
{
AMF_H264_LEVEL__1 = 10,
AMF_H264_LEVEL__1_1 = 11,
AMF_H264_LEVEL__1_2 = 12,
AMF_H264_LEVEL__1_3 = 13,
AMF_H264_LEVEL__2 = 20,
AMF_H264_LEVEL__2_1 = 21,
AMF_H264_LEVEL__2_2 = 22,
AMF_H264_LEVEL__3 = 30,
AMF_H264_LEVEL__3_1 = 31,
AMF_H264_LEVEL__3_2 = 32,
AMF_H264_LEVEL__4 = 40,
AMF_H264_LEVEL__4_1 = 41,
AMF_H264_LEVEL__4_2 = 42,
AMF_H264_LEVEL__5 = 50,
AMF_H264_LEVEL__5_1 = 51,
AMF_H264_LEVEL__5_2 = 52,
AMF_H264_LEVEL__6 = 60,
AMF_H264_LEVEL__6_1 = 61,
AMF_H264_LEVEL__6_2 = 62
};
enum AMF_VIDEO_ENCODER_SCANTYPE_ENUM
{
AMF_VIDEO_ENCODER_SCANTYPE_PROGRESSIVE = 0,
@@ -151,7 +174,7 @@ enum AMF_VIDEO_ENCODER_LTR_MODE_ENUM
#define AMF_VIDEO_ENCODER_EXTRADATA L"ExtraData" // AMFInterface* - > AMFBuffer*; SPS/PPS buffer in Annex B format - read-only
#define AMF_VIDEO_ENCODER_USAGE L"Usage" // amf_int64(AMF_VIDEO_ENCODER_USAGE_ENUM); default = N/A; Encoder usage type. fully configures parameter set.
#define AMF_VIDEO_ENCODER_PROFILE L"Profile" // amf_int64(AMF_VIDEO_ENCODER_PROFILE_ENUM) ; default = AMF_VIDEO_ENCODER_PROFILE_MAIN; H264 profile
#define AMF_VIDEO_ENCODER_PROFILE_LEVEL L"ProfileLevel" // amf_int64; default = 42; H264 profile level
#define AMF_VIDEO_ENCODER_PROFILE_LEVEL L"ProfileLevel" // amf_int64(AMF_VIDEO_ENCODER_H264_LEVEL_ENUM); default = AMF_H264_LEVEL__4_2; H264 level
#define AMF_VIDEO_ENCODER_MAX_LTR_FRAMES L"MaxOfLTRFrames" // amf_int64; default = 0; Max number of LTR frames
#define AMF_VIDEO_ENCODER_LTR_MODE L"LTRMode" // amf_int64(AMF_VIDEO_ENCODER_LTR_MODE_ENUM); default = AMF_VIDEO_ENCODER_LTR_MODE_RESET_UNUSED; remove/keep unused LTRs (not specified in property AMF_VIDEO_ENCODER_FORCE_LTR_REFERENCE_BITFIELD)
#define AMF_VIDEO_ENCODER_SCANTYPE L"ScanType" // amf_int64(AMF_VIDEO_ENCODER_SCANTYPE_ENUM); default = AMF_VIDEO_ENCODER_SCANTYPE_PROGRESSIVE; indicates input stream type
@@ -326,4 +349,6 @@ enum AMF_VIDEO_ENCODER_LTR_MODE_ENUM
// properties set on AMFComponent to control component creation
#define AMF_VIDEO_ENCODER_MEMORY_TYPE L"EncoderMemoryType" // amf_int64(AMF_MEMORY_TYPE) , default is AMF_MEMORY_UNKNOWN, Values : AMF_MEMORY_DX11, AMF_MEMORY_DX9, AMF_MEMORY_VULKAN or AMF_MEMORY_UNKNOWN (auto)
#define AMF_VIDEO_ENCODER_ENABLE_SMART_ACCESS_VIDEO L"EnableEncoderSmartAccessVideo" // amf_bool; default = false; true = enables smart access video feature
#endif //#ifndef AMF_VideoEncoderVCE_h
@@ -39,6 +39,11 @@
AMF_WEAK GUID AMFResourceStateGUID = { 0x452da9bf, 0x4ad7, 0x47a5, { 0xa6, 0x9b, 0x96, 0xd3, 0x23, 0x76, 0xf2, 0xf3 } }; // Current resource state value (D3D12_RESOURCE_STATES ), sizeof(UINT), set on ID3D12Resource
AMF_WEAK GUID AMFFenceGUID = { 0x910a7928, 0x57bd, 0x4b04, { 0x91, 0xa3, 0xe7, 0xb8, 0x04, 0x12, 0xcd, 0xa5 } }; // IUnknown (ID3D12Fence), set on ID3D12Resource syncronization fence for this resource
AMF_WEAK GUID AMFFenceValueGUID = { 0x62a693d3, 0xbb4a, 0x46c9, { 0xa5, 0x04, 0x9a, 0x8e, 0x97, 0xbf, 0xf0, 0x56 } }; // The last value to wait on the fence from AMFFenceGUID; sizeof(UINT64), set on ID3D12Fence
AMF_WEAK GUID AMFFenceD3D11GUID = { 0xdffdf6e0, 0x85e0, 0x4645, { 0x9d, 0x7, 0xe6, 0x4a, 0x19, 0x6b, 0xc9, 0xbf } }; // IUnknown (ID3D11Fence) OpenSharedFence for interop
AMF_WEAK GUID AMFFenceValueD3D11GUID = { 0x86581b71, 0x699f, 0x484b, { 0xb8, 0x75, 0x24, 0xda, 0x49, 0x8a, 0x74, 0xcf } }; // last value to wait on in d3d11
AMF_WEAK GUID AMFSharedHandleFenceGUID = { 0xca60dcc8, 0x76d1, 0x4088, 0xad, 0xd, 0x97, 0x71, 0xe7, 0xb0, 0x92, 0x49 }; // ID3D12Fence shared handle for D3D11 interop
#endif
#endif // __D3D12AMF_h__
+1 -1
View File
@@ -114,7 +114,7 @@ extern "C"
#define AMF_DLL_NAME L"amfrt32.dll"
#define AMF_DLL_NAMEA "amfrt32.dll"
#endif
#elif defined(__ANDROID__)
#elif defined(__ANDROID__) && !defined(AMF_ANDROID_ENCODER)
#define AMF_DLL_NAME L"libamf.so"
#define AMF_DLL_NAMEA "libamf.so"
#elif defined(__APPLE__)
+4 -5
View File
@@ -72,7 +72,7 @@
// #error Need to define AMF_ALIGN
#endif
#if defined(__linux) || (__clang__)
#ifndef _WIN32
typedef signed int HRESULT;
#define SUCCEEDED(hr) (((HRESULT)(hr)) >= 0)
#define FAILED(hr) (((HRESULT)(hr)) < 0)
@@ -184,9 +184,11 @@ typedef amf_uint32 amf_flags;
#define AMF_SECOND 10000000L // 1 second in 100 nanoseconds
#define AMF_MILLISECOND (AMF_SECOND / 1000)
#define AMF_MICROSECOND (AMF_MILLISECOND / 1000)
#define AMF_MIN(a, b) ((a) < (b) ? (a) : (b))
#define AMF_MAX(a, b) ((a) > (b) ? (a) : (b))
#define AMF_CLAMP(x, a, b) (AMF_MIN(AMF_MAX(x, a), b))
#define AMF_BITS_PER_BYTE 8
@@ -380,13 +382,10 @@ static AMF_INLINE struct AMFRatio AMFConstructRatio(amf_uint32 num, amf_uint32 d
#pragma pack(push, 1)
#if defined(_MSC_VER)
#pragma warning( push )
#endif
#if defined(WIN32)
#if defined(_MSC_VER)
#pragma warning(disable : 4200)
#pragma warning(disable : 4201)
#endif
#endif
typedef struct AMFColor
{
union
+3 -1
View File
@@ -68,9 +68,11 @@ namespace amf
AMF_SURFACE_Y410, ///< 16 - packed 4:4:4 - 10 bit per YUV component, 2 bits per A, AVYU
AMF_SURFACE_Y416, ///< 16 - packed 4:4:4 - 16 bit per component 4 bytes, AVYU
AMF_SURFACE_GRAY32, ///< 17 - single component - 32 bit
AMF_SURFACE_P012, ///< 18 - planar 4:2:0 Y width x height + packed UV width/2 x height/2 - 12 bit per component (16 allocated, upper 12 bits are used)
AMF_SURFACE_P016, ///< 19 - planar 4:2:0 Y width x height + packed UV width/2 x height/2 - 16 bit per component (16 allocated, all bits are used)
AMF_SURFACE_FIRST = AMF_SURFACE_NV12,
AMF_SURFACE_LAST = AMF_SURFACE_GRAY32
AMF_SURFACE_LAST = AMF_SURFACE_P016
} AMF_SURFACE_FORMAT;
//----------------------------------------------------------------------------------------------
// AMF_SURFACE_USAGE translates to D3D11_BIND_FLAG or VkImageUsageFlags
+30 -23
View File
@@ -366,6 +366,8 @@ namespace amf
}
#if (__cplusplus == 201103L) || defined(__GXX_EXPERIMENTAL_CXX0X) || (_MSC_VER >= 1600)
#pragma warning (push)
#pragma warning (disable : 26439) //This kind of function may not throw. Declare it 'noexcept'.
String(String&& p_other) : m_Str(NULL)
{
operator=(p_other);
@@ -498,6 +500,7 @@ namespace amf
p_other.m_Str = NULL; // Transfer the ownership
return *this;
}
#pragma warning (pop)
#endif
wchar_t& operator[](size_t index)
{
@@ -755,7 +758,7 @@ namespace amf
switch(AMFVariantGetType(pSrc))
{
case AMF_VARIANT_EMPTY:
errRet = AMFVariantClear(pDest);
errRet = AMFVariantInit(pDest);
break;
case AMF_VARIANT_BOOL:
errRet = AMFVariantAssignBool(pDest, AMFVariantBool(pSrc));
@@ -1201,21 +1204,21 @@ namespace amf
{
res = AMF_OK;
char buff[0xFF];
sprintf(buff, "%d,%d", value.num, value.den);
sprintf(buff, "%u,%u", value.num, value.den);
return buff;
}
static AMF_INLINE AMFVariant::String AMF_STD_CALL AMFConvertRatioToString(const AMFRatio& value, AMF_RESULT& res)
{
res = AMF_OK;
char buff[0xFF];
sprintf(buff, "%d,%d", value.num, value.den);
sprintf(buff, "%u,%u", value.num, value.den);
return buff;
}
static AMF_INLINE AMFVariant::String AMF_STD_CALL AMFConvertColorToString(const AMFColor& value, AMF_RESULT& res)
{
res = AMF_OK;
char buff[0xFF];
sprintf(buff, "%d,%d,%d,%d", value.r, value.g, value.b, value.a);
sprintf(buff, "%u,%u,%u,%u", value.r, value.g, value.b, value.a);
return buff;
}
@@ -1346,7 +1349,7 @@ namespace amf
int readElements = 0;
if(value.size() > 0)
{
readElements = sscanf(value.c_str(), "%d,%d", &tmp.num, &tmp.den);
readElements = sscanf(value.c_str(), "%u,%u", &tmp.num, &tmp.den);
}
if(readElements)
{
@@ -1362,7 +1365,7 @@ namespace amf
int readElements = 0;
if(value.size() > 0)
{
readElements = sscanf(value.c_str(), "%d,%d", &tmp.num, &tmp.den);
readElements = sscanf(value.c_str(), "%u,%u", &tmp.num, &tmp.den);
}
if(readElements)
{
@@ -1581,7 +1584,7 @@ namespace amf
AMF_RESULT errRet = AMF_OK;
AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest);
errRet = AMFVariantClear(pDest);
errRet = AMFVariantInit(pDest);
if(errRet == AMF_OK)
{
pDest->type = AMF_VARIANT_BOOL;
@@ -1595,7 +1598,7 @@ namespace amf
AMF_RESULT errRet = AMF_OK;
AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest);
errRet = AMFVariantClear(pDest);
errRet = AMFVariantInit(pDest);
if(errRet == AMF_OK)
{
pDest->type = AMF_VARIANT_INT64;
@@ -1609,7 +1612,7 @@ namespace amf
AMF_RESULT errRet = AMF_OK;
AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest);
errRet = AMFVariantClear(pDest);
errRet = AMFVariantInit(pDest);
if(errRet == AMF_OK)
{
pDest->type = AMF_VARIANT_DOUBLE;
@@ -1623,7 +1626,7 @@ namespace amf
AMF_RESULT errRet = AMF_OK;
AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest);
errRet = AMFVariantClear(pDest);
errRet = AMFVariantInit(pDest);
if (errRet == AMF_OK)
{
pDest->type = AMF_VARIANT_FLOAT;
@@ -1638,7 +1641,7 @@ namespace amf
AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest);
AMF_VARIANT_RETURN_IF_INVALID_POINTER(pValue);
errRet = AMFVariantClear(pDest);
errRet = AMFVariantInit(pDest);
if(errRet == AMF_OK)
{
const size_t size = (strlen(pValue) + 1);
@@ -1662,7 +1665,7 @@ namespace amf
AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest);
AMF_VARIANT_RETURN_IF_INVALID_POINTER(pValue);
errRet = AMFVariantClear(pDest);
errRet = AMFVariantInit(pDest);
if(errRet == AMF_OK)
{
const size_t size = (wcslen(pValue) + 1);
@@ -1686,7 +1689,7 @@ namespace amf
AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest);
//AMF_VARIANT_RETURN_IF_INVALID_POINTER(pValue);//can be NULL
errRet = AMFVariantClear(pDest);
errRet = AMFVariantInit(pDest);
if(errRet == AMF_OK)
{
pDest->type = AMF_VARIANT_INTERFACE;
@@ -1715,7 +1718,7 @@ namespace amf
AMF_RESULT errRet = AMF_OK;
AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest);
errRet = AMFVariantClear(pDest);
errRet = AMFVariantInit(pDest);
if(errRet == AMF_OK)
{
pDest->type = AMF_VARIANT_RECT;
@@ -1736,7 +1739,7 @@ namespace amf
AMF_RESULT errRet = AMF_OK;
AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest);
errRet = AMFVariantClear(pDest);
errRet = AMFVariantInit(pDest);
if(errRet == AMF_OK)
{
pDest->type = AMF_VARIANT_SIZE;
@@ -1773,7 +1776,7 @@ namespace amf
AMF_RESULT errRet = AMF_OK;
AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest);
errRet = AMFVariantClear(pDest);
errRet = AMFVariantInit(pDest);
if(errRet == AMF_OK)
{
pDest->type = AMF_VARIANT_POINT;
@@ -1787,7 +1790,7 @@ namespace amf
AMF_RESULT errRet = AMF_OK;
AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest);
errRet = AMFVariantClear(pDest);
errRet = AMFVariantInit(pDest);
if (errRet == AMF_OK)
{
pDest->type = AMF_VARIANT_FLOAT_SIZE;
@@ -1801,7 +1804,7 @@ namespace amf
AMF_RESULT errRet = AMF_OK;
AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest);
errRet = AMFVariantClear(pDest);
errRet = AMFVariantInit(pDest);
if (errRet == AMF_OK)
{
pDest->type = AMF_VARIANT_FLOAT_POINT2D;
@@ -1815,7 +1818,7 @@ namespace amf
AMF_RESULT errRet = AMF_OK;
AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest);
errRet = AMFVariantClear(pDest);
errRet = AMFVariantInit(pDest);
if (errRet == AMF_OK)
{
pDest->type = AMF_VARIANT_FLOAT_POINT3D;
@@ -1829,7 +1832,7 @@ namespace amf
AMF_RESULT errRet = AMF_OK;
AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest);
errRet = AMFVariantClear(pDest);
errRet = AMFVariantInit(pDest);
if (errRet == AMF_OK)
{
pDest->type = AMF_VARIANT_FLOAT_VECTOR4D;
@@ -1850,7 +1853,7 @@ namespace amf
AMF_RESULT errRet = AMF_OK;
AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest);
errRet = AMFVariantClear(pDest);
errRet = AMFVariantInit(pDest);
if(errRet == AMF_OK)
{
pDest->type = AMF_VARIANT_RATE;
@@ -1871,7 +1874,7 @@ namespace amf
AMF_RESULT errRet = AMF_OK;
AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest);
errRet = AMFVariantClear(pDest);
errRet = AMFVariantInit(pDest);
if(errRet == AMF_OK)
{
pDest->type = AMF_VARIANT_RATIO;
@@ -1892,7 +1895,7 @@ namespace amf
AMF_RESULT errRet = AMF_OK;
AMF_VARIANT_RETURN_IF_INVALID_POINTER(pDest);
errRet = AMFVariantClear(pDest);
errRet = AMFVariantInit(pDest);
if(errRet == AMF_OK)
{
pDest->type = AMF_VARIANT_COLOR;
@@ -1980,6 +1983,7 @@ namespace amf
//-------------------------------------------------------------------------------------------------
AMF_INLINE AMFVariant& AMFVariant::operator=(const AMFVariantStruct& other)
{
AMFVariantClear(this);
AMFVariantCopy(this, const_cast<AMFVariantStruct*>(&other));
return *this;
}
@@ -1988,6 +1992,7 @@ namespace amf
{
if(pOther != NULL)
{
AMFVariantClear(this);
AMFVariantCopy(this, const_cast<AMFVariantStruct*>(pOther));
}
return *this;
@@ -1995,6 +2000,7 @@ namespace amf
//-------------------------------------------------------------------------------------------------
AMF_INLINE AMFVariant& AMFVariant::operator=(const AMFVariant& other)
{
AMFVariantClear(this);
AMFVariantCopy(this,
const_cast<AMFVariantStruct*>(static_cast<const AMFVariantStruct*>(&other)));
return *this;
@@ -2003,6 +2009,7 @@ namespace amf
template<typename T>
AMFVariant& AMFVariant::operator=(const AMFInterfacePtr_T<T>& value)
{
AMFVariantClear(this);
AMFVariantAssignInterface(this, value);
return *this;
}
+10 -7
View File
@@ -52,9 +52,9 @@ namespace amf
typedef struct AMFVulkanSync
{
amf_size cbSizeof; // sizeof(AMFVulkanSemaphore)
amf_size cbSizeof; // sizeof(AMFVulkanSync)
void* pNext; // reserved for extensions
VkSemaphore hSemaphore;
VkSemaphore hSemaphore; // VkSemaphore; can be nullptr
bool bSubmitted; // if true - wait for hSemaphore. re-submit hSemaphore if not synced by other ways and set to true
VkFence hFence; // To sync on CPU; can be nullptr. Submitted in vkQueueSubmit. If waited for hFence, null it, do not delete or reset.
} AMFVulkanSync;
@@ -78,12 +78,12 @@ namespace amf
amf_size cbSizeof; // sizeof(AMFVulkanSurface)
void* pNext; // reserved for extensions
// surface properties
VkImage hImage;
VkDeviceMemory hMemory;
VkImage hImage; // vulkan native image for which the surface is created
VkDeviceMemory hMemory; // memory for hImage, can be nullptr
amf_int64 iSize; // memory size
amf_uint32 eFormat; // VkFormat
amf_int32 iWidth;
amf_int32 iHeight;
amf_int32 iWidth; // image width
amf_int32 iHeight; // image height
amf_uint32 eCurrentLayout; // VkImageLayout
amf_uint32 eUsage; // AMF_SURFACE_USAGE
amf_uint32 eAccess; // AMF_MEMORY_CPU_ACCESS
@@ -92,7 +92,7 @@ namespace amf
typedef struct AMFVulkanView
{
amf_size cbSizeof; // sizeof(AMFVulkanSurface)
amf_size cbSizeof; // sizeof(AMFVulkanView)
void* pNext; // reserved for extensions
// surface properties
AMFVulkanSurface *pSurface;
@@ -102,6 +102,9 @@ namespace amf
amf_int32 iPlaneWidthPitch;
amf_int32 iPlaneHeightPitch;
} AMFVulkanView;
#define AMF_CONTEXT_VULKAN_COMPUTE_QUEUE L"VulkanComputeQueue" // amf_int64; default=0; Compute queue index in range [0, (VkQueueFamilyProperties.queueCount-1)] of the compute queue family.
#if defined(__cplusplus)
} // namespace amf
#endif