SlideShare a Scribd company logo
1 of 37
Media SDK 1.1 
Mikhail Mironov 
AMD Media SDK Software Architect 
Oct 22, 2014
MEDIA SDK USE CASES 
Video Editing/Transcode Cloud Gaming Wireless Display 
Video Conferencing Remote Desktop Video Playback 
MEDIA SDK 1.1 AMF 2 WEBINAR | OCTOBER 22, 2014
MEDIA SDK – VALUE TO DEVELOPERS 
Use AMD’s differentiated multimedia IP 
• SW IP : GPU optimized video pre/post processing 
• HW IP : VCE video encoder 
• HW IP: UVD – video decoder 
• HW IP : AMF-DEM library in latency sensitive applications like 
wireless display and remote desktop 
Optimal use of Heterogeneous Compute in Multimedia Apps 
• DX to OpenCL inter-op 
• SDK samples show developers how to build optimal video 
processing pipelines 
Developer Friendly 
• Support for industry standard MFT APIs 
• AMF - OS and framework agnostic C++ APIs 
• Next – VAAPI support for Linux media developers 
MEDIA SDK 1.1 AMF 3 WEBINAR | OCTOBER 22, 2014
MEDIA SDK SUMMARY 
 MFTs for leveraging Media HW accelerator blocks for video 
encoding/decoding 
 Video Quality MFT for video pre/post processing 
 AMF: C++ API for media processing 
 Support for Windows 7/8.1 
MEDIA SDK 1.1 AMF 4 WEBINAR | OCTOBER 22, 2014
MEDIA FOUNDATION COMPONENTS (MFTS) 
 Access Video Compression Engine (VCE) for video 
encoding 
 Access Universal Video Decoder (UVD) for video 
decoding 
 Use GPU compute shaders for video processing 
 Released with Media SDK 1.0 
MEDIA SDK 1.1 AMF 5 WEBINAR | OCTOBER 22, 2014
AMD MEDIA FRAMEWORK (AMF) 
 C++ API and framework for media processing on AMD platforms 
 OS agnostic : Initial support on Windows (Desktop and Windows Store) but 
can be easily ported to other OSes 
 Can be easily adapted to multimedia framework of choice – MFT, Gstreamer, 
OpenMAX … 
 Accept input from and provide inter-op with DirectX, OpenCL and OpenGL 
 Replacement for OpenVideo 
 Targeted for Media SDKv1.1 
MEDIA SDK 1.1 AMF 6 WEBINAR | OCTOBER 22, 2014
MEDIA SDK SOFTWARE STACK 
AMD 
Frameworks 
MEDIA SDK 1.1 AMF 7 WEBINAR | OCTOBER 22, 2014 
Applications 
OMX MFT 
AMD Media Framework (AMF) (C++) 
Drivers 
AMD HW (UVD, VCE, GPU) 
MFT 
DirectX 
OpenCL OpenGL 
ISV 
ISV 
Native C/C++ 
ISV 
Decoder Converter Processor Encoder 
DEM Encoder 
AMD 
AMD 
AMD 
AMD AMD AMD 
AMD
A10-7XXX 
A10-Micro 6XXX 
AMD Radeon™ 
R9 290 
MEDIA SDK 1.1 AMF 8 WEBINAR | OCTOBER 22, 2014 
MEDIA SDK ROADMAP 
Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 
2014 
Media SDKv1.0: 
- Video Quality MFT 
for video processing 
- AMF-DEM library 
for low latency apps 
- Windows 8/8.1 
Store Support 
2015 
Media 
SDK v1.0 
GA 
Media SDKv1.1: 
- AMF for video 
- encoding 
- decoding 
- Cloud Gaming 
/VDI support 
Planned 
In 
Planning 
AMD Radeon™ 
R9 285 
Media 
SDKv2.0 
Media 
SDK v1.1 
Beta 
Media 
SDK v1.1 
GA 
Media SDKv2.0: 
- Video Processor 
- Linux support 
- VAAPI & AMF 
- Open & closed 
source Linux driver 
Now 
2016 
Aug Dec 
Media 
SDKv3.0 
Media SDKv3.0: 
- Android support 
- Audio support 
- Camera support 
- File containers (mux, 
demux) 
 
AMF 
architecture
AMF COMPONENTS 
 Full Decoder: 
‒ UVD - H264 AVC, H264 VC1, WMV9, MPEG2, MPEG4 P2, H264 MVC, MJPEG, H265 HEVC 
‒ Shader based MJPEG for legacy hardware 
 Encoder: VCE: H264 AVC, SVC 
 Video Converter (Shader based) 
‒ Color Space Conversion, Scale, Composition 
 Video Processor (Shader based) 
‒ Steady Video, Color Space Conversion, Scaling, Brightness, Contrast, Saturation, Tint, 
Vibrancy, Skin Tone Correction, Gamma, Brighter Whites, De-interlacing, Super 
Resolution, Dynamic Contrast, Dynamic Range, Edge Enhancement, De-noise, Mosquito 
Noise Reduction, False Contour Reduction, De-blocking, Demo Mode, FRC 
 AMF DEM Screen capture encoder (VCE) 
‒ Desktop only 
 Capability Manager 
MEDIA SDK 1.1 AMF 10 WEBINAR | OCTOBER 22, 2014
AMF ARCHITECTURE - BASICS 
 Elementary data types 
All elementary data types are defined to make code portable to other OSs. Examples: 
typedef __int64 amf_int64; 
typedef __int32 amf_int32; 
typedef size_t amf_size; 
typedef void* amf_handle; 
 C++ interfaces 
Interfaces are implemented in the form of abstract (pure) C++ classes. Each interface is 
derived from the AMFInterface basic interface. It exposes methods for reference 
counting and querying for other interfaces : 
class AMFInterface 
{ 
public: 
virtual amf_long AMF_STD_CALL Acquire()=0; 
virtual amf_long AMF_STD_CALL Release()=0; 
virtual AMF_RESULT AMF_STD_CALL QueryInterface(const AMFGuid& 
interfaceID, void** ppInterface) = 0; 
}; 
MEDIA SDK 1.1 AMF 11 WEBINAR | OCTOBER 22, 2014
AMF ARCHITECTURE – INTERFACE DIAGRAM 
MEDIA SDK 1.1 AMF 12 WEBINAR | OCTOBER 22, 2014 
AMFInterface 
AMFPropertyStorage 
AMFData AMFProperySorageEx 
AMFSurface AMFBuffer AMFComponent 
AMFContext 
AMFPlane 
1 
1..* 
Component 
Surface
AMF ARCHITECTURE – PROPERTY STORAGE INTERFACE 
 AMFPropertyStorage implements a property map between a string ID and an AMFVariantStruct 
structure. There is a set of helper classes and template functions to safely manipulate 
AMFVariantStruct in C++. 
class AMFPropertyStorage : virtual public AMFInterface 
{ 
public: 
virtual AMF_RESULT SetProperty(const wchar_t *pName, AMFVariantStruct 
value)=0; 
virtual AMF_RESULT GetProperty(const wchar_t *pName, AMFVariantStruct* 
pValue)=0; 
virtual bool HasProperty(const wchar_t *pName)=0; 
virtual amf_int32 GetPropertyCount() const = 0; 
virtual AMF_RESULT GetPropertyAt(amf_int32 index, wchar_t* name, amf_size 
nameSize, AMFVariantStruct* pValue) const = 0; 
virtual AMF_RESULT Clear()=0; 
virtual AMF_RESULT AddTo(AMFPropertyStorage *dest, bool bOverwrite, bool 
bDeep)=0; 
virtual AMF_RESULT CopyTo(AMFPropertyStorage *dest, bool bDeep)=0; 
template<typename _T> 
AMF_RESULT SetProperty(const wchar_t *pName, const _T& value); 
template<typename _T> 
AMF_RESULT GetProperty(const wchar_t *pName, _T* pValue); 
}; 
MEDIA SDK 1.1 AMF 13 WEBINAR | OCTOBER 22, 2014
AMF ARCHITECTURE – PROPERTY STORAGE EX INTERFACE 
AMFPropertyStorageEx adds property description and validation features to 
AMFPropertyStorage. 
class AMFPropertyStorageEx : virtual public AMFPropertyStorage 
{ 
public: 
virtual amf_size GetPropertiesInfoCount() = 0; 
virtual AMF_RESULT GetPropertyInfo(amf_size szInd,const AMFPropertyInfo** 
pInfo) = 0; 
virtual AMF_RESULT GetPropertyInfo(const wchar_t *pName,const 
AMFPropertyInfo** pInfo)=0; 
virtual AMF_RESULT ValidateProperty(const wchar_t *pName, AMFVariantStruct 
val, AMFVariantStruct* outValidated) = 0; 
}; 
MEDIA SDK 1.1 AMF 14 WEBINAR | OCTOBER 22, 2014
AMF ARCHITECTURE - MEMORY 
 Memory 
AMF provides two types of memory objects: AMFBuffer and AMFSurface. Each object 
implements the AMFData common base interface. Each object is allocated via factory 
methods in the AMFContext interface. In addition, the AMFContext interface provides 
methods to create AMFBuffer or AMFSurface wrapping existing memory objects from 
various APIs: 
• DX9 surfaces (Win Desktop only) 
• DX11 Textures (Win Store and Win Desktop) 
• OpenCL 2D images and buffers (Win Desktop only) 
• OpenGL textures (Win Desktop only) 
• Host memory 
 GetNative() 
AMFPlane and AMFBuffer interfaces provide the GetNative() method. It allows to 
access the underlying memory object allocated by one of the technologies listed 
above. This method always return pointer to void. This call does not change the 
reference count of reference-counted objects (derived from the IUnknown interface or 
OCL’s memobj) 
 Thread safety 
