CHK(spWriterAttributes->SetUnknown(MF_SINK_WRITER_D3D_MANAGER, spDeviceManager.Get())); CHK(spWriterAttributes->SetUINT32(MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS, true)); ComPtr<IMFSinkWriter> spSinkWriter; CHK(MFCreateSinkWriterFromURL(L".mp4", spOutputByteStream.Get(), spWriterAttributes.Get(), &spSinkWriter)); DWORD streamIndex; CHK(spSinkWriter->AddStream(spTypeOut.Get(), &streamIndex)); CHK(spSinkWriter->SetInputMediaType(streamIndex, spTypeShared.Get(), nullptr)); // // Write some data // CHK(spSinkWriter->BeginWriting()); ComPtr<IMFSample> spSample; DWORD flags = 0; double progress = 0.; long long time = 0; while (!token.is_canceled() && (time < DURATION) && !(flags & MF_SOURCE_READERF_ENDOFSTREAM)) { // Notify caller of progress double newProgress = 100. * (double)time / (double)DURATION; if (newProgress - progress >= 1.) { _preview.Set(spSample.Get()); progress = newProgress; reporter.report(progress);