#ifndef CHROMECAST_MEDIA_COMMON_MEDIA_PIPELINE_BACKEND_WRAPPER_H_
#define CHROMECAST_MEDIA_COMMON_MEDIA_PIPELINE_BACKEND_WRAPPER_H_
#include <stdint.h>
#include <memory>
#include "chromecast/media/api/cma_backend.h"
#include "chromecast/media/common/media_resource_tracker.h"
#include "chromecast/public/media/media_pipeline_device_params.h"
namespace chromecast {
namespace media {
enum class AudioContentType;
class AudioDecoderWrapper;
class VideoDecoderWrapper;
class MediaPipelineBackend;
class MediaPipelineBackendManager;
class DecoderCreatorCmaBackend;
class MediaPipelineBackendWrapper : public CmaBackend {
public:
MediaPipelineBackendWrapper(
const media::MediaPipelineDeviceParams& params,
base::WeakPtr<MediaPipelineBackendManager> backend_manager,
MediaResourceTracker* media_resource_tracker);
MediaPipelineBackendWrapper(const MediaPipelineBackendWrapper&) = delete;
MediaPipelineBackendWrapper& operator=(const MediaPipelineBackendWrapper&) =
delete;
~MediaPipelineBackendWrapper() override;
void Revoke();
AudioDecoder* CreateAudioDecoder() override;
VideoDecoder* CreateVideoDecoder() override;
bool Initialize() override;
bool Start(int64_t start_pts) override;
void Stop() override;
bool Pause() override;
bool Resume() override;
int64_t GetCurrentPts() override;
bool SetPlaybackRate(float rate) override;
void LogicalPause() override;
void LogicalResume() override;
private:
std::unique_ptr<AudioDecoderWrapper> audio_decoder_;
std::unique_ptr<VideoDecoderWrapper> video_decoder_;
bool revoked_;
std::unique_ptr<DecoderCreatorCmaBackend> backend_;
const base::WeakPtr<MediaPipelineBackendManager> backend_manager_;
const AudioContentType content_type_;
};
}
}
#endif