| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chromecast/media/cma/ipc_streamer/coded_frame_provider_host.h" | 5 #include "chromecast/media/cma/ipc_streamer/coded_frame_provider_host.h" |
| 6 | 6 |
| 7 #include <utility> |
| 8 |
| 7 #include "base/bind.h" | 9 #include "base/bind.h" |
| 8 #include "base/callback_helpers.h" | 10 #include "base/callback_helpers.h" |
| 9 #include "chromecast/media/cma/base/decoder_buffer_base.h" | 11 #include "chromecast/media/cma/base/decoder_buffer_base.h" |
| 10 #include "chromecast/media/cma/ipc/media_message.h" | 12 #include "chromecast/media/cma/ipc/media_message.h" |
| 11 #include "chromecast/media/cma/ipc/media_message_fifo.h" | 13 #include "chromecast/media/cma/ipc/media_message_fifo.h" |
| 12 #include "chromecast/media/cma/ipc/media_message_type.h" | 14 #include "chromecast/media/cma/ipc/media_message_type.h" |
| 13 #include "chromecast/media/cma/ipc_streamer/audio_decoder_config_marshaller.h" | 15 #include "chromecast/media/cma/ipc_streamer/audio_decoder_config_marshaller.h" |
| 14 #include "chromecast/media/cma/ipc_streamer/decoder_buffer_base_marshaller.h" | 16 #include "chromecast/media/cma/ipc_streamer/decoder_buffer_base_marshaller.h" |
| 15 #include "chromecast/media/cma/ipc_streamer/video_decoder_config_marshaller.h" | 17 #include "chromecast/media/cma/ipc_streamer/video_decoder_config_marshaller.h" |
| 16 #include "media/base/decrypt_config.h" | 18 #include "media/base/decrypt_config.h" |
| 17 | 19 |
| 18 namespace chromecast { | 20 namespace chromecast { |
| 19 namespace media { | 21 namespace media { |
| 20 | 22 |
| 21 CodedFrameProviderHost::CodedFrameProviderHost( | 23 CodedFrameProviderHost::CodedFrameProviderHost( |
| 22 scoped_ptr<MediaMessageFifo> media_message_fifo) | 24 scoped_ptr<MediaMessageFifo> media_message_fifo) |
| 23 : fifo_(media_message_fifo.Pass()), | 25 : fifo_(std::move(media_message_fifo)), weak_factory_(this) { |
| 24 weak_factory_(this) { | |
| 25 weak_this_ = weak_factory_.GetWeakPtr(); | 26 weak_this_ = weak_factory_.GetWeakPtr(); |
| 26 thread_checker_.DetachFromThread(); | 27 thread_checker_.DetachFromThread(); |
| 27 } | 28 } |
| 28 | 29 |
| 29 CodedFrameProviderHost::~CodedFrameProviderHost() { | 30 CodedFrameProviderHost::~CodedFrameProviderHost() { |
| 30 DCHECK(thread_checker_.CalledOnValidThread()); | 31 DCHECK(thread_checker_.CalledOnValidThread()); |
| 31 } | 32 } |
| 32 | 33 |
| 33 void CodedFrameProviderHost::Read(const ReadCB& read_cb) { | 34 void CodedFrameProviderHost::Read(const ReadCB& read_cb) { |
| 34 DCHECK(thread_checker_.CalledOnValidThread()); | 35 DCHECK(thread_checker_.CalledOnValidThread()); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 break; | 68 break; |
| 68 | 69 |
| 69 if (msg->type() == PaddingMediaMsg) { | 70 if (msg->type() == PaddingMediaMsg) { |
| 70 // Ignore the message. | 71 // Ignore the message. |
| 71 } else if (msg->type() == AudioConfigMediaMsg) { | 72 } else if (msg->type() == AudioConfigMediaMsg) { |
| 72 audio_config_ = AudioDecoderConfigMarshaller::Read(msg.get()); | 73 audio_config_ = AudioDecoderConfigMarshaller::Read(msg.get()); |
| 73 } else if (msg->type() == VideoConfigMediaMsg) { | 74 } else if (msg->type() == VideoConfigMediaMsg) { |
| 74 video_config_ = VideoDecoderConfigMarshaller::Read(msg.get()); | 75 video_config_ = VideoDecoderConfigMarshaller::Read(msg.get()); |
| 75 } else if (msg->type() == FrameMediaMsg) { | 76 } else if (msg->type() == FrameMediaMsg) { |
| 76 scoped_refptr<DecoderBufferBase> buffer = | 77 scoped_refptr<DecoderBufferBase> buffer = |
| 77 DecoderBufferBaseMarshaller::Read(msg.Pass()); | 78 DecoderBufferBaseMarshaller::Read(std::move(msg)); |
| 78 base::ResetAndReturn(&read_cb_).Run( | 79 base::ResetAndReturn(&read_cb_).Run( |
| 79 buffer, audio_config_, video_config_); | 80 buffer, audio_config_, video_config_); |
| 80 audio_config_ = ::media::AudioDecoderConfig(); | 81 audio_config_ = ::media::AudioDecoderConfig(); |
| 81 video_config_ = ::media::VideoDecoderConfig(); | 82 video_config_ = ::media::VideoDecoderConfig(); |
| 82 } else { | 83 } else { |
| 83 // Receiving an unexpected message. | 84 // Receiving an unexpected message. |
| 84 // Possible use case (except software bugs): the renderer process has | 85 // Possible use case (except software bugs): the renderer process has |
| 85 // been compromised and an invalid message value has been written to | 86 // been compromised and an invalid message value has been written to |
| 86 // the fifo. Crash the browser process in this case to avoid further | 87 // the fifo. Crash the browser process in this case to avoid further |
| 87 // security implications (so do not use NOTREACHED which crashes only | 88 // security implications (so do not use NOTREACHED which crashes only |
| 88 // in debug builds). | 89 // in debug builds). |
| 89 LOG(FATAL) << "Unknown media message"; | 90 LOG(FATAL) << "Unknown media message"; |
| 90 } | 91 } |
| 91 } | 92 } |
| 92 } | 93 } |
| 93 | 94 |
| 94 } // namespace media | 95 } // namespace media |
| 95 } // namespace chromecast | 96 } // namespace chromecast |
| OLD | NEW |