All memory objects in AMF are not thread-safe (except AMF reference counting). It is 
assumed that any memory object is used by only one component at a time. 
MEDIA SDK 1.1 AMF 15 WEBINAR | OCTOBER 22, 2014
AMF ARCHITECTURE – DATA INTERFACE 
The AMFData interface is a base interface for the AMBuffer and AMFSurface 
interfaces. It is responsible for storing common properties of the video or audio data 
objects (presentation time, duration, type, etc). The AMFData interface is also 
responsible for memory type storage and memory conversion: 
class AMFData : virtual public AMFPropertyStorage 
{ 
public: 
virtual AMF_MEMORY_TYPE GetMemoryType()=0; 
virtual AMF_RESULT Duplicate(AMF_MEMORY_TYPE eMemType,AMFData 
**ppData)=0; 
virtual AMF_ERROR Convert(AMF_MEMORY_TYPE eMemType)=0; 
virtual AMF_DATA_TYPE GetDataType()=0; 
virtual void SetPts(amf_pts pts)=0; 
virtual amf_pts GetPts()=0; 
virtual void SetDuration(amf_pts duration)=0; 
virtual amf_pts GetDuration()=0; 
}; 
MEDIA SDK 1.1 AMF 16 WEBINAR | OCTOBER 22, 2014
AMF ARCHITECTURE – BUFFER INTERFACE 
The AMFBuffer interface provides access to an unordered memory buffer. 
class AMFBuffer : virtual public AMFData 
{ 
public: 
virtual amf_size GetSize()=0; 
virtual void* GetNative()=0; 
virtual void AddObserver( AMFBufferObserver* pObserver) = 0; 
virtual void RemoveObserver( AMFBufferObserver* pObserver) = 0; 
}; 
MEDIA SDK 1.1 AMF 17 WEBINAR | OCTOBER 22, 2014
AMF ARCHITECTURE – SURFACE INTERFACE 
The AMFSurface interface represents a video frame and consists of a collection of 
planes. It also holds the type of the frame: progressive, interlaced, stereoscopic, etc. 
class AMFSurface : virtual public AMFData 
{ 
public: 
virtual AMF_SURFACE_FORMAT GetFormat() = 0; 
virtual amf_size GetPlanesCount() = 0; 
virtual AMFPlane* GetPlaneAt(amf_size index) = 0; 
virtual AMFPlane* GetPlane(AMF_PLANE_TYPE type) = 0; 
virtual AMF_FRAME_TYPE GetFrameType() = 0; 
virtual void SetFrameType(AMF_FRAME_TYPE type) = 0; 
virtual void AddObserver(AMFSurfaceObserver* pObserver) = 0; 
virtual void RemoveObserver(AMFSurfaceObserver* pObserver) = 0; 
}; 
MEDIA SDK 1.1 AMF 18 WEBINAR | OCTOBER 22, 2014
AMF ARCHITECTURE – PLANE INTERFACE 
The AMFPlane interface represents a single two-dimensional plane of a multi-plane 
image format or the whole image for packed image format 
class AMFPlane : virtual public AMFInterface 
{ 
public: 
virtual AMF_PLANE_TYPE GetType() = 0; 
virtual void* GetNative() = 0; 
virtual amf_int32 GetPixelSizeInBytes() = 0; 
virtual amf_int32 GetOffsetX() = 0; 
virtual amf_int32 GetOffsetY() = 0; 
virtual amf_int32 GetWidth() = 0; 
virtual amf_int32 GetHeight() = 0; 
virtual amf_int32 GetHPitch() = 0; 
virtual amf_int32 GetVPitch() = 0; 
}; 
MEDIA SDK 1.1 AMF 19 WEBINAR | OCTOBER 22, 2014
AMF ARCHITECTURE – CONTEXT INTERFACE - DIRECTX 
The AMFContext interface is responsible for initializing and storing device-specific 
data. 
class AMFContext : virtual public AMFPropertyStorage 
{ 
virtual AMF_RESULT AMF_STD_CALL Terminate() = 0; 
virtual AMF_RESULT InitDX9(void* pDX9Device) = 0; 
virtual void* GetDX9Device(AMF_DX_VERSION dxVersionRequired = 
AMF_DX9) = 0; 
virtual AMF_RESULT LockDX9() = 0; 
virtual AMF_RESULT UnlockDX9() = 0; 
virtual AMF_RESULT InitDX11(void* pDX11Device, AMF_DX_VERSION 
dxVersionRequired = AMF_DX11_0) = 0; 
virtual void* GetDX11Device(AMF_DX_VERSION dxVersionRequired = 
AMF_DX11_0) = 0; 
virtual AMF_RESULT LockDX11() = 0; 
virtual AMF_RESULT UnlockDX11() = 0; 
MEDIA SDK 1.1 AMF 20 WEBINAR | OCTOBER 22, 2014
AMF ARCHITECTURE – CONTEXT INTERFACE – OCL, OGL 
Context interface is responsible for initializing and storing API-specific data (OGL 
devices, OCL contexts). 
virtual AMF_RESULT InitOpenCL(void* pCommandQueue = NULL) = 0; 
virtual void* GetOpenCLContext() = 0; 
virtual void* GetOpenCLCommandQueue() = 0; 
virtual void* GetOpenCLDeviceID() = 0; 
virtual AMF_RESULT LockOpenCL() = 0; 
virtual AMF_RESULT UnlockOpenCL() = 0; 
virtual AMF_RESULT InitOpenGL(amf_handle hOpenGLContext, amf_handle 
hWindow, amf_handle hDC) = 0; 
virtual amf_handle GetOpenGLContext() = 0; 
virtual amf_handle GetOpenGLDrawable() = 0; 
virtual AMF_RESULT LockOpenGL() = 0; 
virtual AMF_RESULT UnlockOpenGL() = 0; 
MEDIA SDK 1.1 AMF 21 WEBINAR | OCTOBER 22, 2014
AMF ARCHITECTURE – CONTEXT INTERFACE - ALLOCATION 
 The AMFContext interface allows to allocate buffers and surfaces of a particular 
memory type. The released objects are internally cached for future reuse. 
virtual AMF_RESULT AllocBuffer(AMF_MEMORY_TYPE type, amf_size size, 
AMFBuffer** ppBuffer) = 0; 
virtual AMF_RESULT AllocSurface(AMF_MEMORY_TYPE type, AMF_SURFACE_FORMAT 
format, amf_int32 width, amf_int32 height, AMFSurface** ppSurface) = 0; 
MEDIA SDK 1.1 AMF 22 WEBINAR | OCTOBER 22, 2014
AMF ARCHITECTURE – CONTEXT INTERFACE - WRAPPING 
 The AMFContext interface allows to temporarily wrap an external memory 
object(DX, OpenCL, OpenGL or Host memory) into an AMF surface or buffer object. 
AMF allows to set an optional callback to track the release of AMF objects. 
virtual AMF_RESULT CreateBufferFromHostNative(void* pHostBuffer, 
amf_size size, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver) = 0; 
virtual AMF_RESULT CreateSurfaceFromHostNative(AMF_SURFACE_FORMAT 
format,amf_int32 width, amf_int32 height, amf_int32 hPitch, amf_int32 
vPitch, void* pData, AMFSurface** ppSurface, AMFSurfaceObserver* 
pObserver) = 0; 
virtual AMF_RESULT CreateSurfaceFromDX9Native(void* pDX9Surface, 
AMFSurface** ppSurface, AMFSurfaceObserver* pObserver) = 0; 
virtual AMF_RESULT CreateSurfaceFromDX11Native(void* pDX11Surface, 
AMFSurface** ppSurface, AMFSurfaceObserver* pObserver) = 0; 
virtual AMF_RESULT CreateSurfaceFromOpenGLNative( AMF_SURFACE_FORMAT 
format, amf_handle hGLTextureID, AMFSurface** ppSurface, 
AMFSurfaceObserver* pObserver) = 0; 
}; 
MEDIA SDK 1.1 AMF 23 WEBINAR | OCTOBER 22, 2014
AMF ARCHITECTURE – COMPONENT INTERFACE 
Each component implements a common AMFComponent interface. The AMFComponent interface is 
derived from AMFPropertyStorageEx and exposes a number of properties for the application to 
discover and manipulate. 
class AMFComponent : virtual public AMFPropertyStorageEx 
{ 
public: 
virtual AMF_RESULT Init(AMF_SURFACE_FORMAT format,amf_int32 
width,amf_int32 height) = 0; 
virtual AMF_RESULT ReInit(amf_int32 width,amf_int32 height) = 0; 
virtual AMF_RESULT Terminate() = 0; 
virtual AMF_RESULT Drain() = 0; 
virtual AMF_RESULT Flush() = 0; 
virtual AMF_RESULT SubmitInput(AMFData* pData) = 0; 
virtual AMF_RESULT QueryOutput(AMFData** ppData) = 0; 
virtual AMFContext* GetContext() = 0; 
virtual AMF_RESULT SetOutputDataAllocatorCB(AMFDataAllocatorCB* callback) 
= 0; 
}; 
MEDIA SDK 1.1 AMF 24 WEBINAR | OCTOBER 22, 2014
AMF TYPICAL WORKFLOW 
Create 
context 
MEDIA SDK 1.1 AMF 25 WEBINAR | OCTOBER 22, 2014 
Create DX11 
Device 
Set device 
to context 
Create 
Component 
Set Properties 
on component 
Initiate 
component 
Allocate 
input buffer 
Fill 
input buffer 
Submit 
Input 
Query 
Output 
Drain 
Query 
Output 
Terminate 
Component 
Terminate 
Context
Encoder 
Sample
Init 
MEDIA SDK 1.1 AMF 27 WEBINAR | OCTOBER 22, 2014 
Thread 1 
AMF ONE-THREAD MODEL 
Is EOF? 
No 
Prepare Input 
object 
Submit input 
Drain 
Terminate 
Query Output 
Have Data? 
Process Data 
No 
Is EOF? 
Start 
End 
Yes 
Yes 
Yes No
ENCODER SAMPLE - STATIC PARAMETERS 
#include <d3d9.h> 
#include <d3d11.h> 
#include "../../../include/components/VideoEncoderVCE.h" 
static amf::AMF_MEMORY_TYPE memoryTypeIn = amf::AMF_MEMORY_DX9; 
static amf::AMF_SURFACE_FORMAT formatIn = amf::AMF_SURFACE_NV12; 
static amf_int32 widthIn = 1920; 
static amf_int32 heightIn = 1080; 
static amf_int32 frameRateIn = 30; 
static amf_int64 bitRateIn = 1000000L; // in bits, 1MB 
static amf_int32 rectSize = 50; 
static amf_int32 frameCount = 100; 
static wchar_t *fileNameOut = L"./output.h264"; 
static bool PollAndWrite(amf::AMFComponent *encoder, FILE *f, bool 
bDrain); 
static void FillSurface(amf::AMFContext *context, amf::AMFSurface 
*surface); 
MEDIA SDK 1.1 AMF 28 WEBINAR | OCTOBER 22, 2014 
Init
ENCODER SAMPLE - INITIALIZATION 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
AMF_RESULT res = AMF_OK; // error checking can be added later 
FILE *f = _wfopen(fileNameOut, L"wb"); // open output file 
// initialize AMF 
amf::AMFContextPtr context; 
res = AMFCreateContext(&context); 
if(memoryTypeIn == amf::AMF_MEMORY_DX9) 
{ 
res = context->InitDX9(NULL); // can be DX9 or DX9Ex device 
} 
if(memoryTypeIn == amf::AMF_MEMORY_DX11) 
{ 
res = context->InitDX11(NULL); // can be DX11 device 
} 
MEDIA SDK 1.1 AMF 29 WEBINAR | OCTOBER 22, 2014 
Init
ENCODER SAMPLE - ENCODER 
amf::AMFComponentPtr encoder; 
res = AMFCreateComponent(context, AMFVideoEncoderVCE_AVC, &encoder); 
res = encoder->SetProperty(AMF_VIDEO_ENCODER_USAGE, 
AMF_VIDEO_ENCODER_USAGE_TRANSCONDING); 
res = encoder->SetProperty(AMF_VIDEO_ENCODER_TARGET_BITRATE, bitRateIn); 
res = encoder->SetProperty(AMF_VIDEO_ENCODER_FRAMESIZE, 
::AMFConstructSize(widthIn, heightIn)); 
res = encoder->SetProperty(AMF_VIDEO_ENCODER_FRAMERATE, 
::AMFConstructRate(frameRateIn, 1)); 
res = encoder->Init(formatIn, widthIn, heightIn); 
amf::AMFSurfacePtr surfaceIn; 
// create input surface 
res = context->AllocSurface(memoryTypeIn, formatIn, widthIn, heightIn, 
&surfaceIn); 
MEDIA SDK 1.1 AMF 30 WEBINAR | OCTOBER 22, 2014 
Init
ENCODER SAMPLE - MAIN LOOP 
bool bFillSurface = true; 
amf_int32 submitted = 0; 
while(submitted < frameCount){ 
if(bFillSurface){ 
res = surfaceIn->Convert(memoryTypeIn); 
FillSurface(context, surfaceIn); 
} 
res = encoder->SubmitInput(surfaceIn); // encode 
if(res == AMF_INPUT_FULL){ // handle full queue 
bFillSurface = false; 
amf_sleep(1); // input queue is full: wait, poll and submit again 
}else{ 
bFillSurface = true; 
submitted++; 
} 
PollAndWrite(encoder, f, false); // poll and write all ready output 
} 
MEDIA SDK 1.1 AMF 31 WEBINAR | OCTOBER 22, 2014 
Prepare Input 
object 
Submit input
ENCODER SAMPLE - FILL SURFACE 
static void FillSurface(amf::AMFContext *context, amf::AMFSurface *surface) 
{ 
HRESULT hr = S_OK; 
// no reference counting - do not Release() 
IDirect3DDevice9 *deviceDX9 = (IDirect3DDevice9 *)context->GetDX9Device(); 
IDirect3DSurface9 *surfaceDX9= 
(IDirect3DSurface9*)surface->GetPlaneAt(0)->GetNative(); 
hr = deviceDX9->ColorFill(surfaceDX9, NULL, D3DCOLOR_XYUV (128, 0, 128)); 
} 
MEDIA SDK 1.1 AMF 32 WEBINAR | OCTOBER 22, 2014 
Prepare Input 
object
ENCODER SAMPLE - POLLING 
bool PollAndWrite(amf::AMFComponent *encoder, FILE *f, bool bDrain) 
{ 
while(true){ // get all ready buffers 
amf::AMFDataPtr data; 
res = encoder->QueryOutput(&data); 
if(res == AMF_EOF){return false;} // Drain complete 
if(data != NULL){ 
amf::AMFBufferPtr buffer(data); 
fwrite(buffer->GetNative(), 1, buffer->GetSize(), f); 
}else{ 
if(bDrain){ amf_sleep(1);} 
else { break; } 
} 
} 
return true; 
} 
MEDIA SDK 1.1 AMF 33 WEBINAR | OCTOBER 22, 2014 
Query Output 
Process Data
ENCODE SAMPLE - DRAIN & TERMINATE 
while(true){// Drain 
res = encoder->Drain(); 
if(res != AMF_INPUT_FULL){ // handle full queue 
break; 
} 
amf_sleep(1); // input queue is full: wait and try again 
PollAndWrite(encoder, f, false); 
} 
PollAndWrite(encoder, f, true); // poll and write the rest of output 
surfaceIn = NULL; 
encoder->Terminate(); 
encoder = NULL; 
context->Terminate(); 
context = NULL; 
fclose(f); 
return 0; 
} 
MEDIA SDK 1.1 AMF 34 WEBINAR | OCTOBER 22, 2014 
Drain 
Terminate
AMF TWO-THREAD MODEL 
Is EOF? 
MEDIA SDK 1.1 AMF 35 WEBINAR | OCTOBER 22, 2014 
Thread 2 
Polling 
Thread 1 
Submit 
Prepare Input 
object 
Submit input 
Drain 
Terminate 
Init 
Query Output 
Have Data? 
Process Data 
Is EOF? 
Thread Join 
Thread 2 Start 
Yes 
Yes 
No 
No 
Yes No
Q&A, REFERENCES 
 AMD Media SDK website for downloads: 
