MFXVideoDECODE_DecodeFrameAsync() is, as documentation states, asynchronous but eventually I have to synchronize anyway ( block thread execution to wait for the result ) using SyncOperation(). Is there any way to be notified by a callback when the operation ends and the output surface can be read safely ?
1. You need synchronize explicitly only if reading data from video memory using CPU, or using system memory output from Media SDK to verify data is available, if you are working with opaque or video memory and pass surface to encoder or VPP you don't need to synchronize explicitly.
2. Asynchronouns mean you can submit several frames for decoding, after that retrive result for first one, so actually while you are retiriving result for first frame, consequent ones are being decoded.