12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- // Copyright 2020 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef MEDIA_RENDERERS_WIN_MEDIA_ENGINE_EXTENSION_H_
- #define MEDIA_RENDERERS_WIN_MEDIA_ENGINE_EXTENSION_H_
- #include <mfapi.h>
- #include <mfmediaengine.h>
- #include <wrl.h>
- #include "base/synchronization/lock.h"
- namespace media {
- // Implement IMFMediaEngineExtension to load media source into the
- // IMFMediaEngine. See details from:
- // https://docs.microsoft.com/en-us/windows/win32/api/mfmediaengine/nn-mfmediaengine-imfmediaengineextension.
- //
- class MediaEngineExtension
- : public Microsoft::WRL::RuntimeClass<
- Microsoft::WRL::RuntimeClassFlags<
- Microsoft::WRL::RuntimeClassType::ClassicCom>,
- IMFMediaEngineExtension> {
- public:
- MediaEngineExtension();
- ~MediaEngineExtension() override;
- HRESULT RuntimeClassInitialize();
- // IMFMediaEngineExtension
- IFACEMETHODIMP CanPlayType(BOOL is_audio_only,
- BSTR mime_type,
- MF_MEDIA_ENGINE_CANPLAY* result) override;
- IFACEMETHODIMP BeginCreateObject(BSTR url_bstr,
- IMFByteStream* byte_stream,
- MF_OBJECT_TYPE type,
- IUnknown** cancel_cookie,
- IMFAsyncCallback* callback,
- IUnknown* state) override;
- IFACEMETHODIMP CancelObjectCreation(IUnknown* cancel_cookie) override;
- IFACEMETHODIMP EndCreateObject(IMFAsyncResult* result,
- IUnknown** ret_obj) override;
- HRESULT SetMediaSource(IUnknown* mf_media_source);
- void Shutdown();
- private:
- bool pending_create_object_ = false;
- // Need a lock to ensure thread safe operation between IMFMediaEngineExtension
- // method calls from MFMediaEngine threadpool thread and
- // SetMediaSource/Shutdown from MediaFoundationRenderer calling thread.
- base::Lock lock_;
- bool has_shutdown_ GUARDED_BY(lock_) = false;
- Microsoft::WRL::ComPtr<IUnknown> mf_media_source_ GUARDED_BY(lock_);
- };
- } // namespace media
- #endif // MEDIA_RENDERERS_WIN_MEDIA_ENGINE_EXTENSION_H_
|