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

Side by Side Diff: media/base/video_decoder_config.cc

Issue 8341033: Remove DemuxerStream::GetAVStream() once and for all. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: now with cmath Created 9 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « media/base/video_decoder_config.h ('k') | media/ffmpeg/ffmpeg_common.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "media/base/video_decoder_config.h" 5 #include "media/base/video_decoder_config.h"
6 6
7 #include <cmath>
8
7 #include "base/logging.h" 9 #include "base/logging.h"
8 10
9 namespace media { 11 namespace media {
10 12
11 VideoDecoderConfig::VideoDecoderConfig() 13 VideoDecoderConfig::VideoDecoderConfig()
12 : codec_(kUnknownVideoCodec), 14 : codec_(kUnknownVideoCodec),
13 format_(VideoFrame::INVALID), 15 format_(VideoFrame::INVALID),
14 frame_rate_numerator_(0), 16 frame_rate_numerator_(0),
15 frame_rate_denominator_(0), 17 frame_rate_denominator_(0),
18 aspect_ratio_numerator_(0),
19 aspect_ratio_denominator_(0),
16 extra_data_size_(0) { 20 extra_data_size_(0) {
17 } 21 }
18 22
19 VideoDecoderConfig::VideoDecoderConfig(VideoCodec codec, 23 VideoDecoderConfig::VideoDecoderConfig(VideoCodec codec,
20 VideoFrame::Format format, 24 VideoFrame::Format format,
21 const gfx::Size& coded_size, 25 const gfx::Size& coded_size,
22 const gfx::Rect& visible_rect, 26 const gfx::Rect& visible_rect,
23 int frame_rate_numerator, 27 int frame_rate_numerator,
24 int frame_rate_denominator, 28 int frame_rate_denominator,
29 int aspect_ratio_numerator,
30 int aspect_ratio_denominator,
25 const uint8* extra_data, 31 const uint8* extra_data,
26 size_t extra_data_size) { 32 size_t extra_data_size) {
27 Initialize(codec, format, coded_size, visible_rect, 33 Initialize(codec, format, coded_size, visible_rect,
28 frame_rate_numerator, frame_rate_denominator, 34 frame_rate_numerator, frame_rate_denominator,
35 aspect_ratio_numerator, aspect_ratio_denominator,
29 extra_data, extra_data_size); 36 extra_data, extra_data_size);
30 } 37 }
31 38
32 VideoDecoderConfig::~VideoDecoderConfig() {} 39 VideoDecoderConfig::~VideoDecoderConfig() {}
33 40
34 void VideoDecoderConfig::Initialize(VideoCodec codec, 41 void VideoDecoderConfig::Initialize(VideoCodec codec,
35 VideoFrame::Format format, 42 VideoFrame::Format format,
36 const gfx::Size& coded_size, 43 const gfx::Size& coded_size,
37 const gfx::Rect& visible_rect, 44 const gfx::Rect& visible_rect,
38 int frame_rate_numerator, 45 int frame_rate_numerator,
39 int frame_rate_denominator, 46 int frame_rate_denominator,
47 int aspect_ratio_numerator,
48 int aspect_ratio_denominator,
40 const uint8* extra_data, 49 const uint8* extra_data,
41 size_t extra_data_size) { 50 size_t extra_data_size) {
42 CHECK((extra_data_size != 0) == (extra_data != NULL)); 51 CHECK((extra_data_size != 0) == (extra_data != NULL));
43 52
44 codec_ = codec; 53 codec_ = codec;
45 format_ = format; 54 format_ = format;
46 coded_size_ = coded_size; 55 coded_size_ = coded_size;
47 visible_rect_ = visible_rect; 56 visible_rect_ = visible_rect;
48 frame_rate_numerator_ = frame_rate_numerator; 57 frame_rate_numerator_ = frame_rate_numerator;
49 frame_rate_denominator_ = frame_rate_denominator; 58 frame_rate_denominator_ = frame_rate_denominator;
59 aspect_ratio_numerator_ = aspect_ratio_numerator;
60 aspect_ratio_denominator_ = aspect_ratio_denominator;
50 extra_data_size_ = extra_data_size; 61 extra_data_size_ = extra_data_size;
51 62
52 if (extra_data_size_ > 0) { 63 if (extra_data_size_ > 0) {
53 extra_data_.reset(new uint8[extra_data_size_]); 64 extra_data_.reset(new uint8[extra_data_size_]);
54 memcpy(extra_data_.get(), extra_data, extra_data_size_); 65 memcpy(extra_data_.get(), extra_data, extra_data_size_);
55 } else { 66 } else {
56 extra_data_.reset(); 67 extra_data_.reset();
57 } 68 }
69
70 // Calculate the natural size given the aspect ratio and visible rect.
71 if (aspect_ratio_denominator == 0) {
72 natural_size_.SetSize(0, 0);
73 return;
74 }
75
76 double aspect_ratio = aspect_ratio_numerator /
77 static_cast<double>(aspect_ratio_denominator);
78
79 int width = floor(visible_rect.width() * aspect_ratio + 0.5);
80 int height = visible_rect.height();
81
82 // An even width makes things easier for YV12 and appears to be the behavior
83 // expected by WebKit layout tests.
84 natural_size_.SetSize(width & ~1, height);
58 } 85 }
59 86
60 bool VideoDecoderConfig::IsValidConfig() const { 87 bool VideoDecoderConfig::IsValidConfig() const {
61 return codec_ != kUnknownVideoCodec && 88 return codec_ != kUnknownVideoCodec &&
62 format_ != VideoFrame::INVALID && 89 format_ != VideoFrame::INVALID &&
63 frame_rate_numerator_ > 0 && 90 frame_rate_numerator_ > 0 &&
64 frame_rate_denominator_ > 0; 91 frame_rate_denominator_ > 0 &&
92 aspect_ratio_numerator_ > 0 &&
93 aspect_ratio_denominator_ > 0;
65 } 94 }
66 95
67 VideoCodec VideoDecoderConfig::codec() const { 96 VideoCodec VideoDecoderConfig::codec() const {
68 return codec_; 97 return codec_;
69 } 98 }
70 99
71 VideoFrame::Format VideoDecoderConfig::format() const { 100 VideoFrame::Format VideoDecoderConfig::format() const {
72 return format_; 101 return format_;
73 } 102 }
74 103
75 gfx::Size VideoDecoderConfig::coded_size() const { 104 gfx::Size VideoDecoderConfig::coded_size() const {
76 return coded_size_; 105 return coded_size_;
77 } 106 }
78 107
79 gfx::Rect VideoDecoderConfig::visible_rect() const { 108 gfx::Rect VideoDecoderConfig::visible_rect() const {
80 return visible_rect_; 109 return visible_rect_;
81 } 110 }
82 111
112 gfx::Size VideoDecoderConfig::natural_size() const {
113 return natural_size_;
114 }
115
83 int VideoDecoderConfig::frame_rate_numerator() const { 116 int VideoDecoderConfig::frame_rate_numerator() const {
84 return frame_rate_numerator_; 117 return frame_rate_numerator_;
85 } 118 }
86 119
87 int VideoDecoderConfig::frame_rate_denominator() const { 120 int VideoDecoderConfig::frame_rate_denominator() const {
88 return frame_rate_denominator_; 121 return frame_rate_denominator_;
89 } 122 }
90 123
124 int VideoDecoderConfig::aspect_ratio_numerator() const {
125 return aspect_ratio_numerator_;
126 }
127
128 int VideoDecoderConfig::aspect_ratio_denominator() const {
129 return aspect_ratio_denominator_;
130 }
131
91 uint8* VideoDecoderConfig::extra_data() const { 132 uint8* VideoDecoderConfig::extra_data() const {
92 return extra_data_.get(); 133 return extra_data_.get();
93 } 134 }
94 135
95 size_t VideoDecoderConfig::extra_data_size() const { 136 size_t VideoDecoderConfig::extra_data_size() const {
96 return extra_data_size_; 137 return extra_data_size_;
97 } 138 }
98 139
99 } // namespace media 140 } // namespace media
OLDNEW
« no previous file with comments | « media/base/video_decoder_config.h ('k') | media/ffmpeg/ffmpeg_common.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698