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..010ead515ce6420cd65efa473414777bcf28945d 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/base/time_conversions.h" |
#include "chromecast/media/base/decrypt_context.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/backend_client_callbacks.h" |
#include "chromecast/media/cma/base/buffering_frame_provider.h" |
#include "chromecast/media/cma/base/buffering_state.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/base/decoder_buffer_impl.h" |
#include "chromecast/media/cma/pipeline/decrypt_util.h" |
+#include "chromecast/public/media/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,14 +37,13 @@ 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), |
- buffered_time_(::media::kNoTimestamp()), |
- playable_buffered_time_(::media::kNoTimestamp()), |
+ buffered_time_(TimeDelta::Invalid()), |
+ playable_buffered_time_(TimeDelta::Invalid()), |
enable_feeding_(false), |
pending_read_(false), |
pending_push_(false), |
@@ -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,8 @@ 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) || |
+ TimeDelta start_time = FromBaseTimeDelta(time); |
+ if (!media_component_device_->SetStartPts(start_time) || |
!media_component_device_->SetState(MediaComponentDevice::kStatePaused)) { |
return false; |
} |
@@ -149,8 +152,8 @@ void AvPipelineImpl::Flush(const base::Closure& done_cb) { |
// Finally, remove any frames left in the frame provider. |
pending_read_ = false; |
- buffered_time_ = ::media::kNoTimestamp(); |
- playable_buffered_time_ = ::media::kNoTimestamp(); |
+ buffered_time_ = TimeDelta::Invalid(); |
gunsch
2015/07/27 17:14:49
To me, this re-affirms not having our own TimeDelt
servolk
2015/07/27 21:25:47
If our goal is to fully decouple CMA backend code
halliwell
2015/07/28 02:19:35
I've removed TimeDelta. It made initial refactori
|
+ playable_buffered_time_ = TimeDelta::Invalid(); |
non_playable_frames_.clear(); |
frame_provider_->Flush(done_cb); |
} |
@@ -282,15 +285,17 @@ void AvPipelineImpl::ProcessPendingBuffer() { |
} |
if (!pending_buffer_->end_of_stream() && buffering_state_.get()) { |
- base::TimeDelta timestamp = pending_buffer_->timestamp(); |
+ base::TimeDelta timestamp = ToBaseTimeDelta(pending_buffer_->timestamp()); |
if (timestamp != ::media::kNoTimestamp()) |
buffering_state_->SetMaxRenderingTime(timestamp); |
} |
+ CastKeySystem key_system = |
+ decrypt_context ? decrypt_context->key_system() : KEY_SYSTEM_NONE; |
MediaComponentDevice::FrameStatus status = media_component_device_->PushFrame( |
- decrypt_context, |
- pending_buffer_, |
- base::Bind(&AvPipelineImpl::OnFramePushed, weak_this_)); |
+ key_system, new DecoderBufferImpl(pending_buffer_), |
+ new FrameStatusCBImpl( |
+ base::Bind(&AvPipelineImpl::OnFramePushed, weak_this_))); |
pending_buffer_ = scoped_refptr<DecoderBufferBase>(); |
pending_push_ = (status == MediaComponentDevice::kFramePending); |
@@ -335,14 +340,13 @@ 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_ == TimeDelta::Invalid() || |
+ buffered_time_ < buffer->timestamp())) { |
buffered_time_ = buffer->timestamp(); |
} |
if (is_at_max_capacity) |
- buffering_state_->NotifyMaxCapacity(buffered_time_); |
+ buffering_state_->NotifyMaxCapacity(ToBaseTimeDelta(buffered_time_)); |
// No need to update the list of playable frames, |
// if we are already blocking on a frame. |
@@ -360,7 +364,7 @@ void AvPipelineImpl::UpdatePlayableFrames() { |
if (non_playable_frame->end_of_stream()) { |
buffering_state_->NotifyEos(); |
} else { |
- const ::media::DecryptConfig* decrypt_config = |
+ const DecryptConfig* decrypt_config = |
non_playable_frame->decrypt_config(); |
if (decrypt_config && |
!(media_keys_ && |
@@ -370,10 +374,11 @@ void AvPipelineImpl::UpdatePlayableFrames() { |
break; |
} |
- if (playable_buffered_time_ == ::media::kNoTimestamp() || |
+ if (playable_buffered_time_ == TimeDelta::Invalid() || |
playable_buffered_time_ < non_playable_frame->timestamp()) { |
playable_buffered_time_ = non_playable_frame->timestamp(); |
- buffering_state_->SetBufferedTime(playable_buffered_time_); |
+ buffering_state_->SetBufferedTime( |
+ ToBaseTimeDelta(playable_buffered_time_)); |
} |
} |