http://developer.amd.com/tools-and-sdks/media-sdk 
 Latest driver download: 
http://support.amd.com/en-us/download 
 Media SDK Forum: 
http://devgurus.amd.com/community/media-sdk 
 Speaker: Mikhail Mironov, AMD Media SDK Software Architect: 
mikhail.mironov@amd.com 
 Developer Central Webinar Replays: 
https://www.youtube.com/user/AMDDevCentral 
 AMD Developer Central on Twitter (@AMDDevCentral): 
https://twitter.com/AMDDevCentral 
 Subscribe to be notified of future Webinars: 
http://developer.amd.com/community/newsletter/subscribe/ 
MEDIA SDK 1.1 AMF 36 WEBINAR | OCTOBER 22, 2014
DISCLAIMER 
The information contained herein is for informational purposes only, and is subject to change without 
notice. While every precaution has been taken in the preparation of this document, it may contain 
technical inaccuracies, omissions and typographical errors, and AMD is under no obligation to update 
or otherwise correct this information. Advanced Micro Devices, Inc. makes no representations or 
warranties with respect to the accuracy or completeness of the contents of this document, and 
assumes no liability of any kind, including the implied warranties of noninfringement, merchantability 
or fitness for particular purposes, with respect to the operation or use of AMD hardware, software or 
other products described herein. No license, including implied or arising by estoppel, to any intellectual 
property rights is granted by this document. Terms and limitations applicable to the purchase or use of 
AMD’s products are as set forth in a signed agreement between the parties or in AMD's Standard 
Terms and Conditions of Sale. 
AMD, the AMD Arrow logo, and combinations thereof are trademarks of Advanced Micro Devices, Inc. 
Other product names used in this publication are for identification purposes only and may be 
trademarks of their respective companies. 
USE OF THIS PRODUCT IN ANY MANNER THAT COMPLIES WITH THE MPEG ACTUAL OR DE FACTO VIDEO AND/OR AUDIO STANDARDS IS EXPRESSLY 
PROHIBITED WITHOUT ALL NECESSARY LICENSES UNDER APPLICABLE PATENTS. SUCH LICENSES MAY BE ACQUIRED FROM VARIOUS THIRD PARTIES 
INCLUDING, BUT NOT LIMITED TO, IN THE MPEG PATENT PORTFOLIO, WHICH LICENSE IS AVAILABLE FROM MPEG LA, L.L.C., 6312 S. FIDDLERS GREEN 
CIRCLE, SUITE 400E, GREENWOOD VILLAGE, COLORADO 80111. 
Windows® is a registered trademark of Microsoft Corporation. DirectX ® is a registered trademark of Microsoft Corporation. OpenCL™ is a 
trademark of Apple Inc. used by permission by Khronos. Other names are for informational purposes only and may be trademarks of their 
respective owners. 
© 2014 Advanced Micro Devices, Inc. All rights reserved. 
MEDIA SDK 1.1 AMF 37 WEBINAR | OCTOBER 22, 2014

More Related Content

What's hot

TressFX The Fast and The Furry by Nicolas Thibieroz
TressFX The Fast and The Furry by Nicolas ThibierozTressFX The Fast and The Furry by Nicolas Thibieroz
TressFX The Fast and The Furry by Nicolas ThibierozAMD Developer Central
 
MM-4092, Optimizing FFMPEG and Handbrake Using OpenCL and Other AMD HW Capabi...
MM-4092, Optimizing FFMPEG and Handbrake Using OpenCL and Other AMD HW Capabi...MM-4092, Optimizing FFMPEG and Handbrake Using OpenCL and Other AMD HW Capabi...
MM-4092, Optimizing FFMPEG and Handbrake Using OpenCL and Other AMD HW Capabi...AMD Developer Central
 
HC-4021, Efficient scheduling of OpenMP and OpenCL™ workloads on Accelerated ...
HC-4021, Efficient scheduling of OpenMP and OpenCL™ workloads on Accelerated ...HC-4021, Efficient scheduling of OpenMP and OpenCL™ workloads on Accelerated ...
HC-4021, Efficient scheduling of OpenMP and OpenCL™ workloads on Accelerated ...AMD Developer Central
 
Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...
Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...
Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...AMD Developer Central
 
PT-4102, Simulation, Compilation and Debugging of OpenCL on the AMD Southern ...
PT-4102, Simulation, Compilation and Debugging of OpenCL on the AMD Southern ...PT-4102, Simulation, Compilation and Debugging of OpenCL on the AMD Southern ...
PT-4102, Simulation, Compilation and Debugging of OpenCL on the AMD Southern ...AMD Developer Central
 
GS-4150, Bullet 3 OpenCL Rigid Body Simulation, by Erwin Coumans
GS-4150, Bullet 3 OpenCL Rigid Body Simulation, by Erwin CoumansGS-4150, Bullet 3 OpenCL Rigid Body Simulation, by Erwin Coumans
GS-4150, Bullet 3 OpenCL Rigid Body Simulation, by Erwin CoumansAMD Developer Central
 
GS-4108, Direct Compute in Gaming, by Bill Bilodeau
GS-4108, Direct Compute in Gaming, by Bill BilodeauGS-4108, Direct Compute in Gaming, by Bill Bilodeau
GS-4108, Direct Compute in Gaming, by Bill BilodeauAMD Developer Central
 
PT-4142, Porting and Optimizing OpenMP applications to APU using CAPS tools, ...
PT-4142, Porting and Optimizing OpenMP applications to APU using CAPS tools, ...PT-4142, Porting and Optimizing OpenMP applications to APU using CAPS tools, ...
PT-4142, Porting and Optimizing OpenMP applications to APU using CAPS tools, ...AMD Developer Central
 
Computer Vision Powered by Heterogeneous System Architecture (HSA) by Dr. Ha...
Computer Vision Powered by Heterogeneous System Architecture (HSA) by  Dr. Ha...Computer Vision Powered by Heterogeneous System Architecture (HSA) by  Dr. Ha...
Computer Vision Powered by Heterogeneous System Architecture (HSA) by Dr. Ha...AMD Developer Central
 
GS-4106 The AMD GCN Architecture - A Crash Course, by Layla Mah
GS-4106 The AMD GCN Architecture - A Crash Course, by Layla MahGS-4106 The AMD GCN Architecture - A Crash Course, by Layla Mah
GS-4106 The AMD GCN Architecture - A Crash Course, by Layla MahAMD Developer Central
 
PL-4044, OpenACC on AMD APUs and GPUs with the PGI Accelerator Compilers, by ...
PL-4044, OpenACC on AMD APUs and GPUs with the PGI Accelerator Compilers, by ...PL-4044, OpenACC on AMD APUs and GPUs with the PGI Accelerator Compilers, by ...
PL-4044, OpenACC on AMD APUs and GPUs with the PGI Accelerator Compilers, by ...AMD Developer Central
 
Final lisa opening_keynote_draft_-_v12.1tb
Final lisa opening_keynote_draft_-_v12.1tbFinal lisa opening_keynote_draft_-_v12.1tb
Final lisa opening_keynote_draft_-_v12.1tbr Skip
 
