| Index: chromecast/media/cma/ipc_streamer/av_streamer_proxy.cc
|
| diff --git a/chromecast/media/cma/ipc_streamer/av_streamer_proxy.cc b/chromecast/media/cma/ipc_streamer/av_streamer_proxy.cc
|
| deleted file mode 100644
|
| index dcb2694bd30cf0af1f0a3731b488041f9ac63fc8..0000000000000000000000000000000000000000
|
| --- a/chromecast/media/cma/ipc_streamer/av_streamer_proxy.cc
|
| +++ /dev/null
|
| @@ -1,216 +0,0 @@
|
| -// Copyright 2014 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.
|
| -
|
| -#include "chromecast/media/cma/ipc_streamer/av_streamer_proxy.h"
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/location.h"
|
| -#include "base/single_thread_task_runner.h"
|
| -#include "base/threading/thread_task_runner_handle.h"
|
| -#include "chromecast/media/cma/base/coded_frame_provider.h"
|
| -#include "chromecast/media/cma/base/decoder_buffer_base.h"
|
| -#include "chromecast/media/cma/ipc/media_memory_chunk.h"
|
| -#include "chromecast/media/cma/ipc/media_message.h"
|
| -#include "chromecast/media/cma/ipc/media_message_fifo.h"
|
| -#include "chromecast/media/cma/ipc/media_message_type.h"
|
| -#include "chromecast/media/cma/ipc_streamer/audio_decoder_config_marshaller.h"
|
| -#include "chromecast/media/cma/ipc_streamer/decoder_buffer_base_marshaller.h"
|
| -#include "chromecast/media/cma/ipc_streamer/video_decoder_config_marshaller.h"
|
| -
|
| -namespace chromecast {
|
| -namespace media {
|
| -
|
| -AvStreamerProxy::AvStreamerProxy()
|
| - : is_running_(false),
|
| - pending_read_(false),
|
| - pending_av_data_(false),
|
| - weak_factory_(this) {
|
| - weak_this_ = weak_factory_.GetWeakPtr();
|
| - thread_checker_.DetachFromThread();
|
| -}
|
| -
|
| -AvStreamerProxy::~AvStreamerProxy() {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| -}
|
| -
|
| -void AvStreamerProxy::SetCodedFrameProvider(
|
| - std::unique_ptr<CodedFrameProvider> frame_provider) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| - DCHECK(!frame_provider_);
|
| - frame_provider_.reset(frame_provider.release());
|
| -}
|
| -
|
| -void AvStreamerProxy::SetMediaMessageFifo(
|
| - std::unique_ptr<MediaMessageFifo> fifo) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| - DCHECK(!fifo_);
|
| - fifo_.reset(fifo.release());
|
| -}
|
| -
|
| -void AvStreamerProxy::Start() {
|
| - DCHECK(!is_running_);
|
| -
|
| - is_running_ = true;
|
| - RequestBufferIfNeeded();
|
| -}
|
| -
|
| -void AvStreamerProxy::StopAndFlush(const base::Closure& done_cb) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| - DCHECK(!done_cb.is_null());
|
| -
|
| - pending_av_data_ = false;
|
| - pending_audio_config_ = ::media::AudioDecoderConfig();
|
| - pending_video_config_ = ::media::VideoDecoderConfig();
|
| - pending_buffer_ = scoped_refptr<DecoderBufferBase>();
|
| -
|
| - pending_read_ = false;
|
| - is_running_ = false;
|
| -
|
| - // If there's another pending Flush, for example, the pipeline is stopped
|
| - // while another seek is pending, then we don't need to call Flush again. Save
|
| - // the callback and fire it later when Flush is done.
|
| - pending_stop_flush_cb_list_.push_back(done_cb);
|
| - if (pending_stop_flush_cb_list_.size() == 1) {
|
| - frame_provider_->Flush(
|
| - base::Bind(&AvStreamerProxy::OnStopAndFlushDone, weak_this_));
|
| - }
|
| -}
|
| -
|
| -void AvStreamerProxy::OnStopAndFlushDone() {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| -
|
| - // Flush is done. Fire all the "flush done" callbacks in order. This is
|
| - // necessary to guarantee proper state transition in pipeline.
|
| - for (const auto& cb : pending_stop_flush_cb_list_) {
|
| - cb.Run();
|
| - }
|
| - pending_stop_flush_cb_list_.clear();
|
| -}
|
| -
|
| -void AvStreamerProxy::OnFifoReadEvent() {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| -
|
| - // Some enough space might have been released
|
| - // to accommodate the pending data.
|
| - if (pending_av_data_)
|
| - ProcessPendingData();
|
| -}
|
| -
|
| -void AvStreamerProxy::RequestBufferIfNeeded() {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| -
|
| - if (!is_running_ || pending_read_ || pending_av_data_)
|
| - return;
|
| -
|
| - // |frame_provider_| is assumed to run on the same message loop.
|
| - // Add a BindToCurrentLoop if that's not the case in the future.
|
| - pending_read_ = true;
|
| - frame_provider_->Read(base::Bind(&AvStreamerProxy::OnNewBuffer, weak_this_));
|
| -}
|
| -
|
| -void AvStreamerProxy::OnNewBuffer(
|
| - const scoped_refptr<DecoderBufferBase>& buffer,
|
| - const ::media::AudioDecoderConfig& audio_config,
|
| - const ::media::VideoDecoderConfig& video_config) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| -
|
| - pending_read_ = false;
|
| -
|
| - if (buffer->end_of_stream())
|
| - is_running_ = false;
|
| -
|
| - DCHECK(!pending_av_data_);
|
| - pending_av_data_ = true;
|
| -
|
| - pending_buffer_ = buffer;
|
| - pending_audio_config_ = audio_config;
|
| - pending_video_config_ = video_config;
|
| -
|
| - ProcessPendingData();
|
| -}
|
| -
|
| -void AvStreamerProxy::ProcessPendingData() {
|
| - if (pending_audio_config_.IsValidConfig()) {
|
| - if (!SendAudioDecoderConfig(pending_audio_config_))
|
| - return;
|
| - pending_audio_config_ = ::media::AudioDecoderConfig();
|
| - }
|
| -
|
| - if (pending_video_config_.IsValidConfig()) {
|
| - if (!SendVideoDecoderConfig(pending_video_config_))
|
| - return;
|
| - pending_video_config_ = ::media::VideoDecoderConfig();
|
| - }
|
| -
|
| - if (pending_buffer_.get()) {
|
| - if (!SendBuffer(pending_buffer_))
|
| - return;
|
| - pending_buffer_ = scoped_refptr<DecoderBufferBase>();
|
| - }
|
| -
|
| - pending_av_data_ = false;
|
| - base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&AvStreamerProxy::RequestBufferIfNeeded, weak_this_));
|
| -}
|
| -
|
| -bool AvStreamerProxy::SendAudioDecoderConfig(
|
| - const ::media::AudioDecoderConfig& config) {
|
| - // Create a dummy message to calculate first the message size.
|
| - std::unique_ptr<MediaMessage> dummy_msg(
|
| - MediaMessage::CreateDummyMessage(AudioConfigMediaMsg));
|
| - AudioDecoderConfigMarshaller::Write(config, dummy_msg.get());
|
| -
|
| - // Create the real message and write the actual content.
|
| - std::unique_ptr<MediaMessage> msg(MediaMessage::CreateMessage(
|
| - AudioConfigMediaMsg, base::Bind(&MediaMessageFifo::ReserveMemory,
|
| - base::Unretained(fifo_.get())),
|
| - dummy_msg->content_size()));
|
| - if (!msg)
|
| - return false;
|
| -
|
| - AudioDecoderConfigMarshaller::Write(config, msg.get());
|
| - return true;
|
| -}
|
| -
|
| -bool AvStreamerProxy::SendVideoDecoderConfig(
|
| - const ::media::VideoDecoderConfig& config) {
|
| - // Create a dummy message to calculate first the message size.
|
| - std::unique_ptr<MediaMessage> dummy_msg(
|
| - MediaMessage::CreateDummyMessage(VideoConfigMediaMsg));
|
| - VideoDecoderConfigMarshaller::Write(config, dummy_msg.get());
|
| -
|
| - // Create the real message and write the actual content.
|
| - std::unique_ptr<MediaMessage> msg(MediaMessage::CreateMessage(
|
| - VideoConfigMediaMsg, base::Bind(&MediaMessageFifo::ReserveMemory,
|
| - base::Unretained(fifo_.get())),
|
| - dummy_msg->content_size()));
|
| - if (!msg)
|
| - return false;
|
| -
|
| - VideoDecoderConfigMarshaller::Write(config, msg.get());
|
| - return true;
|
| -}
|
| -
|
| -bool AvStreamerProxy::SendBuffer(
|
| - const scoped_refptr<DecoderBufferBase>& buffer) {
|
| - // Create a dummy message to calculate first the message size.
|
| - std::unique_ptr<MediaMessage> dummy_msg(
|
| - MediaMessage::CreateDummyMessage(FrameMediaMsg));
|
| - DecoderBufferBaseMarshaller::Write(buffer, dummy_msg.get());
|
| -
|
| - // Create the real message and write the actual content.
|
| - std::unique_ptr<MediaMessage> msg(MediaMessage::CreateMessage(
|
| - FrameMediaMsg, base::Bind(&MediaMessageFifo::ReserveMemory,
|
| - base::Unretained(fifo_.get())),
|
| - dummy_msg->content_size()));
|
| - if (!msg)
|
| - return false;
|
| -
|
| - DecoderBufferBaseMarshaller::Write(buffer, msg.get());
|
| - return true;
|
| -}
|
| -
|
| -} // namespace media
|
| -} // namespace chromecast
|
|
|