Index: chromecast/media/cma/pipeline/av_pipeline_impl.cc |
diff --git a/chromecast/media/cma/pipeline/av_pipeline_impl.cc b/chromecast/media/cma/pipeline/av_pipeline_impl.cc |
index ab0a2a75d0c319bc5db3ab5a8f56666c784a361d..7046b01d44f97859c0bf7d0a1c9df9e77b9ec9fa 100644 |
--- a/chromecast/media/cma/pipeline/av_pipeline_impl.cc |
+++ b/chromecast/media/cma/pipeline/av_pipeline_impl.cc |
@@ -9,16 +9,20 @@ |
#include "base/single_thread_task_runner.h" |
#include "base/strings/string_number_conversions.h" |
#include "base/thread_task_runner_handle.h" |
-#include "chromecast/media/base/decrypt_context.h" |
+#include "chromecast/media/base/decrypt_context_impl.h" |
#include "chromecast/media/cdm/browser_cdm_cast.h" |
-#include "chromecast/media/cma/backend/media_clock_device.h" |
-#include "chromecast/media/cma/backend/media_component_device.h" |
#include "chromecast/media/cma/base/buffering_frame_provider.h" |
#include "chromecast/media/cma/base/buffering_state.h" |
+#include "chromecast/media/cma/base/cast_decoder_buffer_impl.h" |
#include "chromecast/media/cma/base/cma_logging.h" |
#include "chromecast/media/cma/base/coded_frame_provider.h" |
#include "chromecast/media/cma/base/decoder_buffer_base.h" |
#include "chromecast/media/cma/pipeline/decrypt_util.h" |
+#include "chromecast/media/cma/pipeline/frame_status_cb_impl.h" |
+#include "chromecast/media/cma/pipeline/media_component_device_client_impl.h" |
+#include "chromecast/public/media/cast_decrypt_config.h" |
+#include "chromecast/public/media/media_clock_device.h" |
+#include "chromecast/public/media/media_component_device.h" |
#include "media/base/audio_decoder_config.h" |
#include "media/base/bind_to_current_loop.h" |
#include "media/base/buffers.h" |
@@ -33,9 +37,8 @@ const int kNoCallbackId = -1; |
} // namespace |
-AvPipelineImpl::AvPipelineImpl( |
- MediaComponentDevice* media_component_device, |
- const UpdateConfigCB& update_config_cb) |
+AvPipelineImpl::AvPipelineImpl(MediaComponentDevice* media_component_device, |
+ const UpdateConfigCB& update_config_cb) |
: update_config_cb_(update_config_cb), |
media_component_device_(media_component_device), |
state_(kUninitialized), |
@@ -56,7 +59,7 @@ AvPipelineImpl::AvPipelineImpl( |
AvPipelineImpl::~AvPipelineImpl() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- media_component_device_->SetClient(MediaComponentDevice::Client()); |
+ media_component_device_->SetClient(nullptr); |
if (media_keys_ && media_keys_callback_id_ != kNoCallbackId) |
media_keys_->UnregisterPlayer(media_keys_callback_id_); |
@@ -93,9 +96,8 @@ bool AvPipelineImpl::Initialize() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
DCHECK_EQ(state_, kUninitialized); |
- MediaComponentDevice::Client client; |
- client.eos_cb = base::Bind(&AvPipelineImpl::OnEos, weak_this_); |
- media_component_device_->SetClient(client); |
+ media_component_device_->SetClient(new MediaComponentDeviceClientImpl( |
+ base::Bind(&AvPipelineImpl::OnEos, weak_this_))); |
if (!media_component_device_->SetState(MediaComponentDevice::kStateIdle)) |
return false; |
@@ -110,7 +112,7 @@ bool AvPipelineImpl::StartPlayingFrom( |
// Media time where rendering should start |
// and switch to a state where the audio device accepts incoming buffers. |
- if (!media_component_device_->SetStartPts(time) || |
+ if (!media_component_device_->SetStartPts(time.InMicroseconds()) || |
!media_component_device_->SetState(MediaComponentDevice::kStatePaused)) { |
return false; |
} |
@@ -252,7 +254,7 @@ void AvPipelineImpl::ProcessPendingBuffer() { |
enable_feeding_ = false; |
} |
- scoped_refptr<DecryptContext> decrypt_context; |
+ scoped_ptr<DecryptContextImpl> decrypt_context; |
if (!pending_buffer_->end_of_stream() && |
pending_buffer_->decrypt_config()) { |
// Verify that CDM has the key ID. |
@@ -277,7 +279,7 @@ void AvPipelineImpl::ProcessPendingBuffer() { |
crypto::SymmetricKey* key = decrypt_context->GetKey(); |
if (key != NULL) { |
pending_buffer_ = DecryptDecoderBuffer(pending_buffer_, key); |
- decrypt_context = scoped_refptr<DecryptContext>(); |
+ decrypt_context.reset(); |
} |
} |
@@ -288,9 +290,9 @@ void AvPipelineImpl::ProcessPendingBuffer() { |
} |
MediaComponentDevice::FrameStatus status = media_component_device_->PushFrame( |
- decrypt_context, |
- pending_buffer_, |
- base::Bind(&AvPipelineImpl::OnFramePushed, weak_this_)); |
+ decrypt_context.release(), new CastDecoderBufferImpl(pending_buffer_), |
+ new FrameStatusCBImpl( |
+ base::Bind(&AvPipelineImpl::OnFramePushed, weak_this_))); |
pending_buffer_ = scoped_refptr<DecoderBufferBase>(); |
pending_push_ = (status == MediaComponentDevice::kFramePending); |
@@ -335,9 +337,8 @@ void AvPipelineImpl::OnFrameBuffered( |
if (!buffering_state_.get()) |
return; |
- if (!buffer->end_of_stream() && |
- (buffered_time_ == ::media::kNoTimestamp() || |
- buffered_time_ < buffer->timestamp())) { |
+ if (!buffer->end_of_stream() && (buffered_time_ == ::media::kNoTimestamp() || |
+ buffered_time_ < buffer->timestamp())) { |
buffered_time_ = buffer->timestamp(); |
} |
@@ -360,7 +361,7 @@ void AvPipelineImpl::UpdatePlayableFrames() { |
if (non_playable_frame->end_of_stream()) { |
buffering_state_->NotifyEos(); |
} else { |
- const ::media::DecryptConfig* decrypt_config = |
+ const CastDecryptConfig* decrypt_config = |
non_playable_frame->decrypt_config(); |
if (decrypt_config && |
!(media_keys_ && |