PT-4053, Advanced OpenCL - Debugging and Profiling Using AMD CodeXL, by Uri S...
PT-4053, Advanced OpenCL - Debugging and Profiling Using AMD CodeXL, by Uri S...PT-4053, Advanced OpenCL - Debugging and Profiling Using AMD CodeXL, by Uri S...
PT-4053, Advanced OpenCL - Debugging and Profiling Using AMD CodeXL, by Uri S...AMD Developer Central
 
HC-4020, Enhancing OpenCL performance in AfterShot Pro with HSA, by Michael W...
HC-4020, Enhancing OpenCL performance in AfterShot Pro with HSA, by Michael W...HC-4020, Enhancing OpenCL performance in AfterShot Pro with HSA, by Michael W...
HC-4020, Enhancing OpenCL performance in AfterShot Pro with HSA, by Michael W...AMD Developer Central
 
GS-4136, Optimizing Game Development using AMD’s GPU PerfStudio 2, by Gordon ...
GS-4136, Optimizing Game Development using AMD’s GPU PerfStudio 2, by Gordon ...GS-4136, Optimizing Game Development using AMD’s GPU PerfStudio 2, by Gordon ...
GS-4136, Optimizing Game Development using AMD’s GPU PerfStudio 2, by Gordon ...AMD Developer Central
 
IS-4081, Rabbit: Reinventing Video Chat, by Philippe Clavel
IS-4081, Rabbit: Reinventing Video Chat, by Philippe ClavelIS-4081, Rabbit: Reinventing Video Chat, by Philippe Clavel
IS-4081, Rabbit: Reinventing Video Chat, by Philippe ClavelAMD Developer Central
 
MM-4105, Realtime 4K HDR Decoding with GPU ACES, by Gary Demos
MM-4105, Realtime 4K HDR Decoding with GPU ACES, by Gary DemosMM-4105, Realtime 4K HDR Decoding with GPU ACES, by Gary Demos
MM-4105, Realtime 4K HDR Decoding with GPU ACES, by Gary DemosAMD Developer Central
 
Webinar: Whats New in Java 8 with Develop Intelligence
Webinar: Whats New in Java 8 with Develop IntelligenceWebinar: Whats New in Java 8 with Develop Intelligence
Webinar: Whats New in Java 8 with Develop IntelligenceAMD Developer Central
 
CC-4000, Characterizing APU Performance in HadoopCL on Heterogeneous Distribu...
CC-4000, Characterizing APU Performance in HadoopCL on Heterogeneous Distribu...CC-4000, Characterizing APU Performance in HadoopCL on Heterogeneous Distribu...
CC-4000, Characterizing APU Performance in HadoopCL on Heterogeneous Distribu...AMD Developer Central
 
Shader model 5 0 and compute shader
Shader model 5 0 and compute shaderShader model 5 0 and compute shader
Shader model 5 0 and compute shaderzaywalker
 

What's hot (20)

TressFX The Fast and The Furry by Nicolas Thibieroz
TressFX The Fast and The Furry by Nicolas ThibierozTressFX The Fast and The Furry by Nicolas Thibieroz
TressFX The Fast and The Furry by Nicolas Thibieroz
 
MM-4092, Optimizing FFMPEG and Handbrake Using OpenCL and Other AMD HW Capabi...
MM-4092, Optimizing FFMPEG and Handbrake Using OpenCL and Other AMD HW Capabi...MM-4092, Optimizing FFMPEG and Handbrake Using OpenCL and Other AMD HW Capabi...
MM-4092, Optimizing FFMPEG and Handbrake Using OpenCL and Other AMD HW Capabi...
 
HC-4021, Efficient scheduling of OpenMP and OpenCL™ workloads on Accelerated ...
HC-4021, Efficient scheduling of OpenMP and OpenCL™ workloads on Accelerated ...HC-4021, Efficient scheduling of OpenMP and OpenCL™ workloads on Accelerated ...
HC-4021, Efficient scheduling of OpenMP and OpenCL™ workloads on Accelerated ...
 
Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...
Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...
Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...
 
PT-4102, Simulation, Compilation and Debugging of OpenCL on the AMD Southern ...
PT-4102, Simulation, Compilation and Debugging of OpenCL on the AMD Southern ...PT-4102, Simulation, Compilation and Debugging of OpenCL on the AMD Southern ...
PT-4102, Simulation, Compilation and Debugging of OpenCL on the AMD Southern ...
 
GS-4150, Bullet 3 OpenCL Rigid Body Simulation, by Erwin Coumans
GS-4150, Bullet 3 OpenCL Rigid Body Simulation, by Erwin CoumansGS-4150, Bullet 3 OpenCL Rigid Body Simulation, by Erwin Coumans
GS-4150, Bullet 3 OpenCL Rigid Body Simulation, by Erwin Coumans
 
GS-4108, Direct Compute in Gaming, by Bill Bilodeau
GS-4108, Direct Compute in Gaming, by Bill BilodeauGS-4108, Direct Compute in Gaming, by Bill Bilodeau
GS-4108, Direct Compute in Gaming, by Bill Bilodeau
 
PT-4142, Porting and Optimizing OpenMP applications to APU using CAPS tools, ...
PT-4142, Porting and Optimizing OpenMP applications to APU using CAPS tools, ...PT-4142, Porting and Optimizing OpenMP applications to APU using CAPS tools, ...
PT-4142, Porting and Optimizing OpenMP applications to APU using CAPS tools, ...
 
Computer Vision Powered by Heterogeneous System Architecture (HSA) by Dr. Ha...
Computer Vision Powered by Heterogeneous System Architecture (HSA) by  Dr. Ha...Computer Vision Powered by Heterogeneous System Architecture (HSA) by  Dr. Ha...
Computer Vision Powered by Heterogeneous System Architecture (HSA) by Dr. Ha...
 
GS-4106 The AMD GCN Architecture - A Crash Course, by Layla Mah
GS-4106 The AMD GCN Architecture - A Crash Course, by Layla MahGS-4106 The AMD GCN Architecture - A Crash Course, by Layla Mah
GS-4106 The AMD GCN Architecture - A Crash Course, by Layla Mah
 
PL-4044, OpenACC on AMD APUs and GPUs with the PGI Accelerator Compilers, by ...
PL-4044, OpenACC on AMD APUs and GPUs with the PGI Accelerator Compilers, by ...PL-4044, OpenACC on AMD APUs and GPUs with the PGI Accelerator Compilers, by ...
PL-4044, OpenACC on AMD APUs and GPUs with the PGI Accelerator Compilers, by ...
 
Final lisa opening_keynote_draft_-_v12.1tb
Final lisa opening_keynote_draft_-_v12.1tbFinal lisa opening_keynote_draft_-_v12.1tb
Final lisa opening_keynote_draft_-_v12.1tb
 
PT-4053, Advanced OpenCL - Debugging and Profiling Using AMD CodeXL, by Uri S...
PT-4053, Advanced OpenCL - Debugging and Profiling Using AMD CodeXL, by Uri S...PT-4053, Advanced OpenCL - Debugging and Profiling Using AMD CodeXL, by Uri S...
PT-4053, Advanced OpenCL - Debugging and Profiling Using AMD CodeXL, by Uri S...
 
HC-4020, Enhancing OpenCL performance in AfterShot Pro with HSA, by Michael W...
HC-4020, Enhancing OpenCL performance in AfterShot Pro with HSA, by Michael W...HC-4020, Enhancing OpenCL performance in AfterShot Pro with HSA, by Michael W...
HC-4020, Enhancing OpenCL performance in AfterShot Pro with HSA, by Michael W...
 
GS-4136, Optimizing Game Development using AMD’s GPU PerfStudio 2, by Gordon ...
GS-4136, Optimizing Game Development using AMD’s GPU PerfStudio 2, by Gordon ...GS-4136, Optimizing Game Development using AMD’s GPU PerfStudio 2, by Gordon ...
GS-4136, Optimizing Game Development using AMD’s GPU PerfStudio 2, by Gordon ...
 
IS-4081, Rabbit: Reinventing Video Chat, by Philippe Clavel
IS-4081, Rabbit: Reinventing Video Chat, by Philippe ClavelIS-4081, Rabbit: Reinventing Video Chat, by Philippe Clavel
IS-4081, Rabbit: Reinventing Video Chat, by Philippe Clavel
 
MM-4105, Realtime 4K HDR Decoding with GPU ACES, by Gary Demos
MM-4105, Realtime 4K HDR Decoding with GPU ACES, by Gary DemosMM-4105, Realtime 4K HDR Decoding with GPU ACES, by Gary Demos
MM-4105, Realtime 4K HDR Decoding with GPU ACES, by Gary Demos
 
Webinar: Whats New in Java 8 with Develop Intelligence
Webinar: Whats New in Java 8 with Develop IntelligenceWebinar: Whats New in Java 8 with Develop Intelligence
Webinar: Whats New in Java 8 with Develop Intelligence
 
CC-4000, Characterizing APU Performance in HadoopCL on Heterogeneous Distribu...
CC-4000, Characterizing APU Performance in HadoopCL on Heterogeneous Distribu...CC-4000, Characterizing APU Performance in HadoopCL on Heterogeneous Distribu...
CC-4000, Characterizing APU Performance in HadoopCL on Heterogeneous Distribu...
 
Shader model 5 0 and compute shader
Shader model 5 0 and compute shaderShader model 5 0 and compute shader
Shader model 5 0 and compute shader
 

Viewers also liked

DX12 & Vulkan: Dawn of a New Generation of Graphics APIs
DX12 & Vulkan: Dawn of a New Generation of Graphics APIsDX12 & Vulkan: Dawn of a New Generation of Graphics APIs
DX12 & Vulkan: Dawn of a New Generation of Graphics APIsAMD Developer Central
 
Low-level Shader Optimization for Next-Gen and DX11 by Emil Persson
Low-level Shader Optimization for Next-Gen and DX11 by Emil PerssonLow-level Shader Optimization for Next-Gen and DX11 by Emil Persson
Low-level Shader Optimization for Next-Gen and DX11 by Emil PerssonAMD Developer Central
 
Productive OpenCL Programming An Introduction to OpenCL Libraries with Array...
Productive OpenCL Programming An Introduction to OpenCL Libraries  with Array...Productive OpenCL Programming An Introduction to OpenCL Libraries  with Array...
Productive OpenCL Programming An Introduction to OpenCL Libraries with Array...AMD Developer Central
 
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth Thomas
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth ThomasHoly smoke! Faster Particle Rendering using Direct Compute by Gareth Thomas
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth ThomasAMD Developer Central
 
Introduction to Direct 3D 12 by Ivan Nevraev
Introduction to Direct 3D 12 by Ivan NevraevIntroduction to Direct 3D 12 by Ivan Nevraev
Introduction to Direct 3D 12 by Ivan NevraevAMD Developer Central
 
Intro to Salesforce Mobile SDK: Building Hybrid Apps Webinar
Intro to Salesforce Mobile SDK: Building Hybrid Apps WebinarIntro to Salesforce Mobile SDK: Building Hybrid Apps Webinar
Intro to Salesforce Mobile SDK: Building Hybrid Apps WebinarSalesforce Developers
 
