// 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_
