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

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

Issue 2300993003: CmaRenderer is dead. Long live MojoRenderer. (Closed)
Patch Set: update OWNERS file Created 4 years, 3 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chromecast/media/cma/ipc_streamer/video_decoder_config_marshaller.h"
6
7 #include <stddef.h>
8 #include <stdint.h>
9
10 #include <vector>
11
12 #include "base/logging.h"
13 #include "chromecast/media/cma/ipc/media_message.h"
14 #include "chromecast/media/cma/ipc_streamer/encryption_scheme_marshaller.h"
15 #include "media/base/video_decoder_config.h"
16 #include "ui/gfx/geometry/rect.h"
17 #include "ui/gfx/geometry/size.h"
18
19 namespace chromecast {
20 namespace media {
21
22 namespace {
23 const size_t kMaxExtraDataSize = 16 * 1024;
24
25 class SizeMarshaller {
26 public:
27 static void Write(const gfx::Size& size, MediaMessage* msg) {
28 CHECK(msg->WritePod(size.width()));
29 CHECK(msg->WritePod(size.height()));
30 }
31
32 static gfx::Size Read(MediaMessage* msg) {
33 int w, h;
34 CHECK(msg->ReadPod(&w));
35 CHECK(msg->ReadPod(&h));
36 return gfx::Size(w, h);
37 }
38 };
39
40 class RectMarshaller {
41 public:
42 static void Write(const gfx::Rect& rect, MediaMessage* msg) {
43 CHECK(msg->WritePod(rect.x()));
44 CHECK(msg->WritePod(rect.y()));
45 CHECK(msg->WritePod(rect.width()));
46 CHECK(msg->WritePod(rect.height()));
47 }
48
49 static gfx::Rect Read(MediaMessage* msg) {
50 int x, y, w, h;
51 CHECK(msg->ReadPod(&x));
52 CHECK(msg->ReadPod(&y));
53 CHECK(msg->ReadPod(&w));
54 CHECK(msg->ReadPod(&h));
55 return gfx::Rect(x, y, w, h);
56 }
57 };
58
59 } // namespace
60
61 // static
62 void VideoDecoderConfigMarshaller::Write(
63 const ::media::VideoDecoderConfig& config, MediaMessage* msg) {
64 CHECK(msg->WritePod(config.codec()));
65 CHECK(msg->WritePod(config.profile()));
66 CHECK(msg->WritePod(config.format()));
67 CHECK(msg->WritePod(config.color_space()));
68 SizeMarshaller::Write(config.coded_size(), msg);
69 RectMarshaller::Write(config.visible_rect(), msg);
70 SizeMarshaller::Write(config.natural_size(), msg);
71 EncryptionSchemeMarshaller::Write(config.encryption_scheme(), msg);
72 CHECK(msg->WritePod(config.extra_data().size()));
73 if (!config.extra_data().empty())
74 CHECK(msg->WriteBuffer(&config.extra_data()[0],
75 config.extra_data().size()));
76 }
77
78 // static
79 ::media::VideoDecoderConfig VideoDecoderConfigMarshaller::Read(
80 MediaMessage* msg) {
81 ::media::VideoCodec codec;
82 ::media::VideoCodecProfile profile;
83 ::media::VideoPixelFormat format;
84 ::media::ColorSpace color_space;
85 gfx::Size coded_size;
86 gfx::Rect visible_rect;
87 gfx::Size natural_size;
88 size_t extra_data_size;
89 ::media::EncryptionScheme encryption_scheme;
90 std::vector<uint8_t> extra_data;
91
92 CHECK(msg->ReadPod(&codec));
93 CHECK(msg->ReadPod(&profile));
94 CHECK(msg->ReadPod(&format));
95 CHECK(msg->ReadPod(&color_space));
96 coded_size = SizeMarshaller::Read(msg);
97 visible_rect = RectMarshaller::Read(msg);
98 natural_size = SizeMarshaller::Read(msg);
99 encryption_scheme = EncryptionSchemeMarshaller::Read(msg);
100 CHECK(msg->ReadPod(&extra_data_size));
101
102 CHECK_GE(codec, ::media::kUnknownVideoCodec);
103 CHECK_LE(codec, ::media::kVideoCodecMax);
104 CHECK_GE(profile, ::media::VIDEO_CODEC_PROFILE_UNKNOWN);
105 CHECK_LE(profile, ::media::VIDEO_CODEC_PROFILE_MAX);
106 CHECK_GE(format, ::media::PIXEL_FORMAT_UNKNOWN);
107 CHECK_LE(format, ::media::PIXEL_FORMAT_MAX);
108 CHECK_GE(color_space, ::media::COLOR_SPACE_UNSPECIFIED);
109 CHECK_LE(color_space, ::media::COLOR_SPACE_MAX);
110 CHECK_LT(extra_data_size, kMaxExtraDataSize);
111 if (extra_data_size > 0) {
112 extra_data.resize(extra_data_size);
113 CHECK(msg->ReadBuffer(&extra_data[0], extra_data.size()));
114 }
115
116 return ::media::VideoDecoderConfig(
117 codec, profile, format, color_space,
118 coded_size, visible_rect, natural_size,
119 extra_data, encryption_scheme);
120 }
121
122 } // namespace media
123 } // namespace chromecast
OLDNEW
« no previous file with comments | « chromecast/media/cma/ipc_streamer/video_decoder_config_marshaller.h ('k') | chromecast/renderer/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698