Real-Time Game Optimization with Intel® GPA
Real-Time Game Optimization with Intel® GPAReal-Time Game Optimization with Intel® GPA
Real-Time Game Optimization with Intel® GPAIntel® Software
 
FrameGraph: Extensible Rendering Architecture in Frostbite
FrameGraph: Extensible Rendering Architecture in FrostbiteFrameGraph: Extensible Rendering Architecture in Frostbite
FrameGraph: Extensible Rendering Architecture in FrostbiteElectronic Arts / DICE
 
4K Checkerboard in Battlefield 1 and Mass Effect Andromeda
4K Checkerboard in Battlefield 1 and Mass Effect Andromeda4K Checkerboard in Battlefield 1 and Mass Effect Andromeda
4K Checkerboard in Battlefield 1 and Mass Effect AndromedaElectronic Arts / DICE
 
High Dynamic Range color grading and display in Frostbite
High Dynamic Range color grading and display in FrostbiteHigh Dynamic Range color grading and display in Frostbite
High Dynamic Range color grading and display in FrostbiteElectronic Arts / DICE
 
AMD and the new “Zen” High Performance x86 Core at Hot Chips 28
AMD and the new “Zen” High Performance x86 Core at Hot Chips 28AMD and the new “Zen” High Performance x86 Core at Hot Chips 28
AMD and the new “Zen” High Performance x86 Core at Hot Chips 28AMD
 

Viewers also liked (15)

DX12 & Vulkan: Dawn of a New Generation of Graphics APIs
DX12 & Vulkan: Dawn of a New Generation of Graphics APIsDX12 & Vulkan: Dawn of a New Generation of Graphics APIs
DX12 & Vulkan: Dawn of a New Generation of Graphics APIs
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.js
 
Inside XBox- One, by Martin Fuller
Inside XBox- One, by Martin FullerInside XBox- One, by Martin Fuller
Inside XBox- One, by Martin Fuller
 
Low-level Shader Optimization for Next-Gen and DX11 by Emil Persson
Low-level Shader Optimization for Next-Gen and DX11 by Emil PerssonLow-level Shader Optimization for Next-Gen and DX11 by Emil Persson
Low-level Shader Optimization for Next-Gen and DX11 by Emil Persson
 
Productive OpenCL Programming An Introduction to OpenCL Libraries with Array...
Productive OpenCL Programming An Introduction to OpenCL Libraries  with Array...Productive OpenCL Programming An Introduction to OpenCL Libraries  with Array...
Productive OpenCL Programming An Introduction to OpenCL Libraries with Array...
 
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth Thomas
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth ThomasHoly smoke! Faster Particle Rendering using Direct Compute by Gareth Thomas
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth Thomas
 
Introduction to Direct 3D 12 by Ivan Nevraev
Introduction to Direct 3D 12 by Ivan NevraevIntroduction to Direct 3D 12 by Ivan Nevraev
Introduction to Direct 3D 12 by Ivan Nevraev
 
Webinar on Google Android SDK
Webinar on Google Android SDKWebinar on Google Android SDK
Webinar on Google Android SDK
 
Intro to Salesforce Mobile SDK: Building Hybrid Apps Webinar
Intro to Salesforce Mobile SDK: Building Hybrid Apps WebinarIntro to Salesforce Mobile SDK: Building Hybrid Apps Webinar
Intro to Salesforce Mobile SDK: Building Hybrid Apps Webinar
 
Real-Time Game Optimization with Intel® GPA
Real-Time Game Optimization with Intel® GPAReal-Time Game Optimization with Intel® GPA
Real-Time Game Optimization with Intel® GPA
 
FrameGraph: Extensible Rendering Architecture in Frostbite
FrameGraph: Extensible Rendering Architecture in FrostbiteFrameGraph: Extensible Rendering Architecture in Frostbite
FrameGraph: Extensible Rendering Architecture in Frostbite
 
4K Checkerboard in Battlefield 1 and Mass Effect Andromeda
4K Checkerboard in Battlefield 1 and Mass Effect Andromeda4K Checkerboard in Battlefield 1 and Mass Effect Andromeda
4K Checkerboard in Battlefield 1 and Mass Effect Andromeda
 
High Dynamic Range color grading and display in Frostbite
High Dynamic Range color grading and display in FrostbiteHigh Dynamic Range color grading and display in Frostbite
High Dynamic Range color grading and display in Frostbite
 
Inside XBOX ONE by Martin Fuller
Inside XBOX ONE by Martin FullerInside XBOX ONE by Martin Fuller
Inside XBOX ONE by Martin Fuller
 
AMD and the new “Zen” High Performance x86 Core at Hot Chips 28
AMD and the new “Zen” High Performance x86 Core at Hot Chips 28AMD and the new “Zen” High Performance x86 Core at Hot Chips 28
AMD and the new “Zen” High Performance x86 Core at Hot Chips 28
 

Similar to Media SDK Webinar 2014

Utf 8'en'ibm sametime 9 - voice and video deployment
Utf 8'en'ibm sametime 9 - voice and video deployment Utf 8'en'ibm sametime 9 - voice and video deployment
Utf 8'en'ibm sametime 9 - voice and video deployment a8us
 
RapidFire - the Easy Route to low Latency Cloud Gaming Solutions - AMD at GDC14
RapidFire - the Easy Route to low Latency Cloud Gaming Solutions - AMD at GDC14RapidFire - the Easy Route to low Latency Cloud Gaming Solutions - AMD at GDC14
RapidFire - the Easy Route to low Latency Cloud Gaming Solutions - AMD at GDC14AMD Developer Central
 
Open Kode, Airplay And The New Reality Of Write Once Run Anywhere
Open Kode, Airplay And The New Reality Of Write Once Run AnywhereOpen Kode, Airplay And The New Reality Of Write Once Run Anywhere
Open Kode, Airplay And The New Reality Of Write Once Run Anywhereguest991eb3
 
Movi presentation Singapore video tech meetup
Movi presentation Singapore video tech meetupMovi presentation Singapore video tech meetup
Movi presentation Singapore video tech meetupLars-Erik M Ravn
 
Minko stage3d 20130222
Minko stage3d 20130222Minko stage3d 20130222
Minko stage3d 20130222Minko3D
 
20110917 saitama iphone_dev
20110917 saitama iphone_dev20110917 saitama iphone_dev
20110917 saitama iphone_devKaoru NAKAMURA
 
Reaching the multimedia web from embedded platforms with WPEWebkit
Reaching the multimedia web from embedded platforms with WPEWebkitReaching the multimedia web from embedded platforms with WPEWebkit
Reaching the multimedia web from embedded platforms with WPEWebkitIgalia
 
Linxu conj2016 96boards
Linxu conj2016 96boardsLinxu conj2016 96boards
Linxu conj2016 96boardsLF Events
 
GNAT GPL For Mindstorms
GNAT GPL For MindstormsGNAT GPL For Mindstorms
GNAT GPL For MindstormsAdaCore
 
Droidcon2013 miracast final2
Droidcon2013 miracast final2Droidcon2013 miracast final2
Droidcon2013 miracast final2Droidcon Berlin
 
Porting Tizen-IVI 3.0 to an ARM based SoC Platform
Porting Tizen-IVI 3.0 to an ARM based SoC PlatformPorting Tizen-IVI 3.0 to an ARM based SoC Platform
Porting Tizen-IVI 3.0 to an ARM based SoC PlatformRyo Jin
 
Play With Android
Play With AndroidPlay With Android
Play With AndroidChamp Yen
 
Android Meetup, Илья Лёвин
Android Meetup, Илья ЛёвинAndroid Meetup, Илья Лёвин
Android Meetup, Илья ЛёвинGDG Saint Petersburg
 
PT-4052, Introduction to AMD Developer Tools, by Yaki Tebeka and Gordon Selley
PT-4052, Introduction to AMD Developer Tools, by Yaki Tebeka and Gordon SelleyPT-4052, Introduction to AMD Developer Tools, by Yaki Tebeka and Gordon Selley
PT-4052, Introduction to AMD Developer Tools, by Yaki Tebeka and Gordon SelleyAMD Developer Central
 
20040927-Commons-Riddle.ppt
20040927-Commons-Riddle.ppt20040927-Commons-Riddle.ppt
20040927-Commons-Riddle.pptVideoguy
 
Eclipse Edje: A Java API for Microcontrollers
Eclipse Edje: A Java API for MicrocontrollersEclipse Edje: A Java API for Microcontrollers
Eclipse Edje: A Java API for MicrocontrollersMicroEJ
 

Similar to Media SDK Webinar 2014 (20)

Utf 8'en'ibm sametime 9 - voice and video deployment
Utf 8'en'ibm sametime 9 - voice and video deployment Utf 8'en'ibm sametime 9 - voice and video deployment
Utf 8'en'ibm sametime 9 - voice and video deployment
 
RapidFire - the Easy Route to low Latency Cloud Gaming Solutions - AMD at GDC14
RapidFire - the Easy Route to low Latency Cloud Gaming Solutions - AMD at GDC14RapidFire - the Easy Route to low Latency Cloud Gaming Solutions - AMD at GDC14
RapidFire - the Easy Route to low Latency Cloud Gaming Solutions - AMD at GDC14
 
Open Kode, Airplay And The New Reality Of Write Once Run Anywhere
Open Kode, Airplay And The New Reality Of Write Once Run AnywhereOpen Kode, Airplay And The New Reality Of Write Once Run Anywhere
Open Kode, Airplay And The New Reality Of Write Once Run Anywhere
 
Movi presentation Singapore video tech meetup
Movi presentation Singapore video tech meetupMovi presentation Singapore video tech meetup
Movi presentation Singapore video tech meetup
 
Minko stage3d 20130222
Minko stage3d 20130222Minko stage3d 20130222
Minko stage3d 20130222
 
20110917 saitama iphone_dev
20110917 saitama iphone_dev20110917 saitama iphone_dev
20110917 saitama iphone_dev
 
Reaching the multimedia web from embedded platforms with WPEWebkit
Reaching the multimedia web from embedded platforms with WPEWebkitReaching the multimedia web from embedded platforms with WPEWebkit
Reaching the multimedia web from embedded platforms with WPEWebkit
 
Linxu conj2016 96boards
Linxu conj2016 96boardsLinxu conj2016 96boards
Linxu conj2016 96boards
 
GNAT GPL For Mindstorms
GNAT GPL For MindstormsGNAT GPL For Mindstorms
GNAT GPL For Mindstorms
 
Droidcon2013 miracast final2
Droidcon2013 miracast final2Droidcon2013 miracast final2
Droidcon2013 miracast final2
 
Porting Tizen-IVI 3.0 to an ARM based SoC Platform
Porting Tizen-IVI 3.0 to an ARM based SoC PlatformPorting Tizen-IVI 3.0 to an ARM based SoC Platform
Porting Tizen-IVI 3.0 to an ARM based SoC Platform
 
