Skip to content

Commit 03e2731

Browse files
committed
Promote to AMF Version 1.4.18
1 parent 802f92e commit 03e2731

File tree

244 files changed

+40989
-4366
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

244 files changed

+40989
-4366
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ AMF is a light-weight, portable multimedia framework that abstracts away most of
99
### Prerequisites
1010
* Windows® 7 (SP1 with the [Platform Update](https://msdn.microsoft.com/en-us/library/windows/desktop/jj863687.aspx)), Windows® 8.1, or Windows® 10
1111
* Visual Studio® 2017 or Visual Studio® 2019
12-
* Version 1.4.16: AMD Radeon Software Adrenalin Edition 20.2.1 or newer. Added the Pre-Analysis component to improve perceptual quality of encoded video.
12+
* Version 1.4.18: AMD Radeon Software Adrenalin Edition 20.11.2 or newer. Added the Pre-Analysis component to improve perceptual quality of encoded video.
1313
* Version 1.4.9 or later requires Vulkan SDK for some samples: https://vulkan.lunarg.com/ and AMD Radeon Software Adrenalin Edition 18.8.1 (18.30.01.01) or newer. This version supports Linux (see amd.com for driver support)
1414
* Version 1.4.4 or later requires OCL_SDK_Light: https://github.com/GPUOpen-LibrariesAndSDKs/OCL-SDK/releases. Previous versions of AMF require the AMD APP SDK (Version 3.0 or later), Windows 10 SDK (Version 10586). This version requires AMD Radeon Software Crimson Edition 17.7.2 (17.30.1041) or newer
1515
* Version 1.4: AMD Radeon Software Crimson Edition 17.1.1 (16.50.2611) or newer
-496 KB
Binary file not shown.

amf/doc/AMF_Video_Decode_API.pdf

594 KB
Binary file not shown.

amf/doc/AMF_Video_Encode_API.pdf

12 KB
Binary file not shown.
12.2 KB
Binary file not shown.
-297 KB
Binary file not shown.

amf/doc/README.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# Advanced Media Framework (AMF) SDK
2+
3+
AMF is a light-weight, portable multimedia framework that abstracts away most of the platform and API-specific details and allows for easy implementation of multimedia applications using a variety of technologies, such as DirectX 11, OpenGL, and OpenCL and facilitates an efficient interop between them.
4+
5+
<div>
6+
<a href="https://github.com/GPUOpen-LibrariesAndSDKs/AMF/releases/latest/"><img src="http://gpuopen-librariesandsdks.github.io/media/latest-release-button.svg" alt="Latest release" title="Latest release"></a>
7+
</div>
8+
9+
### Prerequisites
10+
* Windows&reg; 7 (SP1 with the [Platform Update](https://msdn.microsoft.com/en-us/library/windows/desktop/jj863687.aspx)), Windows&reg; 8.1, or Windows&reg; 10
11+
* Visual Studio&reg; 2017 or Visual Studio&reg; 2019
12+
* Version 1.4.14: AMD Radeon Software Adrenalin Edition 19.7.1 or newer
13+
* Version 1.4.9 or later requires Vulkan SDK for some samples: https://vulkan.lunarg.com/ and AMD Radeon Software Adrenalin Edition 18.8.1 (18.30.01.01) or newer. This version supports Linux (see amd.com for driver support)
14+
* Version 1.4.4 or later requires OCL_SDK_Light: https://github.com/GPUOpen-LibrariesAndSDKs/OCL-SDK/releases. Previous versions of AMF require the AMD APP SDK (Version 3.0 or later), Windows 10 SDK (Version 10586). This version requires AMD Radeon Software Crimson Edition 17.7.2 (17.30.1041) or newer
15+
* Version 1.4: AMD Radeon Software Crimson Edition 17.1.1 (16.50.2611) or newer
16+
* Version 1.3: AMD Radeon Software Crimson Edition 16.7.3 (16.30.2311) or newer
17+
18+
19+
The AMF framework is compatible with most recent Radeon GPUs starting with the Southern Islands family and APUs of the Kabini, Kaveri, Carrizo families and newer.
20+
21+
### Getting Started
22+
* Visual Studio solutions can be found in the `amf\public\samples` directory.
23+
* Additional documentation can be found in the `amf\doc` directory.
24+
* To build samples on Linux use 'makefile' in `amf\public\samples`
25+
26+
### Third-Party Software
27+
* FFmpeg is distributed under the terms of the LGPLv2.1.
28+
29+
### Attribution
30+
* AMD, the AMD Arrow logo, Radeon, and combinations thereof are either registered trademarks or trademarks of Advanced Micro Devices, Inc. in the United States and/or other countries.
31+
* Microsoft, DirectX, Visual Studio, and Windows are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries.
32+
* OpenGL and the oval logo are trademarks or registered trademarks of Silicon Graphics, Inc. in the United States and/or other countries worldwide.
33+
* OpenCL and the OpenCL logo are trademarks of Apple Inc. used by permission by Khronos.
34+
* Vulkan and the Vulkan logo are registered trademarks of the Khronos Group Inc.

amf/doc/Readme.txt

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,21 @@
2727
// THE SOFTWARE.
2828
//
2929

30-
New features are available in Driver: Radeon Software Adrenalin 2019 Edition; 20.2.1 Software: 19.50.19.01 and later
30+
New features are available in
31+
Driver: Radeon Software Adrenalin 2019 Edition; 19.7.1 Software: 19.30 and later
3132

32-
1.4.16.0 (04.02.2020) version
33+
1.4.18.0 (16.09.2020) version
3334
--------------------------
34-
- Added encode pre-analysis component to improve perceived quality of encoded video
35+
- AV1 decoding
36+
- VP9 decoding
37+
- DX12 decoding and color conversion
38+
- Pre-analysis component (PA)
39+
- Pre-processing filter
40+
- Encoder: output timeout support, throughput information, picture management , statistic
3541

3642
1.4.14.0 (08.07.2019) version
3743
--------------------------
38-
- Support for RX5700 (Navi) GPUs
44+
- Support for RX5700 (Navi) GPUs
3945
- FFmpeg updated to version 4.1.3
4046
- Added sample projects for Visual Studio 2019
4147
- Dropped support for Visual Studio 2013 and 1015

amf/public/common/AMFFactory.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ class AMFFactoryHelper
5656
amf::AMFTrace* GetTrace();
5757

5858
amf_uint64 AMFQueryVersion();
59+
60+
amf_handle GetAMFDLLHandle() { return m_hDLLHandle; }
5961
protected:
6062
struct ComponentHolder
6163
{

amf/public/common/AMFMath.h

Lines changed: 55 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -585,6 +585,14 @@ namespace amf
585585
return *this;
586586
}
587587

588+
inline bool operator==(const Matrix& other) const
589+
{
590+
return memcmp(this, &other, sizeof(*this)) == 0;
591+
}
592+
inline bool operator!=(const Matrix& other) const
593+
{
594+
return memcmp(this, &other, sizeof(*this)) != 0;
595+
}
588596

589597
inline Vector operator*(const Vector& v)
590598
{
@@ -976,98 +984,56 @@ namespace amf
976984
inline Matrix Inverse(Vector *pDeterminant)
977985
{
978986

979-
Matrix MT = Transpose();
980-
981-
Vector V0[4], V1[4];
982-
V0[0] = Vector(MT.r[2].x, MT.r[2].x, MT.r[2].y, MT.r[2].y);
983-
V1[0] = Vector(MT.r[3].z, MT.r[3].w, MT.r[3].z, MT.r[3].w);
984-
V0[1] = Vector(MT.r[0].x, MT.r[0].x, MT.r[0].y, MT.r[0].y);
985-
V1[1] = Vector(MT.r[1].z, MT.r[1].w, MT.r[1].z, MT.r[1].w);
986-
V0[2] = MT.r[2].VectorPermute(MT.r[0], AMF_PERMUTE_0X, AMF_PERMUTE_0Z, AMF_PERMUTE_1X, AMF_PERMUTE_1Z);
987-
V1[2] = MT.r[3].VectorPermute(MT.r[1], AMF_PERMUTE_0Y, AMF_PERMUTE_0W, AMF_PERMUTE_1Y, AMF_PERMUTE_1W);
988-
989-
Vector D0 = V0[0] *V1[0];
990-
Vector D1 = V0[1] *V1[1];
991-
Vector D2 = V0[2] *V1[2];
992-
993-
V0[0] = Vector(MT.r[2].z, MT.r[2].w, MT.r[2].z, MT.r[2].w);
994-
V1[0] = Vector(MT.r[3].x, MT.r[3].x, MT.r[3].y, MT.r[3].y);
995-
V0[1] = Vector(MT.r[0].z, MT.r[0].w, MT.r[0].z, MT.r[0].w);
996-
V1[1] = Vector(MT.r[1].x, MT.r[1].x, MT.r[1].y, MT.r[1].y);
997-
V0[2] = MT.r[2].VectorPermute(MT.r[0], AMF_PERMUTE_0Y, AMF_PERMUTE_0W, AMF_PERMUTE_1Y, AMF_PERMUTE_1W);
998-
V1[2] = MT.r[3].VectorPermute(MT.r[1], AMF_PERMUTE_0X, AMF_PERMUTE_0Z, AMF_PERMUTE_1X, AMF_PERMUTE_1Z);
999-
1000-
D0 -= V0[0] * V1[0];
1001-
D1 -= V0[1] * V1[1];
1002-
D2 -= V0[2] * V1[2];
1003-
1004-
V0[0] = Vector(MT.r[1].y, MT.r[1].z, MT.r[1].x, MT.r[1].y);
1005-
V1[0] = D0.VectorPermute(D2, AMF_PERMUTE_1Y, AMF_PERMUTE_0Y, AMF_PERMUTE_0W, AMF_PERMUTE_0X);
1006-
V0[1] = Vector(MT.r[0].z, MT.r[0].z, MT.r[0].y, MT.r[0].x);
1007-
V1[1] = D0.VectorPermute(D2, AMF_PERMUTE_0W, AMF_PERMUTE_1Y, AMF_PERMUTE_0Y, AMF_PERMUTE_0Z);
1008-
V0[2] = Vector(MT.r[3].y, MT.r[3].z, MT.r[3].x, MT.r[3].y);
1009-
V1[2] = D1.VectorPermute(D2, AMF_PERMUTE_1W, AMF_PERMUTE_0Y, AMF_PERMUTE_0W, AMF_PERMUTE_0X);
1010-
V0[3] = Vector(MT.r[2].z, MT.r[2].x, MT.r[2].y, MT.r[2].x);
1011-
V1[3] = D1.VectorPermute(D2, AMF_PERMUTE_0W, AMF_PERMUTE_1W, AMF_PERMUTE_0Y, AMF_PERMUTE_0Z);
1012-
1013-
Vector C0 = V0[0] * V1[0];
1014-
Vector C2 = V0[1] * V1[1];
1015-
Vector C4 = V0[2] * V1[2];
1016-
Vector C6 = V0[3] * V1[3];
1017-
1018-
V0[0] = Vector(MT.r[1].z, MT.r[1].w, MT.r[1].y, MT.r[1].z);
1019-
V1[0] = D0.VectorPermute(D2, AMF_PERMUTE_0W, AMF_PERMUTE_0X, AMF_PERMUTE_0Y, AMF_PERMUTE_1X);
1020-
V0[1] = Vector(MT.r[0].w, MT.r[0].z, MT.r[0].w, MT.r[0].y);
1021-
V1[1] = D0.VectorPermute(D2, AMF_PERMUTE_0Z, AMF_PERMUTE_0Y, AMF_PERMUTE_1X, AMF_PERMUTE_0X);
1022-
V0[2] = Vector(MT.r[3].z, MT.r[3].w, MT.r[3].y, MT.r[3].z);
1023-
V1[2] = D1.VectorPermute(D2, AMF_PERMUTE_0W, AMF_PERMUTE_0X, AMF_PERMUTE_0Y, AMF_PERMUTE_1Z);
1024-
V0[3] = Vector(MT.r[2].w, MT.r[2].z, MT.r[2].w, MT.r[2].y);
1025-
V1[3] = D1.VectorPermute(D2, AMF_PERMUTE_0Z, AMF_PERMUTE_0Y, AMF_PERMUTE_1Z, AMF_PERMUTE_0X);
1026-
1027-
C0 -= V0[0] * V1[0];
1028-
C2 -= V0[1] * V1[1];
1029-
C4 -= V0[2] * V1[2];
1030-
C6 -= V0[3] * V1[3];
1031-
1032-
V0[0] = Vector(MT.r[1].w, MT.r[1].x, MT.r[1].w, MT.r[1].x);
1033-
V1[0] = D0.VectorPermute(D2, AMF_PERMUTE_0Z, AMF_PERMUTE_1Y, AMF_PERMUTE_1X, AMF_PERMUTE_0Z);
1034-
V0[1] = Vector(MT.r[0].y, MT.r[0].w, MT.r[0].x, MT.r[0].z);
1035-
V1[1] = D0.VectorPermute(D2, AMF_PERMUTE_1Y, AMF_PERMUTE_0X, AMF_PERMUTE_0W, AMF_PERMUTE_1X);
1036-
V0[2] = Vector(MT.r[3].w, MT.r[3].x, MT.r[3].w, MT.r[3].x);
1037-
V1[2] = D1.VectorPermute(D2, AMF_PERMUTE_0Z, AMF_PERMUTE_1W, AMF_PERMUTE_1Z, AMF_PERMUTE_0Z);
1038-
V0[3] = Vector(MT.r[2].y, MT.r[2].w, MT.r[2].x, MT.r[2].z);
1039-
V1[3] = D1.VectorPermute(D2, AMF_PERMUTE_1W, AMF_PERMUTE_0X, AMF_PERMUTE_0W, AMF_PERMUTE_1Z);
1040-
1041-
Vector C1 = C0 - V0[0] * V1[0];
1042-
C0 += V0[0] * V1[0];
1043-
Vector C3 = C2 + V0[1] * V1[1];
1044-
C2 -= V0[1] * V1[1];
1045-
Vector C5 = C4 - V0[2] * V1[2];
1046-
C4 += V0[2] * V1[2];
1047-
Vector C7 = C6 + V0[3] * V1[3];
1048-
C6 -= V0[3] * V1[3];
1049-
1050-
Matrix R;
1051-
R.r[0] = Vector(C0.x, C1.y, C0.z, C1.w);
1052-
R.r[1] = Vector(C2.x, C3.y, C2.z, C3.w);
1053-
R.r[2] = Vector(C4.x, C5.y, C4.z, C5.w);
1054-
R.r[3] = Vector(C6.x, C7.y, C6.z, C7.w);
1055-
1056-
Vector Determinant = R.r[0].Dot4(MT.r[0]);
987+
float A2323 = m[2][2] * m[3][3] - m[2][3] * m[3][2];
988+
float A1323 = m[2][1] * m[3][3] - m[2][3] * m[3][1];
989+
float A1223 = m[2][1] * m[3][2] - m[2][2] * m[3][1];
990+
float A0323 = m[2][0] * m[3][3] - m[2][3] * m[3][0];
991+
float A0223 = m[2][0] * m[3][2] - m[2][2] * m[3][0];
992+
float A0123 = m[2][0] * m[3][1] - m[2][1] * m[3][0];
993+
float A2313 = m[1][2] * m[3][3] - m[1][3] * m[3][2];
994+
float A1313 = m[1][1] * m[3][3] - m[1][3] * m[3][1];
995+
float A1213 = m[1][1] * m[3][2] - m[1][2] * m[3][1];
996+
float A2312 = m[1][2] * m[2][3] - m[1][3] * m[2][2];
997+
float A1312 = m[1][1] * m[2][3] - m[1][3] * m[2][1];
998+
float A1212 = m[1][1] * m[2][2] - m[1][2] * m[2][1];
999+
float A0313 = m[1][0] * m[3][3] - m[1][3] * m[3][0];
1000+
float A0213 = m[1][0] * m[3][2] - m[1][2] * m[3][0];
1001+
float A0312 = m[1][0] * m[2][3] - m[1][3] * m[2][0];
1002+
float A0212 = m[1][0] * m[2][2] - m[1][2] * m[2][0];
1003+
float A0113 = m[1][0] * m[3][1] - m[1][1] * m[3][0];
1004+
float A0112 = m[1][0] * m[2][1] - m[1][1] * m[2][0];
1005+
1006+
float det =
1007+
m[0][0] * (m[1][1] * A2323 - m[1][2] * A1323 + m[1][3] * A1223)
1008+
- m[0][1] * (m[1][0] * A2323 - m[1][2] * A0323 + m[1][3] * A0223)
1009+
+ m[0][2] * (m[1][0] * A1323 - m[1][1] * A0323 + m[1][3] * A0123)
1010+
- m[0][3] * (m[1][0] * A1223 - m[1][1] * A0223 + m[1][2] * A0123);
1011+
det = 1.0f / det;
1012+
Matrix ret;
1013+
ret.m[0][0] = det * (m[1][1] * A2323 - m[1][2] * A1323 + m[1][3] * A1223);
1014+
ret.m[0][1] = det * -(m[0][1] * A2323 - m[0][2] * A1323 + m[0][3] * A1223);
1015+
ret.m[0][2] = det * (m[0][1] * A2313 - m[0][2] * A1313 + m[0][3] * A1213);
1016+
ret.m[0][3] = det * -(m[0][1] * A2312 - m[0][2] * A1312 + m[0][3] * A1212);
1017+
ret.m[1][0] = det * -(m[1][0] * A2323 - m[1][2] * A0323 + m[1][3] * A0223);
1018+
ret.m[1][1] = det * (m[0][0] * A2323 - m[0][2] * A0323 + m[0][3] * A0223);
1019+
ret.m[1][2] = det * -(m[0][0] * A2313 - m[0][2] * A0313 + m[0][3] * A0213);
1020+
ret.m[1][3] = det * (m[0][0] * A2312 - m[0][2] * A0312 + m[0][3] * A0212);
1021+
ret.m[2][0] = det * (m[1][0] * A1323 - m[1][1] * A0323 + m[1][3] * A0123);
1022+
ret.m[2][1] = det * -(m[0][0] * A1323 - m[0][1] * A0323 + m[0][3] * A0123);
1023+
ret.m[2][2] = det * (m[0][0] * A1313 - m[0][1] * A0313 + m[0][3] * A0113);
1024+
ret.m[2][3] = det * -(m[0][0] * A1312 - m[0][1] * A0312 + m[0][3] * A0112);
1025+
ret.m[3][0] = det * -(m[1][0] * A1223 - m[1][1] * A0223 + m[1][2] * A0123);
1026+
ret.m[3][1] = det * (m[0][0] * A1223 - m[0][1] * A0223 + m[0][2] * A0123);
1027+
ret.m[3][2] = det * -(m[0][0] * A1213 - m[0][1] * A0213 + m[0][2] * A0113);
1028+
ret.m[3][3] = det * (m[0][0] * A1212 - m[0][1] * A0212 + m[0][2] * A0112);
10571029

10581030
if (pDeterminant != nullptr)
1059-
*pDeterminant = Determinant;
1060-
1061-
Vector Reciprocal = Determinant.Reciprocal();
1062-
1063-
Matrix Result;
1064-
Result.r[0] = R.r[0] * Reciprocal;
1065-
Result.r[1] = R.r[1] * Reciprocal;
1066-
Result.r[2] = R.r[2] * Reciprocal;
1067-
Result.r[3] = R.r[3] * Reciprocal;
1068-
return Result;
1069-
1031+
{
1032+
*pDeterminant = Vector(det,det,det,det);
1033+
}
1034+
return ret;
10701035
}
1036+
10711037
};
10721038

10731039
class Pose

0 commit comments

Comments
 (0)