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 |