Play With Android
Play With AndroidPlay With Android
Play With Android
 
56_Implementation
56_Implementation56_Implementation
56_Implementation
 
Android Meetup, Илья Лёвин
Android Meetup, Илья ЛёвинAndroid Meetup, Илья Лёвин
Android Meetup, Илья Лёвин
 
Video Drivers
Video DriversVideo Drivers
Video Drivers
 
DRIVE PX 2
DRIVE PX 2DRIVE PX 2
DRIVE PX 2
 
PT-4052, Introduction to AMD Developer Tools, by Yaki Tebeka and Gordon Selley
PT-4052, Introduction to AMD Developer Tools, by Yaki Tebeka and Gordon SelleyPT-4052, Introduction to AMD Developer Tools, by Yaki Tebeka and Gordon Selley
PT-4052, Introduction to AMD Developer Tools, by Yaki Tebeka and Gordon Selley
 
20040927-Commons-Riddle.ppt
20040927-Commons-Riddle.ppt20040927-Commons-Riddle.ppt
20040927-Commons-Riddle.ppt
 
3DgraphicsAndAR
3DgraphicsAndAR3DgraphicsAndAR
3DgraphicsAndAR
 
Eclipse Edje: A Java API for Microcontrollers
Eclipse Edje: A Java API for MicrocontrollersEclipse Edje: A Java API for Microcontrollers
Eclipse Edje: A Java API for Microcontrollers
 

More from AMD Developer Central

Mantle and Nitrous - Combining Efficient Engine Design with a modern API - AM...
Mantle and Nitrous - Combining Efficient Engine Design with a modern API - AM...Mantle and Nitrous - Combining Efficient Engine Design with a modern API - AM...
Mantle and Nitrous - Combining Efficient Engine Design with a modern API - AM...AMD Developer Central
 
Mantle - Introducing a new API for Graphics - AMD at GDC14
Mantle - Introducing a new API for Graphics - AMD at GDC14Mantle - Introducing a new API for Graphics - AMD at GDC14
Mantle - Introducing a new API for Graphics - AMD at GDC14AMD Developer Central
 
Direct3D and the Future of Graphics APIs - AMD at GDC14
Direct3D and the Future of Graphics APIs - AMD at GDC14Direct3D and the Future of Graphics APIs - AMD at GDC14
Direct3D and the Future of Graphics APIs - AMD at GDC14AMD Developer Central
 
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14AMD Developer Central
 
Keynote (Tony King-Smith) - Silicon? Check. HSA? Check. All done? Wrong! - by...
Keynote (Tony King-Smith) - Silicon? Check. HSA? Check. All done? Wrong! - by...Keynote (Tony King-Smith) - Silicon? Check. HSA? Check. All done? Wrong! - by...
Keynote (Tony King-Smith) - Silicon? Check. HSA? Check. All done? Wrong! - by...AMD Developer Central
 
Keynote (Nandini Ramani) - The Role of Java in Heterogeneous Computing & How ...
Keynote (Nandini Ramani) - The Role of Java in Heterogeneous Computing & How ...Keynote (Nandini Ramani) - The Role of Java in Heterogeneous Computing & How ...
Keynote (Nandini Ramani) - The Role of Java in Heterogeneous Computing & How ...AMD Developer Central
 
Keynote (Dr. Lisa Su) - Developers: The Heart of AMD Innovation - by Dr. Lisa...
Keynote (Dr. Lisa Su) - Developers: The Heart of AMD Innovation - by Dr. Lisa...Keynote (Dr. Lisa Su) - Developers: The Heart of AMD Innovation - by Dr. Lisa...
Keynote (Dr. Lisa Su) - Developers: The Heart of AMD Innovation - by Dr. Lisa...AMD Developer Central
 
Keynote (Johan Andersson) - Mantle for Developers - by Johan Andersson, Techn...
Keynote (Johan Andersson) - Mantle for Developers - by Johan Andersson, Techn...Keynote (Johan Andersson) - Mantle for Developers - by Johan Andersson, Techn...
Keynote (Johan Andersson) - Mantle for Developers - by Johan Andersson, Techn...AMD Developer Central
 

More from AMD Developer Central (8)

Mantle and Nitrous - Combining Efficient Engine Design with a modern API - AM...
Mantle and Nitrous - Combining Efficient Engine Design with a modern API - AM...Mantle and Nitrous - Combining Efficient Engine Design with a modern API - AM...
Mantle and Nitrous - Combining Efficient Engine Design with a modern API - AM...
 
Mantle - Introducing a new API for Graphics - AMD at GDC14
Mantle - Introducing a new API for Graphics - AMD at GDC14Mantle - Introducing a new API for Graphics - AMD at GDC14
Mantle - Introducing a new API for Graphics - AMD at GDC14
 
Direct3D and the Future of Graphics APIs - AMD at GDC14
Direct3D and the Future of Graphics APIs - AMD at GDC14Direct3D and the Future of Graphics APIs - AMD at GDC14
Direct3D and the Future of Graphics APIs - AMD at GDC14
 
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
 
Keynote (Tony King-Smith) - Silicon? Check. HSA? Check. All done? Wrong! - by...
Keynote (Tony King-Smith) - Silicon? Check. HSA? Check. All done? Wrong! - by...Keynote (Tony King-Smith) - Silicon? Check. HSA? Check. All done? Wrong! - by...
Keynote (Tony King-Smith) - Silicon? Check. HSA? Check. All done? Wrong! - by...
 
Keynote (Nandini Ramani) - The Role of Java in Heterogeneous Computing & How ...
Keynote (Nandini Ramani) - The Role of Java in Heterogeneous Computing & How ...Keynote (Nandini Ramani) - The Role of Java in Heterogeneous Computing & How ...
Keynote (Nandini Ramani) - The Role of Java in Heterogeneous Computing & How ...
 
Keynote (Dr. Lisa Su) - Developers: The Heart of AMD Innovation - by Dr. Lisa...
Keynote (Dr. Lisa Su) - Developers: The Heart of AMD Innovation - by Dr. Lisa...Keynote (Dr. Lisa Su) - Developers: The Heart of AMD Innovation - by Dr. Lisa...
Keynote (Dr. Lisa Su) - Developers: The Heart of AMD Innovation - by Dr. Lisa...
 
Keynote (Johan Andersson) - Mantle for Developers - by Johan Andersson, Techn...
Keynote (Johan Andersson) - Mantle for Developers - by Johan Andersson, Techn...Keynote (Johan Andersson) - Mantle for Developers - by Johan Andersson, Techn...
Keynote (Johan Andersson) - Mantle for Developers - by Johan Andersson, Techn...
 

Recently uploaded

Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 

Recently uploaded (20)

Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 

