Index: chromecast/media/cma/backend/video_decoder_default.cc |
diff --git a/chromecast/media/cma/backend/video_decoder_default.cc b/chromecast/media/cma/backend/video_decoder_default.cc |
index 552c7b557e18bece8172a439099d099472186f48..60ee8a5b14b0a007e4ed1dab7e0335de71e23ca4 100644 |
--- a/chromecast/media/cma/backend/video_decoder_default.cc |
+++ b/chromecast/media/cma/backend/video_decoder_default.cc |
@@ -4,41 +4,45 @@ |
#include "chromecast/media/cma/backend/video_decoder_default.h" |
-#include <limits> |
- |
-#include "base/bind.h" |
-#include "base/location.h" |
-#include "base/logging.h" |
-#include "base/threading/thread_task_runner_handle.h" |
-#include "chromecast/public/media/cast_decoder_buffer.h" |
+#include "base/memory/ptr_util.h" |
+#include "chromecast/media/cma/backend/media_sink_default.h" |
namespace chromecast { |
namespace media { |
-VideoDecoderDefault::VideoDecoderDefault() |
- : delegate_(nullptr), |
- last_push_pts_(std::numeric_limits<int64_t>::min()), |
- weak_factory_(this) {} |
+VideoDecoderDefault::VideoDecoderDefault() {} |
VideoDecoderDefault::~VideoDecoderDefault() {} |
+void VideoDecoderDefault::Start(base::TimeDelta start_pts) { |
+ DCHECK(!sink_); |
+ sink_ = base::MakeUnique<MediaSinkDefault>(delegate_, start_pts); |
+} |
+ |
+void VideoDecoderDefault::Stop() { |
+ DCHECK(sink_); |
+ sink_.reset(); |
+} |
+ |
+void VideoDecoderDefault::SetPlaybackRate(float rate) { |
+ DCHECK(sink_); |
+ sink_->SetPlaybackRate(rate); |
+} |
+ |
+base::TimeDelta VideoDecoderDefault::GetCurrentPts() { |
+ DCHECK(sink_); |
+ return sink_->GetCurrentPts(); |
+} |
+ |
void VideoDecoderDefault::SetDelegate(Delegate* delegate) { |
- DCHECK(delegate); |
+ DCHECK(!sink_); |
delegate_ = delegate; |
} |
MediaPipelineBackend::BufferStatus VideoDecoderDefault::PushBuffer( |
CastDecoderBuffer* buffer) { |
- DCHECK(delegate_); |
- DCHECK(buffer); |
- if (buffer->end_of_stream()) { |
- base::ThreadTaskRunnerHandle::Get()->PostTask( |
- FROM_HERE, base::Bind(&VideoDecoderDefault::OnEndOfStream, |
- weak_factory_.GetWeakPtr())); |
- } else { |
- last_push_pts_ = buffer->timestamp(); |
- } |
- return MediaPipelineBackend::kBufferSuccess; |
+ DCHECK(sink_); |
+ return sink_->PushBuffer(buffer); |
} |
void VideoDecoderDefault::GetStatistics(Statistics* statistics) { |
@@ -48,9 +52,5 @@ bool VideoDecoderDefault::SetConfig(const VideoConfig& config) { |
return true; |
} |
-void VideoDecoderDefault::OnEndOfStream() { |
- delegate_->OnEndOfStream(); |
-} |
- |
} // namespace media |
} // namespace chromecast |