// Copyright 2013 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_VIDEO_MOCK_VIDEO_DECODE_ACCELERATOR_H_
#define MEDIA_VIDEO_MOCK_VIDEO_DECODE_ACCELERATOR_H_

#include "video_decode_accelerator.h"

#include <stdint.h>

#include <vector>

#include "media/base/bitstream_buffer.h"
#include "media/base/video_decoder_config.h"
#include "media/video/picture.h"
#include "testing/gmock/include/gmock/gmock.h"

namespace media {

// Remember to use the default action of Destroy() when using EXPECT_CALL.
// Otherwise, the mock will be leaked and the test runner will complain.
class MockVideoDecodeAccelerator : public VideoDecodeAccelerator {
 public:
  MockVideoDecodeAccelerator();

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

  ~MockVideoDecodeAccelerator() override;

  MOCK_METHOD2(Initialize, bool(const Config& config, Client* client));
  MOCK_METHOD1(Decode, void(BitstreamBuffer bitstream_buffer));
  MOCK_METHOD2(Decode,
               void(scoped_refptr<DecoderBuffer> buffer, int32_t bitstream_id));
  MOCK_METHOD1(AssignPictureBuffers,
               void(const std::vector<PictureBuffer>& buffers));
  MOCK_METHOD1(ReusePictureBuffer, void(int32_t picture_buffer_id));
  MOCK_METHOD0(Flush, void());
  MOCK_METHOD0(Reset, void());
  MOCK_METHOD0(Destroy, void());
  MOCK_METHOD2(TryToSetupDecodeOnSeparateThread,
               bool(const base::WeakPtr<Client>&,
                    const scoped_refptr<base::SingleThreadTaskRunner>&));

 private:
  void DeleteThis();
};

}  // namespace media

#endif  // MEDIA_VIDEO_MOCK_VIDEO_DECODE_ACCELERATOR_H_