Media SDK Webinar 2014

  • 1. Media SDK 1.1 Mikhail Mironov AMD Media SDK Software Architect Oct 22, 2014
  • 2. MEDIA SDK USE CASES Video Editing/Transcode Cloud Gaming Wireless Display Video Conferencing Remote Desktop Video Playback MEDIA SDK 1.1 AMF 2 WEBINAR | OCTOBER 22, 2014
  • 3. MEDIA SDK – VALUE TO DEVELOPERS Use AMD’s differentiated multimedia IP • SW IP : GPU optimized video pre/post processing • HW IP : VCE video encoder • HW IP: UVD – video decoder • HW IP : AMF-DEM library in latency sensitive applications like wireless display and remote desktop Optimal use of Heterogeneous Compute in Multimedia Apps • DX to OpenCL inter-op • SDK samples show developers how to build optimal video processing pipelines Developer Friendly • Support for industry standard MFT APIs • AMF - OS and framework agnostic C++ APIs • Next – VAAPI support for Linux media developers MEDIA SDK 1.1 AMF 3 WEBINAR | OCTOBER 22, 2014
  • 4. MEDIA SDK SUMMARY  MFTs for leveraging Media HW accelerator blocks for video encoding/decoding  Video Quality MFT for video pre/post processing  AMF: C++ API for media processing  Support for Windows 7/8.1 MEDIA SDK 1.1 AMF 4 WEBINAR | OCTOBER 22, 2014
  • 5. MEDIA FOUNDATION COMPONENTS (MFTS)  Access Video Compression Engine (VCE) for video encoding  Access Universal Video Decoder (UVD) for video decoding  Use GPU compute shaders for video processing  Released with Media SDK 1.0 MEDIA SDK 1.1 AMF 5 WEBINAR | OCTOBER 22, 2014
  • 6. AMD MEDIA FRAMEWORK (AMF)  C++ API and framework for media processing on AMD platforms  OS agnostic : Initial support on Windows (Desktop and Windows Store) but can be easily ported to other OSes  Can be easily adapted to multimedia framework of choice – MFT, Gstreamer, OpenMAX …  Accept input from and provide inter-op with DirectX, OpenCL and OpenGL  Replacement for OpenVideo  Targeted for Media SDKv1.1 MEDIA SDK 1.1 AMF 6 WEBINAR | OCTOBER 22, 2014
  • 7. MEDIA SDK SOFTWARE STACK AMD Frameworks MEDIA SDK 1.1 AMF 7 WEBINAR | OCTOBER 22, 2014 Applications OMX MFT AMD Media Framework (AMF) (C++) Drivers AMD HW (UVD, VCE, GPU) MFT DirectX OpenCL OpenGL ISV ISV Native C/C++ ISV Decoder Converter Processor Encoder DEM Encoder AMD AMD AMD AMD AMD AMD AMD
  • 8. A10-7XXX A10-Micro 6XXX AMD Radeon™ R9 290 MEDIA SDK 1.1 AMF 8 WEBINAR | OCTOBER 22, 2014 MEDIA SDK ROADMAP Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 2014 Media SDKv1.0: - Video Quality MFT for video processing - AMF-DEM library for low latency apps - Windows 8/8.1 Store Support 2015 Media SDK v1.0 GA Media SDKv1.1: - AMF for video - encoding - decoding - Cloud Gaming /VDI support Planned In Planning AMD Radeon™ R9 285 Media SDKv2.0 Media SDK v1.1 Beta Media SDK v1.1 GA Media SDKv2.0: - Video Processor - Linux support - VAAPI & AMF - Open & closed source Linux driver Now 2016 Aug Dec Media SDKv3.0 Media SDKv3.0: - Android support - Audio support - Camera support - File containers (mux, demux)  
  • 10. AMF COMPONENTS  Full Decoder: ‒ UVD - H264 AVC, H264 VC1, WMV9, MPEG2, MPEG4 P2, H264 MVC, MJPEG, H265 HEVC ‒ Shader based MJPEG for legacy hardware  Encoder: VCE: H264 AVC, SVC  Video Converter (Shader based) ‒ Color Space Conversion, Scale, Composition  Video Processor (Shader based) ‒ Steady Video, Color Space Conversion, Scaling, Brightness, Contrast, Saturation, Tint, Vibrancy, Skin Tone Correction, Gamma, Brighter Whites, De-interlacing, Super Resolution, Dynamic Contrast, Dynamic Range, Edge Enhancement, De-noise, Mosquito Noise Reduction, False Contour Reduction, De-blocking, Demo Mode, FRC  AMF DEM Screen capture encoder (VCE) ‒ Desktop only  Capability Manager MEDIA SDK 1.1 AMF 10 WEBINAR | OCTOBER 22, 2014
  • 11. AMF ARCHITECTURE - BASICS  Elementary data types All elementary data types are defined to make code portable to other OSs. Examples: typedef __int64 amf_int64; typedef __int32 amf_int32; typedef size_t amf_size; typedef void* amf_handle;  C++ interfaces Interfaces are implemented in the form of abstract (pure) C++ classes. Each interface is derived from the AMFInterface basic interface. It exposes methods for reference counting and querying for other interfaces : class AMFInterface { public: virtual amf_long AMF_STD_CALL Acquire()=0; virtual amf_long AMF_STD_CALL Release()=0; virtual AMF_RESULT AMF_STD_CALL QueryInterface(const AMFGuid& interfaceID, void** ppInterface) = 0; }; MEDIA SDK 1.1 AMF 11 WEBINAR | OCTOBER 22, 2014
  • 12. AMF ARCHITECTURE – INTERFACE DIAGRAM MEDIA SDK 1.1 AMF 12 WEBINAR | OCTOBER 22, 2014 AMFInterface AMFPropertyStorage AMFData AMFProperySorageEx AMFSurface AMFBuffer AMFComponent AMFContext AMFPlane 1 1..* Component Surface
  • 13. AMF ARCHITECTURE – PROPERTY STORAGE INTERFACE  AMFPropertyStorage implements a property map between a string ID and an AMFVariantStruct structure. There is a set of helper classes and template functions to safely manipulate AMFVariantStruct in C++. class AMFPropertyStorage : virtual public AMFInterface { public: virtual AMF_RESULT SetProperty(const wchar_t *pName, AMFVariantStruct value)=0; virtual AMF_RESULT GetProperty(const wchar_t *pName, AMFVariantStruct* pValue)=0; virtual bool HasProperty(const wchar_t *pName)=0; virtual amf_int32 GetPropertyCount() const = 0; virtual AMF_RESULT GetPropertyAt(amf_int32 index, wchar_t* name, amf_size nameSize, AMFVariantStruct* pValue) const = 0; virtual AMF_RESULT Clear()=0; virtual AMF_RESULT AddTo(AMFPropertyStorage *dest, bool bOverwrite, bool bDeep)=0; virtual AMF_RESULT CopyTo(AMFPropertyStorage *dest, bool bDeep)=0; template<typename _T> AMF_RESULT SetProperty(const wchar_t *pName, const _T& value); template<typename _T> AMF_RESULT GetProperty(const wchar_t *pName, _T* pValue); }; MEDIA SDK 1.1 AMF 13 WEBINAR | OCTOBER 22, 2014
  • 14. AMF ARCHITECTURE – PROPERTY STORAGE EX INTERFACE AMFPropertyStorageEx adds property description and validation features to AMFPropertyStorage. class AMFPropertyStorageEx : virtual public AMFPropertyStorage { public: virtual amf_size GetPropertiesInfoCount() = 0; virtual AMF_RESULT GetPropertyInfo(amf_size szInd,const AMFPropertyInfo** pInfo) = 0; virtual AMF_RESULT GetPropertyInfo(const wchar_t *pName,const AMFPropertyInfo** pInfo)=0; virtual AMF_RESULT ValidateProperty(const wchar_t *pName, AMFVariantStruct val, AMFVariantStruct* outValidated) = 0; }; MEDIA SDK 1.1 AMF 14 WEBINAR | OCTOBER 22, 2014
  • 15. AMF ARCHITECTURE - MEMORY  Memory AMF provides two types of memory objects: AMFBuffer and AMFSurface. Each object implements the AMFData common base interface. Each object is allocated via factory methods in the AMFContext interface. In addition, the AMFContext interface provides methods to create AMFBuffer or AMFSurface wrapping existing memory objects from various APIs: • DX9 surfaces (Win Desktop only) • DX11 Textures (Win Store and Win Desktop) • OpenCL 2D images and buffers (Win Desktop only) • OpenGL textures (Win Desktop only) • Host memory  GetNative() AMFPlane and AMFBuffer interfaces provide the GetNative() method. It allows to access the underlying memory object allocated by one of the technologies listed above. This method always return pointer to void. This call does not change the reference count of reference-counted objects (derived from the IUnknown interface or OCL’s memobj)  Thread safety All memory objects in AMF are not thread-safe (except AMF reference counting). It is assumed that any memory object is used by only one component at a time. MEDIA SDK 1.1 AMF 15 WEBINAR | OCTOBER 22, 2014
  • 16. AMF ARCHITECTURE – DATA INTERFACE The AMFData interface is a base interface for the AMBuffer and AMFSurface interfaces. It is responsible for storing common properties of the video or audio data objects (presentation time, duration, type, etc). The AMFData interface is also responsible for memory type storage and memory conversion: class AMFData : virtual public AMFPropertyStorage { public: virtual AMF_MEMORY_TYPE GetMemoryType()=0; virtual AMF_RESULT Duplicate(AMF_MEMORY_TYPE eMemType,AMFData **ppData)=0; virtual AMF_ERROR Convert(AMF_MEMORY_TYPE eMemType)=0; virtual AMF_DATA_TYPE GetDataType()=0; virtual void SetPts(amf_pts pts)=0; virtual amf_pts GetPts()=0; virtual void SetDuration(amf_pts duration)=0; virtual amf_pts GetDuration()=0; }; MEDIA SDK 1.1 AMF 16 WEBINAR | OCTOBER 22, 2014
  • 17. AMF ARCHITECTURE – BUFFER INTERFACE The AMFBuffer interface provides access to an unordered memory buffer. class AMFBuffer : virtual public AMFData { public: virtual amf_size GetSize()=0; virtual void* GetNative()=0; virtual void AddObserver( AMFBufferObserver* pObserver) = 0; virtual void RemoveObserver( AMFBufferObserver* pObserver) = 0; }; MEDIA SDK 1.1 AMF 17 WEBINAR | OCTOBER 22, 2014
  • 18. AMF ARCHITECTURE – SURFACE INTERFACE The AMFSurface interface represents a video frame and consists of a collection of planes. It also holds the type of the frame: progressive, interlaced, stereoscopic, etc. class AMFSurface : virtual public AMFData { public: virtual AMF_SURFACE_FORMAT GetFormat() = 0; virtual amf_size GetPlanesCount() = 0; virtual AMFPlane* GetPlaneAt(amf_size index) = 0; virtual AMFPlane* GetPlane(AMF_PLANE_TYPE type) = 0; virtual AMF_FRAME_TYPE GetFrameType() = 0; virtual void SetFrameType(AMF_FRAME_TYPE type) = 0; virtual void AddObserver(AMFSurfaceObserver* pObserver) = 0; virtual void RemoveObserver(AMFSurfaceObserver* pObserver) = 0; }; MEDIA SDK 1.1 AMF 18 WEBINAR | OCTOBER 22, 2014
  • 19. AMF ARCHITECTURE – PLANE INTERFACE The AMFPlane interface represents a single two-dimensional plane of a multi-plane image format or the whole image for packed image format class AMFPlane : virtual public AMFInterface { public: virtual AMF_PLANE_TYPE GetType() = 0; virtual void* GetNative() = 0; virtual amf_int32 GetPixelSizeInBytes() = 0; virtual amf_int32 GetOffsetX() = 0; virtual amf_int32 GetOffsetY() = 0; virtual amf_int32 GetWidth() = 0; virtual amf_int32 GetHeight() = 0; virtual amf_int32 GetHPitch() = 0; virtual amf_int32 GetVPitch() = 0; }; MEDIA SDK 1.1 AMF 19 WEBINAR | OCTOBER 22, 2014
  • 20. AMF ARCHITECTURE – CONTEXT INTERFACE - DIRECTX The AMFContext interface is responsible for initializing and storing device-specific data. class AMFContext : virtual public AMFPropertyStorage { virtual AMF_RESULT AMF_STD_CALL Terminate() = 0; virtual AMF_RESULT InitDX9(void* pDX9Device) = 0; virtual void* GetDX9Device(AMF_DX_VERSION dxVersionRequired = AMF_DX9) = 0; virtual AMF_RESULT LockDX9() = 0; virtual AMF_RESULT UnlockDX9() = 0; virtual AMF_RESULT InitDX11(void* pDX11Device, AMF_DX_VERSION dxVersionRequired = AMF_DX11_0) = 0; virtual void* GetDX11Device(AMF_DX_VERSION dxVersionRequired = AMF_DX11_0) = 0; virtual AMF_RESULT LockDX11() = 0; virtual AMF_RESULT UnlockDX11() = 0; MEDIA SDK 1.1 AMF 20 WEBINAR | OCTOBER 22, 2014
  • 21. AMF ARCHITECTURE – CONTEXT INTERFACE – OCL, OGL Context interface is responsible for initializing and storing API-specific data (OGL devices, OCL contexts). virtual AMF_RESULT InitOpenCL(void* pCommandQueue = NULL) = 0; virtual void* GetOpenCLContext() = 0; virtual void* GetOpenCLCommandQueue() = 0; virtual void* GetOpenCLDeviceID() = 0; virtual AMF_RESULT LockOpenCL() = 0; virtual AMF_RESULT UnlockOpenCL() = 0; virtual AMF_RESULT InitOpenGL(amf_handle hOpenGLContext, amf_handle hWindow, amf_handle hDC) = 0; virtual amf_handle GetOpenGLContext() = 0; virtual amf_handle GetOpenGLDrawable() = 0; virtual AMF_RESULT LockOpenGL() = 0; virtual AMF_RESULT UnlockOpenGL() = 0; MEDIA SDK 1.1 AMF 21 WEBINAR | OCTOBER 22, 2014
  • 22. AMF ARCHITECTURE – CONTEXT INTERFACE - ALLOCATION  The AMFContext interface allows to allocate buffers and surfaces of a particular memory type. The released objects are internally cached for future reuse. virtual AMF_RESULT AllocBuffer(AMF_MEMORY_TYPE type, amf_size size, AMFBuffer** ppBuffer) = 0; virtual AMF_RESULT AllocSurface(AMF_MEMORY_TYPE type, AMF_SURFACE_FORMAT format, amf_int32 width, amf_int32 height, AMFSurface** ppSurface) = 0; MEDIA SDK 1.1 AMF 22 WEBINAR | OCTOBER 22, 2014
  • 23. AMF ARCHITECTURE – CONTEXT INTERFACE - WRAPPING  The AMFContext interface allows to temporarily wrap an external memory object(DX, OpenCL, OpenGL or Host memory) into an AMF surface or buffer object. AMF allows to set an optional callback to track the release of AMF objects. virtual AMF_RESULT CreateBufferFromHostNative(void* pHostBuffer, amf_size size, AMFBuffer** ppBuffer, AMFBufferObserver* pObserver) = 0; virtual AMF_RESULT CreateSurfaceFromHostNative(AMF_SURFACE_FORMAT format,amf_int32 width, amf_int32 height, amf_int32 hPitch, amf_int32 vPitch, void* pData, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver) = 0; virtual AMF_RESULT CreateSurfaceFromDX9Native(void* pDX9Surface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver) = 0; virtual AMF_RESULT CreateSurfaceFromDX11Native(void* pDX11Surface, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver) = 0; virtual AMF_RESULT CreateSurfaceFromOpenGLNative( AMF_SURFACE_FORMAT format, amf_handle hGLTextureID, AMFSurface** ppSurface, AMFSurfaceObserver* pObserver) = 0; }; MEDIA SDK 1.1 AMF 23 WEBINAR | OCTOBER 22, 2014
  • 24. AMF ARCHITECTURE – COMPONENT INTERFACE Each component implements a common AMFComponent interface. The AMFComponent interface is derived from AMFPropertyStorageEx and exposes a number of properties for the application to discover and manipulate. class AMFComponent : virtual public AMFPropertyStorageEx { public: virtual AMF_RESULT Init(AMF_SURFACE_FORMAT format,amf_int32 width,amf_int32 height) = 0; virtual AMF_RESULT ReInit(amf_int32 width,amf_int32 height) = 0; virtual AMF_RESULT Terminate() = 0; virtual AMF_RESULT Drain() = 0; virtual AMF_RESULT Flush() = 0; virtual AMF_RESULT SubmitInput(AMFData* pData) = 0; virtual AMF_RESULT QueryOutput(AMFData** ppData) = 0; virtual AMFContext* GetContext() = 0; virtual AMF_RESULT SetOutputDataAllocatorCB(AMFDataAllocatorCB* callback) = 0; }; MEDIA SDK 1.1 AMF 24 WEBINAR | OCTOBER 22, 2014
  • 25. AMF TYPICAL WORKFLOW Create context MEDIA SDK 1.1 AMF 25 WEBINAR | OCTOBER 22, 2014 Create DX11 Device Set device to context Create Component Set Properties on component Initiate component Allocate input buffer Fill input buffer Submit Input Query Output Drain Query Output Terminate Component Terminate Context
  • 27. Init MEDIA SDK 1.1 AMF 27 WEBINAR | OCTOBER 22, 2014 Thread 1 AMF ONE-THREAD MODEL Is EOF? No Prepare Input object Submit input Drain Terminate Query Output Have Data? Process Data No Is EOF? Start End Yes Yes Yes No
  • 28. ENCODER SAMPLE - STATIC PARAMETERS #include <d3d9.h> #include <d3d11.h> #include "../../../include/components/VideoEncoderVCE.h" static amf::AMF_MEMORY_TYPE memoryTypeIn = amf::AMF_MEMORY_DX9; static amf::AMF_SURFACE_FORMAT formatIn = amf::AMF_SURFACE_NV12; static amf_int32 widthIn = 1920; static amf_int32 heightIn = 1080; static amf_int32 frameRateIn = 30; static amf_int64 bitRateIn = 1000000L; // in bits, 1MB static amf_int32 rectSize = 50; static amf_int32 frameCount = 100; static wchar_t *fileNameOut = L"./output.h264"; static bool PollAndWrite(amf::AMFComponent *encoder, FILE *f, bool bDrain); static void FillSurface(amf::AMFContext *context, amf::AMFSurface *surface); MEDIA SDK 1.1 AMF 28 WEBINAR | OCTOBER 22, 2014 Init
  • 29. ENCODER SAMPLE - INITIALIZATION int _tmain(int argc, _TCHAR* argv[]) { AMF_RESULT res = AMF_OK; // error checking can be added later FILE *f = _wfopen(fileNameOut, L"wb"); // open output file // initialize AMF amf::AMFContextPtr context; res = AMFCreateContext(&context); if(memoryTypeIn == amf::AMF_MEMORY_DX9) { res = context->InitDX9(NULL); // can be DX9 or DX9Ex device } if(memoryTypeIn == amf::AMF_MEMORY_DX11) { res = context->InitDX11(NULL); // can be DX11 device } MEDIA SDK 1.1 AMF 29 WEBINAR | OCTOBER 22, 2014 Init
  • 30. ENCODER SAMPLE - ENCODER amf::AMFComponentPtr encoder; res = AMFCreateComponent(context, AMFVideoEncoderVCE_AVC, &encoder); res = encoder->SetProperty(AMF_VIDEO_ENCODER_USAGE, AMF_VIDEO_ENCODER_USAGE_TRANSCONDING); res = encoder->SetProperty(AMF_VIDEO_ENCODER_TARGET_BITRATE, bitRateIn); res = encoder->SetProperty(AMF_VIDEO_ENCODER_FRAMESIZE, ::AMFConstructSize(widthIn, heightIn)); res = encoder->SetProperty(AMF_VIDEO_ENCODER_FRAMERATE, ::AMFConstructRate(frameRateIn, 1)); res = encoder->Init(formatIn, widthIn, heightIn); amf::AMFSurfacePtr surfaceIn; // create input surface res = context->AllocSurface(memoryTypeIn, formatIn, widthIn, heightIn, &surfaceIn); MEDIA SDK 1.1 AMF 30 WEBINAR | OCTOBER 22, 2014 Init
  • 31. ENCODER SAMPLE - MAIN LOOP bool bFillSurface = true; amf_int32 submitted = 0; while(submitted < frameCount){ if(bFillSurface){ res = surfaceIn->Convert(memoryTypeIn); FillSurface(context, surfaceIn); } res = encoder->SubmitInput(surfaceIn); // encode if(res == AMF_INPUT_FULL){ // handle full queue bFillSurface = false; amf_sleep(1); // input queue is full: wait, poll and submit again }else{ bFillSurface = true; submitted++; } PollAndWrite(encoder, f, false); // poll and write all ready output } MEDIA SDK 1.1 AMF 31 WEBINAR | OCTOBER 22, 2014 Prepare Input object Submit input
  • 32. ENCODER SAMPLE - FILL SURFACE static void FillSurface(amf::AMFContext *context, amf::AMFSurface *surface) { HRESULT hr = S_OK; // no reference counting - do not Release() IDirect3DDevice9 *deviceDX9 = (IDirect3DDevice9 *)context->GetDX9Device(); IDirect3DSurface9 *surfaceDX9= (IDirect3DSurface9*)surface->GetPlaneAt(0)->GetNative(); hr = deviceDX9->ColorFill(surfaceDX9, NULL, D3DCOLOR_XYUV (128, 0, 128)); } MEDIA SDK 1.1 AMF 32 WEBINAR | OCTOBER 22, 2014 Prepare Input object
  • 33. ENCODER SAMPLE - POLLING bool PollAndWrite(amf::AMFComponent *encoder, FILE *f, bool bDrain) { while(true){ // get all ready buffers amf::AMFDataPtr data; res = encoder->QueryOutput(&data); if(res == AMF_EOF){return false;} // Drain complete if(data != NULL){ amf::AMFBufferPtr buffer(data); fwrite(buffer->GetNative(), 1, buffer->GetSize(), f); }else{ if(bDrain){ amf_sleep(1);} else { break; } } } return true; } MEDIA SDK 1.1 AMF 33 WEBINAR | OCTOBER 22, 2014 Query Output Process Data
  • 34. ENCODE SAMPLE - DRAIN & TERMINATE while(true){// Drain res = encoder->Drain(); if(res != AMF_INPUT_FULL){ // handle full queue break; } amf_sleep(1); // input queue is full: wait and try again PollAndWrite(encoder, f, false); } PollAndWrite(encoder, f, true); // poll and write the rest of output surfaceIn = NULL; encoder->Terminate(); encoder = NULL; context->Terminate(); context = NULL; fclose(f); return 0; } MEDIA SDK 1.1 AMF 34 WEBINAR | OCTOBER 22, 2014 Drain Terminate
  • 35. AMF TWO-THREAD MODEL Is EOF? MEDIA SDK 1.1 AMF 35 WEBINAR | OCTOBER 22, 2014 Thread 2 Polling Thread 1 Submit Prepare Input object Submit input Drain Terminate Init Query Output Have Data? Process Data Is EOF? Thread Join Thread 2 Start Yes Yes No No Yes No
  • 36. Q&A, REFERENCES  AMD Media SDK website for downloads: http://developer.amd.com/tools-and-sdks/media-sdk  Latest driver download: http://support.amd.com/en-us/download  Media SDK Forum: http://devgurus.amd.com/community/media-sdk  Speaker: Mikhail Mironov, AMD Media SDK Software Architect: mikhail.mironov@amd.com  Developer Central Webinar Replays: https://www.youtube.com/user/AMDDevCentral  AMD Developer Central on Twitter (@AMDDevCentral): https://twitter.com/AMDDevCentral  Subscribe to be notified of future Webinars: http://developer.amd.com/community/newsletter/subscribe/ MEDIA SDK 1.1 AMF 36 WEBINAR | OCTOBER 22, 2014
  • 37. DISCLAIMER The information contained herein is for informational purposes only, and is subject to change without notice. While every precaution has been taken in the preparation of this document, it may contain technical inaccuracies, omissions and typographical errors, and AMD is under no obligation to update or otherwise correct this information. Advanced Micro Devices, Inc. makes no representations or warranties with respect to the accuracy or completeness of the contents of this document, and assumes no liability of any kind, including the implied warranties of noninfringement, merchantability or fitness for particular purposes, with respect to the operation or use of AMD hardware, software or other products described herein. No license, including implied or arising by estoppel, to any intellectual property rights is granted by this document. Terms and limitations applicable to the purchase or use of AMD’s products are as set forth in a signed agreement between the parties or in AMD's Standard Terms and Conditions of Sale. AMD, the AMD Arrow logo, and combinations thereof are trademarks of Advanced Micro Devices, Inc. Other product names used in this publication are for identification purposes only and may be trademarks of their respective companies. USE OF THIS PRODUCT IN ANY MANNER THAT COMPLIES WITH THE MPEG ACTUAL OR DE FACTO VIDEO AND/OR AUDIO STANDARDS IS EXPRESSLY PROHIBITED WITHOUT ALL NECESSARY LICENSES UNDER APPLICABLE PATENTS. SUCH LICENSES MAY BE ACQUIRED FROM VARIOUS THIRD PARTIES INCLUDING, BUT NOT LIMITED TO, IN THE MPEG PATENT PORTFOLIO, WHICH LICENSE IS AVAILABLE FROM MPEG LA, L.L.C., 6312 S. FIDDLERS GREEN CIRCLE, SUITE 400E, GREENWOOD VILLAGE, COLORADO 80111. Windows® is a registered trademark of Microsoft Corporation. DirectX ® is a registered trademark of Microsoft Corporation. OpenCL™ is a trademark of Apple Inc. used by permission by Khronos. Other names are for informational purposes only and may be trademarks of their respective owners. © 2014 Advanced Micro Devices, Inc. All rights reserved. MEDIA SDK 1.1 AMF 37 WEBINAR | OCTOBER 22, 2014