Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(230)

Side by Side Diff: chromecast/media/cma/ipc_streamer/decoder_buffer_base_marshaller.cc

Issue 1149263002: Chromecast: Add stream id interface in DecoderBufferBase class (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update comment message Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/decoder_buffer_base_marshaller.h" 5 #include "chromecast/media/cma/ipc_streamer/decoder_buffer_base_marshaller.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "chromecast/media/cma/base/decoder_buffer_base.h" 8 #include "chromecast/media/cma/base/decoder_buffer_base.h"
9 #include "chromecast/media/cma/ipc/media_message.h" 9 #include "chromecast/media/cma/ipc/media_message.h"
10 #include "chromecast/media/cma/ipc/media_message_type.h" 10 #include "chromecast/media/cma/ipc/media_message_type.h"
11 #include "chromecast/media/cma/ipc_streamer/decrypt_config_marshaller.h" 11 #include "chromecast/media/cma/ipc_streamer/decrypt_config_marshaller.h"
12 #include "media/base/decrypt_config.h" 12 #include "media/base/decrypt_config.h"
13 13
14 namespace chromecast { 14 namespace chromecast {
15 namespace media { 15 namespace media {
16 16
17 namespace { 17 namespace {
18 const size_t kMaxFrameSize = 4 * 1024 * 1024; 18 const size_t kMaxFrameSize = 4 * 1024 * 1024;
19 19
20 class DecoderBufferFromMsg : public DecoderBufferBase { 20 class DecoderBufferFromMsg : public DecoderBufferBase {
21 public: 21 public:
22 explicit DecoderBufferFromMsg(scoped_ptr<MediaMessage> msg); 22 explicit DecoderBufferFromMsg(scoped_ptr<MediaMessage> msg);
23 23
24 void Initialize(); 24 void Initialize();
25 25
26 // DecoderBufferBase implementation. 26 // DecoderBufferBase implementation.
27 StreamId stream_id() const override;
27 base::TimeDelta timestamp() const override; 28 base::TimeDelta timestamp() const override;
28 const uint8* data() const override; 29 const uint8* data() const override;
29 uint8* writable_data() const override; 30 uint8* writable_data() const override;
30 size_t data_size() const override; 31 size_t data_size() const override;
31 const ::media::DecryptConfig* decrypt_config() const override; 32 const ::media::DecryptConfig* decrypt_config() const override;
32 bool end_of_stream() const override; 33 bool end_of_stream() const override;
33 34
34 private: 35 private:
35 ~DecoderBufferFromMsg() override; 36 ~DecoderBufferFromMsg() override;
36 37
37 // Indicates whether this is an end of stream frame. 38 // Indicates whether this is an end of stream frame.
38 bool is_eos_; 39 bool is_eos_;
39 40
41 // Stream Id this decoder buffer belongs to.
42 StreamId stream_id_;
43
40 // Frame timestamp. 44 // Frame timestamp.
41 base::TimeDelta pts_; 45 base::TimeDelta pts_;
42 46
43 // CENC parameters. 47 // CENC parameters.
44 scoped_ptr< ::media::DecryptConfig> decrypt_config_; 48 scoped_ptr< ::media::DecryptConfig> decrypt_config_;
45 49
46 // Size of the frame. 50 // Size of the frame.
47 size_t data_size_; 51 size_t data_size_;
48 52
49 // Keeps the message since frame data is not copied. 53 // Keeps the message since frame data is not copied.
50 scoped_ptr<MediaMessage> msg_; 54 scoped_ptr<MediaMessage> msg_;
51 uint8* data_; 55 uint8* data_;
52 56
53 DISALLOW_COPY_AND_ASSIGN(DecoderBufferFromMsg); 57 DISALLOW_COPY_AND_ASSIGN(DecoderBufferFromMsg);
54 }; 58 };
55 59
56 DecoderBufferFromMsg::DecoderBufferFromMsg( 60 DecoderBufferFromMsg::DecoderBufferFromMsg(
57 scoped_ptr<MediaMessage> msg) 61 scoped_ptr<MediaMessage> msg)
58 : is_eos_(true), 62 : is_eos_(true),
63 stream_id_(kPrimary),
59 msg_(msg.Pass()), 64 msg_(msg.Pass()),
60 data_(NULL) { 65 data_(NULL) {
61 CHECK(msg_); 66 CHECK(msg_);
62 } 67 }
63 68
64 DecoderBufferFromMsg::~DecoderBufferFromMsg() { 69 DecoderBufferFromMsg::~DecoderBufferFromMsg() {
65 } 70 }
66 71
67 void DecoderBufferFromMsg::Initialize() { 72 void DecoderBufferFromMsg::Initialize() {
68 CHECK_EQ(msg_->type(), FrameMediaMsg); 73 CHECK_EQ(msg_->type(), FrameMediaMsg);
69 74
70 CHECK(msg_->ReadPod(&is_eos_)); 75 CHECK(msg_->ReadPod(&is_eos_));
71 if (is_eos_) 76 if (is_eos_)
72 return; 77 return;
73 78
79 CHECK(msg_->ReadPod(&stream_id_));
80
74 int64 pts_internal = 0; 81 int64 pts_internal = 0;
75 CHECK(msg_->ReadPod(&pts_internal)); 82 CHECK(msg_->ReadPod(&pts_internal));
76 pts_ = base::TimeDelta::FromInternalValue(pts_internal); 83 pts_ = base::TimeDelta::FromInternalValue(pts_internal);
77 84
78 bool has_decrypt_config = false; 85 bool has_decrypt_config = false;
79 CHECK(msg_->ReadPod(&has_decrypt_config)); 86 CHECK(msg_->ReadPod(&has_decrypt_config));
80 if (has_decrypt_config) 87 if (has_decrypt_config)
81 decrypt_config_.reset(DecryptConfigMarshaller::Read(msg_.get()).release()); 88 decrypt_config_.reset(DecryptConfigMarshaller::Read(msg_.get()).release());
82 89
83 CHECK(msg_->ReadPod(&data_size_)); 90 CHECK(msg_->ReadPod(&data_size_));
84 CHECK_GT(data_size_, 0u); 91 CHECK_GT(data_size_, 0u);
85 CHECK_LT(data_size_, kMaxFrameSize); 92 CHECK_LT(data_size_, kMaxFrameSize);
86 93
87 // Get a pointer to the frame data inside the message. 94 // Get a pointer to the frame data inside the message.
88 // Avoid copying the frame data here. 95 // Avoid copying the frame data here.
89 data_ = static_cast<uint8*>(msg_->GetWritableBuffer(data_size_)); 96 data_ = static_cast<uint8*>(msg_->GetWritableBuffer(data_size_));
90 CHECK(data_); 97 CHECK(data_);
91 98
92 if (decrypt_config_) { 99 if (decrypt_config_) {
93 uint32 subsample_total_size = 0; 100 uint32 subsample_total_size = 0;
94 for (size_t k = 0; k < decrypt_config_->subsamples().size(); k++) { 101 for (size_t k = 0; k < decrypt_config_->subsamples().size(); k++) {
95 subsample_total_size += decrypt_config_->subsamples()[k].clear_bytes; 102 subsample_total_size += decrypt_config_->subsamples()[k].clear_bytes;
96 subsample_total_size += decrypt_config_->subsamples()[k].cypher_bytes; 103 subsample_total_size += decrypt_config_->subsamples()[k].cypher_bytes;
97 } 104 }
98 CHECK_EQ(subsample_total_size, data_size_); 105 CHECK_EQ(subsample_total_size, data_size_);
99 } 106 }
100 } 107 }
101 108
109 StreamId DecoderBufferFromMsg::stream_id() const {
110 return stream_id_;
111 }
112
102 base::TimeDelta DecoderBufferFromMsg::timestamp() const { 113 base::TimeDelta DecoderBufferFromMsg::timestamp() const {
103 return pts_; 114 return pts_;
104 } 115 }
105 116
106 const uint8* DecoderBufferFromMsg::data() const { 117 const uint8* DecoderBufferFromMsg::data() const {
107 CHECK(msg_->IsSerializedMsgAvailable()); 118 CHECK(msg_->IsSerializedMsgAvailable());
108 return data_; 119 return data_;
109 } 120 }
110 121
111 uint8* DecoderBufferFromMsg::writable_data() const { 122 uint8* DecoderBufferFromMsg::writable_data() const {
(...skipping 16 matching lines...) Expand all
128 } // namespace 139 } // namespace
129 140
130 // static 141 // static
131 void DecoderBufferBaseMarshaller::Write( 142 void DecoderBufferBaseMarshaller::Write(
132 const scoped_refptr<DecoderBufferBase>& buffer, 143 const scoped_refptr<DecoderBufferBase>& buffer,
133 MediaMessage* msg) { 144 MediaMessage* msg) {
134 CHECK(msg->WritePod(buffer->end_of_stream())); 145 CHECK(msg->WritePod(buffer->end_of_stream()));
135 if (buffer->end_of_stream()) 146 if (buffer->end_of_stream())
136 return; 147 return;
137 148
149 CHECK(msg->WritePod(buffer->stream_id()));
138 CHECK(msg->WritePod(buffer->timestamp().ToInternalValue())); 150 CHECK(msg->WritePod(buffer->timestamp().ToInternalValue()));
139 151
140 bool has_decrypt_config = 152 bool has_decrypt_config =
141 (buffer->decrypt_config() != NULL && 153 (buffer->decrypt_config() != NULL &&
142 buffer->decrypt_config()->iv().size() > 0); 154 buffer->decrypt_config()->iv().size() > 0);
143 CHECK(msg->WritePod(has_decrypt_config)); 155 CHECK(msg->WritePod(has_decrypt_config));
144 156
145 if (has_decrypt_config) { 157 if (has_decrypt_config) {
146 // DecryptConfig may contain 0 subsamples if all content is encrypted. 158 // DecryptConfig may contain 0 subsamples if all content is encrypted.
147 // Map this case to a single fully-encrypted "subsample" for more consistent 159 // Map this case to a single fully-encrypted "subsample" for more consistent
(...skipping 20 matching lines...) Expand all
168 scoped_refptr<DecoderBufferBase> DecoderBufferBaseMarshaller::Read( 180 scoped_refptr<DecoderBufferBase> DecoderBufferBaseMarshaller::Read(
169 scoped_ptr<MediaMessage> msg) { 181 scoped_ptr<MediaMessage> msg) {
170 scoped_refptr<DecoderBufferFromMsg> buffer( 182 scoped_refptr<DecoderBufferFromMsg> buffer(
171 new DecoderBufferFromMsg(msg.Pass())); 183 new DecoderBufferFromMsg(msg.Pass()));
172 buffer->Initialize(); 184 buffer->Initialize();
173 return buffer; 185 return buffer;
174 } 186 }
175 187
176 } // namespace media 188 } // namespace media
177 } // namespace chromecast 189 } // namespace chromecast
OLDNEW
« no previous file with comments | « chromecast/media/cma/base/decoder_buffer_base.h ('k') | chromecast/media/cma/pipeline/decrypt_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698