chromium/chromecast/media/cma/backend/video_decoder_null.h

// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROMECAST_MEDIA_CMA_BACKEND_VIDEO_DECODER_NULL_H_
#define CHROMECAST_MEDIA_CMA_BACKEND_VIDEO_DECODER_NULL_H_

#include <stdint.h>

#include "base/memory/weak_ptr.h"
#include "chromecast/media/cma/backend/video_decoder_for_mixer.h"

namespace chromecast {
namespace media {

class VideoDecoderNull : public VideoDecoderForMixer {
 public:
  VideoDecoderNull();

  VideoDecoderNull(const VideoDecoderNull&) = delete;
  VideoDecoderNull& operator=(const VideoDecoderNull&) = delete;

  ~VideoDecoderNull() override;

  // MediaPipelineBackend::VideoDecoder implementation:
  void SetDelegate(Delegate* delegate) override;
  MediaPipelineBackend::BufferStatus PushBuffer(
      CastDecoderBuffer* buffer) override;
  void GetStatistics(Statistics* statistics) override;
  bool SetConfig(const VideoConfig& config) override;

  bool Initialize() override;
  void SetObserver(VideoDecoderForMixer::Observer* observer) override;
  bool Start(int64_t start_pts, bool need_avsync) override;
  void Stop() override;
  bool Pause() override;
  bool Resume() override;
  bool GetCurrentPts(int64_t* timestamp, int64_t* pts) const override;
  bool SetPlaybackRate(float rate) override;
  bool SetPts(int64_t timestamp, int64_t pts) override;
  int64_t GetDroppedFrames() override;
  int64_t GetRepeatedFrames() override;
  int64_t GetOutputRefreshRate() override;
  int64_t GetCurrentContentRefreshRate() override;

 private:
  void OnEndOfStream();

  Delegate* delegate_;
  Observer* observer_;
  base::WeakPtrFactory<VideoDecoderNull> weak_factory_;
};

}  // namespace media
}  // namespace chromecast

#endif  // CHROMECAST_MEDIA_CMA_BACKEND_VIDEO_DECODER_NULL_H_