| Index: media/video/fake_video_encode_accelerator.cc
|
| diff --git a/media/cast/test/fake_video_encode_accelerator.cc b/media/video/fake_video_encode_accelerator.cc
|
| similarity index 50%
|
| rename from media/cast/test/fake_video_encode_accelerator.cc
|
| rename to media/video/fake_video_encode_accelerator.cc
|
| index 23a6fb315e338d5686b821e8f911447b9602c719..4ca7a236ca1e1a10b8e9b8a4fb57e86f569fd4ce 100644
|
| --- a/media/cast/test/fake_video_encode_accelerator.cc
|
| +++ b/media/video/fake_video_encode_accelerator.cc
|
| @@ -2,7 +2,7 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "media/cast/test/fake_video_encode_accelerator.h"
|
| +#include "media/video/fake_video_encode_accelerator.h"
|
|
|
| #include "base/bind.h"
|
| #include "base/location.h"
|
| @@ -10,23 +10,17 @@
|
| #include "base/single_thread_task_runner.h"
|
|
|
| namespace media {
|
| -namespace cast {
|
| -namespace test {
|
|
|
| static const unsigned int kMinimumInputCount = 1;
|
| static const size_t kMinimumOutputBufferSize = 123456;
|
|
|
| FakeVideoEncodeAccelerator::FakeVideoEncodeAccelerator(
|
| - const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
|
| - std::vector<uint32>* stored_bitrates)
|
| + const scoped_refptr<base::SingleThreadTaskRunner>& task_runner)
|
| : task_runner_(task_runner),
|
| - stored_bitrates_(stored_bitrates),
|
| - client_(NULL),
|
| - first_(true),
|
| will_initialization_succeed_(true),
|
| - weak_this_factory_(this) {
|
| - DCHECK(stored_bitrates_);
|
| -}
|
| + client_(NULL),
|
| + next_frame_is_first_frame_(true),
|
| + weak_this_factory_(this) {}
|
|
|
| FakeVideoEncodeAccelerator::~FakeVideoEncodeAccelerator() {
|
| weak_this_factory_.InvalidateWeakPtrs();
|
| @@ -34,22 +28,33 @@ FakeVideoEncodeAccelerator::~FakeVideoEncodeAccelerator() {
|
|
|
| std::vector<VideoEncodeAccelerator::SupportedProfile>
|
| FakeVideoEncodeAccelerator::GetSupportedProfiles() {
|
| - return std::vector<VideoEncodeAccelerator::SupportedProfile>();
|
| + std::vector<VideoEncodeAccelerator::SupportedProfile> profiles;
|
| + SupportedProfile profile;
|
| + profile.max_resolution.SetSize(1920, 1088);
|
| + profile.max_framerate_numerator = 30;
|
| + profile.max_framerate_denominator = 1;
|
| +
|
| + profile.profile = media::H264PROFILE_MAIN;
|
| + profiles.push_back(profile);
|
| + profile.profile = media::VP8PROFILE_ANY;
|
| + profiles.push_back(profile);
|
| + return profiles;
|
| }
|
|
|
| bool FakeVideoEncodeAccelerator::Initialize(
|
| - media::VideoFrame::Format input_format,
|
| + VideoFrame::Format input_format,
|
| const gfx::Size& input_visible_size,
|
| VideoCodecProfile output_profile,
|
| uint32 initial_bitrate,
|
| Client* client) {
|
| - if (!will_initialization_succeed_)
|
| + if (!will_initialization_succeed_) {
|
| return false;
|
| - client_ = client;
|
| - if (output_profile != media::VP8PROFILE_ANY &&
|
| - output_profile != media::H264PROFILE_MAIN) {
|
| + }
|
| + if (output_profile == VIDEO_CODEC_PROFILE_UNKNOWN ||
|
| + output_profile > VIDEO_CODEC_PROFILE_MAX) {
|
| return false;
|
| }
|
| + client_ = client;
|
| task_runner_->PostTask(
|
| FROM_HERE,
|
| base::Bind(&FakeVideoEncodeAccelerator::DoRequireBitstreamBuffers,
|
| @@ -60,45 +65,41 @@ bool FakeVideoEncodeAccelerator::Initialize(
|
| return true;
|
| }
|
|
|
| -void FakeVideoEncodeAccelerator::Encode(const scoped_refptr<VideoFrame>& frame,
|
| - bool force_keyframe) {
|
| +void FakeVideoEncodeAccelerator::Encode(
|
| + const scoped_refptr<VideoFrame>& frame,
|
| + bool force_keyframe) {
|
| DCHECK(client_);
|
| - DCHECK(!available_buffer_ids_.empty());
|
| -
|
| - // Fake that we have encoded the frame; resulting in using the full output
|
| - // buffer.
|
| - int32 id = available_buffer_ids_.front();
|
| - available_buffer_ids_.pop_front();
|
| -
|
| - bool is_key_fame = force_keyframe;
|
| - if (first_) {
|
| - is_key_fame = true;
|
| - first_ = false;
|
| - }
|
| - task_runner_->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&FakeVideoEncodeAccelerator::DoBitstreamBufferReady,
|
| - weak_this_factory_.GetWeakPtr(),
|
| - id,
|
| - kMinimumOutputBufferSize,
|
| - is_key_fame));
|
| + queued_frames_.push(force_keyframe);
|
| + EncodeTask();
|
| }
|
|
|
| void FakeVideoEncodeAccelerator::UseOutputBitstreamBuffer(
|
| const BitstreamBuffer& buffer) {
|
| - available_buffer_ids_.push_back(buffer.id());
|
| + available_buffers_.push_back(buffer);
|
| + EncodeTask();
|
| }
|
|
|
| void FakeVideoEncodeAccelerator::RequestEncodingParametersChange(
|
| uint32 bitrate,
|
| uint32 framerate) {
|
| - stored_bitrates_->push_back(bitrate);
|
| + stored_bitrates_.push_back(bitrate);
|
| }
|
|
|
| void FakeVideoEncodeAccelerator::Destroy() { delete this; }
|
|
|
| void FakeVideoEncodeAccelerator::SendDummyFrameForTesting(bool key_frame) {
|
| - DoBitstreamBufferReady(0, 23, key_frame);
|
| + task_runner_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&FakeVideoEncodeAccelerator::DoBitstreamBufferReady,
|
| + weak_this_factory_.GetWeakPtr(),
|
| + 0,
|
| + 23,
|
| + key_frame));
|
| +}
|
| +
|
| +void FakeVideoEncodeAccelerator::SetWillInitializationSucceed(
|
| + bool will_initialization_succeed) {
|
| + will_initialization_succeed_ = will_initialization_succeed;
|
| }
|
|
|
| void FakeVideoEncodeAccelerator::DoRequireBitstreamBuffers(
|
| @@ -109,13 +110,31 @@ void FakeVideoEncodeAccelerator::DoRequireBitstreamBuffers(
|
| input_count, input_coded_size, output_buffer_size);
|
| }
|
|
|
| +void FakeVideoEncodeAccelerator::EncodeTask() {
|
| + while (!queued_frames_.empty() && !available_buffers_.empty()) {
|
| + bool force_key_frame = queued_frames_.front();
|
| + queued_frames_.pop();
|
| + int32 bitstream_buffer_id = available_buffers_.front().id();
|
| + available_buffers_.pop_front();
|
| + bool key_frame = next_frame_is_first_frame_ || force_key_frame;
|
| + next_frame_is_first_frame_ = false;
|
| + task_runner_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&FakeVideoEncodeAccelerator::DoBitstreamBufferReady,
|
| + weak_this_factory_.GetWeakPtr(),
|
| + bitstream_buffer_id,
|
| + kMinimumOutputBufferSize,
|
| + key_frame));
|
| + }
|
| +}
|
| +
|
| void FakeVideoEncodeAccelerator::DoBitstreamBufferReady(
|
| int32 bitstream_buffer_id,
|
| size_t payload_size,
|
| bool key_frame) const {
|
| - client_->BitstreamBufferReady(bitstream_buffer_id, payload_size, key_frame);
|
| + client_->BitstreamBufferReady(bitstream_buffer_id,
|
| + payload_size,
|
| + key_frame);
|
| }
|
|
|
| -} // namespace test
|
| -} // namespace cast
|
| } // namespace media
|
|
|