Commit c5aee829 authored by acolwell@chromium.org's avatar acolwell@chromium.org

Remove VideoDecoderConfig::aspect_ratio_xxx methods.

BUG=122913

Review URL: https://chromiumcodereview.appspot.com/10830110

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@149540 0039d316-1c4b-4281-b951-d872f2087c98
parent c6051eb0
...@@ -4,8 +4,6 @@ ...@@ -4,8 +4,6 @@
#include "media/base/video_decoder_config.h" #include "media/base/video_decoder_config.h"
#include <cmath>
#include "base/logging.h" #include "base/logging.h"
#include "base/metrics/histogram.h" #include "base/metrics/histogram.h"
...@@ -15,8 +13,6 @@ VideoDecoderConfig::VideoDecoderConfig() ...@@ -15,8 +13,6 @@ VideoDecoderConfig::VideoDecoderConfig()
: codec_(kUnknownVideoCodec), : codec_(kUnknownVideoCodec),
profile_(VIDEO_CODEC_PROFILE_UNKNOWN), profile_(VIDEO_CODEC_PROFILE_UNKNOWN),
format_(VideoFrame::INVALID), format_(VideoFrame::INVALID),
aspect_ratio_numerator_(0),
aspect_ratio_denominator_(0),
extra_data_size_(0) { extra_data_size_(0) {
} }
...@@ -25,12 +21,10 @@ VideoDecoderConfig::VideoDecoderConfig(VideoCodec codec, ...@@ -25,12 +21,10 @@ VideoDecoderConfig::VideoDecoderConfig(VideoCodec codec,
VideoFrame::Format format, VideoFrame::Format format,
const gfx::Size& coded_size, const gfx::Size& coded_size,
const gfx::Rect& visible_rect, const gfx::Rect& visible_rect,
int aspect_ratio_numerator, const gfx::Size& natural_size,
int aspect_ratio_denominator,
const uint8* extra_data, const uint8* extra_data,
size_t extra_data_size) { size_t extra_data_size) {
Initialize(codec, profile, format, coded_size, visible_rect, Initialize(codec, profile, format, coded_size, visible_rect, natural_size,
aspect_ratio_numerator, aspect_ratio_denominator,
extra_data, extra_data_size, true); extra_data, extra_data_size, true);
} }
...@@ -63,8 +57,7 @@ void VideoDecoderConfig::Initialize(VideoCodec codec, ...@@ -63,8 +57,7 @@ void VideoDecoderConfig::Initialize(VideoCodec codec,
VideoFrame::Format format, VideoFrame::Format format,
const gfx::Size& coded_size, const gfx::Size& coded_size,
const gfx::Rect& visible_rect, const gfx::Rect& visible_rect,
int aspect_ratio_numerator, const gfx::Size& natural_size,
int aspect_ratio_denominator,
const uint8* extra_data, const uint8* extra_data,
size_t extra_data_size, size_t extra_data_size,
bool record_stats) { bool record_stats) {
...@@ -88,8 +81,7 @@ void VideoDecoderConfig::Initialize(VideoCodec codec, ...@@ -88,8 +81,7 @@ void VideoDecoderConfig::Initialize(VideoCodec codec,
format_ = format; format_ = format;
coded_size_ = coded_size; coded_size_ = coded_size;
visible_rect_ = visible_rect; visible_rect_ = visible_rect;
aspect_ratio_numerator_ = aspect_ratio_numerator; natural_size_ = natural_size;
aspect_ratio_denominator_ = aspect_ratio_denominator;
extra_data_size_ = extra_data_size; extra_data_size_ = extra_data_size;
if (extra_data_size_ > 0) { if (extra_data_size_ > 0) {
...@@ -98,22 +90,6 @@ void VideoDecoderConfig::Initialize(VideoCodec codec, ...@@ -98,22 +90,6 @@ void VideoDecoderConfig::Initialize(VideoCodec codec,
} else { } else {
extra_data_.reset(); extra_data_.reset();
} }
// Calculate the natural size given the aspect ratio and visible rect.
if (aspect_ratio_denominator == 0) {
natural_size_.SetSize(0, 0);
return;
}
double aspect_ratio = aspect_ratio_numerator /
static_cast<double>(aspect_ratio_denominator);
int width = floor(visible_rect.width() * aspect_ratio + 0.5);
int height = visible_rect.height();
// An even width makes things easier for YV12 and appears to be the behavior
// expected by WebKit layout tests.
natural_size_.SetSize(width & ~1, height);
} }
void VideoDecoderConfig::CopyFrom(const VideoDecoderConfig& video_config) { void VideoDecoderConfig::CopyFrom(const VideoDecoderConfig& video_config) {
...@@ -122,8 +98,7 @@ void VideoDecoderConfig::CopyFrom(const VideoDecoderConfig& video_config) { ...@@ -122,8 +98,7 @@ void VideoDecoderConfig::CopyFrom(const VideoDecoderConfig& video_config) {
video_config.format(), video_config.format(),
video_config.coded_size(), video_config.coded_size(),
video_config.visible_rect(), video_config.visible_rect(),
video_config.aspect_ratio_numerator(), video_config.natural_size(),
video_config.aspect_ratio_denominator(),
video_config.extra_data(), video_config.extra_data(),
video_config.extra_data_size(), video_config.extra_data_size(),
false); false);
...@@ -131,8 +106,8 @@ void VideoDecoderConfig::CopyFrom(const VideoDecoderConfig& video_config) { ...@@ -131,8 +106,8 @@ void VideoDecoderConfig::CopyFrom(const VideoDecoderConfig& video_config) {
bool VideoDecoderConfig::IsValidConfig() const { bool VideoDecoderConfig::IsValidConfig() const {
return codec_ != kUnknownVideoCodec && return codec_ != kUnknownVideoCodec &&
aspect_ratio_numerator_ > 0 && natural_size_.width() > 0 &&
aspect_ratio_denominator_ > 0 && natural_size_.height() > 0 &&
VideoFrame::IsValidConfig( VideoFrame::IsValidConfig(
format_, natural_size_.width(), natural_size_.height()); format_, natural_size_.width(), natural_size_.height());
} }
...@@ -160,9 +135,7 @@ std::string VideoDecoderConfig::AsHumanReadableString() const { ...@@ -160,9 +135,7 @@ std::string VideoDecoderConfig::AsHumanReadableString() const {
<< "," << visible_rect().width() << "," << visible_rect().width()
<< "," << visible_rect().height() << "]" << "," << visible_rect().height() << "]"
<< " natural size: [" << natural_size().width() << " natural size: [" << natural_size().width()
<< "," << natural_size().height() << "]" << "," << natural_size().height() << "]";
<< " aspect ratio: " << aspect_ratio_numerator()
<< "/" << aspect_ratio_denominator();
return s.str(); return s.str();
} }
...@@ -190,14 +163,6 @@ gfx::Size VideoDecoderConfig::natural_size() const { ...@@ -190,14 +163,6 @@ gfx::Size VideoDecoderConfig::natural_size() const {
return natural_size_; return natural_size_;
} }
int VideoDecoderConfig::aspect_ratio_numerator() const {
return aspect_ratio_numerator_;
}
int VideoDecoderConfig::aspect_ratio_denominator() const {
return aspect_ratio_denominator_;
}
uint8* VideoDecoderConfig::extra_data() const { uint8* VideoDecoderConfig::extra_data() const {
return extra_data_.get(); return extra_data_.get();
} }
......
...@@ -72,7 +72,7 @@ class MEDIA_EXPORT VideoDecoderConfig { ...@@ -72,7 +72,7 @@ class MEDIA_EXPORT VideoDecoderConfig {
VideoFrame::Format format, VideoFrame::Format format,
const gfx::Size& coded_size, const gfx::Size& coded_size,
const gfx::Rect& visible_rect, const gfx::Rect& visible_rect,
int aspect_ratio_numerator, int aspect_ratio_denominator, const gfx::Size& natural_size,
const uint8* extra_data, size_t extra_data_size); const uint8* extra_data, size_t extra_data_size);
~VideoDecoderConfig(); ~VideoDecoderConfig();
...@@ -83,7 +83,7 @@ class MEDIA_EXPORT VideoDecoderConfig { ...@@ -83,7 +83,7 @@ class MEDIA_EXPORT VideoDecoderConfig {
VideoFrame::Format format, VideoFrame::Format format,
const gfx::Size& coded_size, const gfx::Size& coded_size,
const gfx::Rect& visible_rect, const gfx::Rect& visible_rect,
int aspect_ratio_numerator, int aspect_ratio_denominator, const gfx::Size& natural_size,
const uint8* extra_data, size_t extra_data_size, const uint8* extra_data, size_t extra_data_size,
bool record_stats); bool record_stats);
...@@ -119,13 +119,6 @@ class MEDIA_EXPORT VideoDecoderConfig { ...@@ -119,13 +119,6 @@ class MEDIA_EXPORT VideoDecoderConfig {
// into account. // into account.
gfx::Size natural_size() const; gfx::Size natural_size() const;
// Aspect ratio of the decoded video frame expressed as a fraction.
//
// TODO(scherkus): think of a better way to avoid having video decoders
// handle tricky aspect ratio dimension calculations.
int aspect_ratio_numerator() const;
int aspect_ratio_denominator() const;
// Optional byte data required to initialize video decoders, such as H.264 // Optional byte data required to initialize video decoders, such as H.264
// AAVC data. // AAVC data.
uint8* extra_data() const; uint8* extra_data() const;
...@@ -141,9 +134,6 @@ class MEDIA_EXPORT VideoDecoderConfig { ...@@ -141,9 +134,6 @@ class MEDIA_EXPORT VideoDecoderConfig {
gfx::Rect visible_rect_; gfx::Rect visible_rect_;
gfx::Size natural_size_; gfx::Size natural_size_;
int aspect_ratio_numerator_;
int aspect_ratio_denominator_;
scoped_array<uint8> extra_data_; scoped_array<uint8> extra_data_;
size_t extra_data_size_; size_t extra_data_size_;
......
...@@ -4,11 +4,32 @@ ...@@ -4,11 +4,32 @@
#include "media/base/video_util.h" #include "media/base/video_util.h"
#include <cmath>
#include "base/logging.h" #include "base/logging.h"
#include "media/base/video_frame.h" #include "media/base/video_frame.h"
namespace media { namespace media {
gfx::Size GetNaturalSize(const gfx::Size& visible_size,
int aspect_ratio_numerator,
int aspect_ratio_denominator) {
if (aspect_ratio_denominator == 0 ||
aspect_ratio_numerator < 0 ||
aspect_ratio_denominator < 0)
return gfx::Size();
double aspect_ratio = aspect_ratio_numerator /
static_cast<double>(aspect_ratio_denominator);
int width = floor(visible_size.width() * aspect_ratio + 0.5);
int height = visible_size.height();
// An even width makes things easier for YV12 and appears to be the behavior
// expected by WebKit layout tests.
return gfx::Size(width & ~1, height);
}
static void CopyPlane(size_t plane, const uint8* source, int stride, int rows, static void CopyPlane(size_t plane, const uint8* source, int stride, int rows,
VideoFrame* frame) { VideoFrame* frame) {
uint8* dest = frame->data(plane); uint8* dest = frame->data(plane);
......
...@@ -7,11 +7,17 @@ ...@@ -7,11 +7,17 @@
#include "base/basictypes.h" #include "base/basictypes.h"
#include "media/base/media_export.h" #include "media/base/media_export.h"
#include "ui/gfx/size.h"
namespace media { namespace media {
class VideoFrame; class VideoFrame;
// Computes the size of |visible_size| for a given aspect ratio.
MEDIA_EXPORT gfx::Size GetNaturalSize(const gfx::Size& visible_size,
int aspect_ratio_numerator,
int aspect_ratio_denominator);
// Copies a plane of YUV source into a VideoFrame object, taking into account // Copies a plane of YUV source into a VideoFrame object, taking into account
// source and destinations dimensions. // source and destinations dimensions.
// //
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "media/ffmpeg/ffmpeg_common.h" #include "media/ffmpeg/ffmpeg_common.h"
#include "base/logging.h" #include "base/logging.h"
#include "media/base/video_util.h"
namespace media { namespace media {
...@@ -250,12 +251,12 @@ void AVStreamToVideoDecoderConfig( ...@@ -250,12 +251,12 @@ void AVStreamToVideoDecoderConfig(
VideoCodec codec = CodecIDToVideoCodec(stream->codec->codec_id); VideoCodec codec = CodecIDToVideoCodec(stream->codec->codec_id);
VideoCodecProfile profile = (codec == kCodecVP8) ? VP8PROFILE_MAIN : VideoCodecProfile profile = (codec == kCodecVP8) ? VP8PROFILE_MAIN :
ProfileIDToVideoCodecProfile(stream->codec->profile); ProfileIDToVideoCodecProfile(stream->codec->profile);
gfx::Size natural_size = GetNaturalSize(
visible_rect.size(), aspect_ratio.num, aspect_ratio.den);
config->Initialize(codec, config->Initialize(codec,
profile, profile,
PixelFormatToVideoFormat(stream->codec->pix_fmt), PixelFormatToVideoFormat(stream->codec->pix_fmt),
coded_size, visible_rect, coded_size, visible_rect, natural_size,
aspect_ratio.num,
aspect_ratio.den,
stream->codec->extradata, stream->codec->extradata,
stream->codec->extradata_size, stream->codec->extradata_size,
true); true);
......
...@@ -242,8 +242,8 @@ TEST_F(FFmpegDemuxerTest, Initialize_Successful) { ...@@ -242,8 +242,8 @@ TEST_F(FFmpegDemuxerTest, Initialize_Successful) {
EXPECT_EQ(0, video_config.visible_rect().y()); EXPECT_EQ(0, video_config.visible_rect().y());
EXPECT_EQ(320, video_config.visible_rect().width()); EXPECT_EQ(320, video_config.visible_rect().width());
EXPECT_EQ(240, video_config.visible_rect().height()); EXPECT_EQ(240, video_config.visible_rect().height());
EXPECT_EQ(1, video_config.aspect_ratio_numerator()); EXPECT_EQ(320, video_config.natural_size().width());
EXPECT_EQ(1, video_config.aspect_ratio_denominator()); EXPECT_EQ(240, video_config.natural_size().height());
EXPECT_FALSE(video_config.extra_data()); EXPECT_FALSE(video_config.extra_data());
EXPECT_EQ(0u, video_config.extra_data_size()); EXPECT_EQ(0u, video_config.extra_data_size());
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include "media/base/test_data_util.h" #include "media/base/test_data_util.h"
#include "media/base/video_decoder.h" #include "media/base/video_decoder.h"
#include "media/base/video_frame.h" #include "media/base/video_frame.h"
#include "media/base/video_util.h"
#include "media/ffmpeg/ffmpeg_common.h" #include "media/ffmpeg/ffmpeg_common.h"
#include "media/filters/ffmpeg_decoder_unittest.h" #include "media/filters/ffmpeg_decoder_unittest.h"
#include "media/filters/ffmpeg_glue.h" #include "media/filters/ffmpeg_glue.h"
...@@ -36,7 +37,7 @@ namespace media { ...@@ -36,7 +37,7 @@ namespace media {
static const VideoFrame::Format kVideoFormat = VideoFrame::YV12; static const VideoFrame::Format kVideoFormat = VideoFrame::YV12;
static const gfx::Size kCodedSize(320, 240); static const gfx::Size kCodedSize(320, 240);
static const gfx::Rect kVisibleRect(320, 240); static const gfx::Rect kVisibleRect(320, 240);
static const AVRational kAspectRatio = { 1, 1 }; static const gfx::Size kNaturalSize(320, 240);
static const uint8 kFakeKeyId[] = { 0x4b, 0x65, 0x79, 0x20, 0x49, 0x44 }; static const uint8 kFakeKeyId[] = { 0x4b, 0x65, 0x79, 0x20, 0x49, 0x44 };
static const uint8 kFakeIv[DecryptConfig::kDecryptionKeySize] = { 0 }; static const uint8 kFakeIv[DecryptConfig::kDecryptionKeySize] = { 0 };
static const uint8 kFakeCheckSum[] = { 0, 0 }; static const uint8 kFakeCheckSum[] = { 0, 0 };
...@@ -87,8 +88,7 @@ class FFmpegVideoDecoderTest : public testing::Test { ...@@ -87,8 +88,7 @@ class FFmpegVideoDecoderTest : public testing::Test {
encrypted_i_frame_buffer_ = CreateFakeEncryptedBuffer(); encrypted_i_frame_buffer_ = CreateFakeEncryptedBuffer();
config_.Initialize(kCodecVP8, VIDEO_CODEC_PROFILE_UNKNOWN, config_.Initialize(kCodecVP8, VIDEO_CODEC_PROFILE_UNKNOWN,
kVideoFormat, kCodedSize, kVisibleRect, kVideoFormat, kCodedSize, kVisibleRect, kNaturalSize,
kAspectRatio.num, kAspectRatio.den,
NULL, 0, true); NULL, 0, true);
} }
...@@ -246,8 +246,7 @@ TEST_F(FFmpegVideoDecoderTest, Initialize_UnsupportedDecoder) { ...@@ -246,8 +246,7 @@ TEST_F(FFmpegVideoDecoderTest, Initialize_UnsupportedDecoder) {
// Test avcodec_find_decoder() returning NULL. // Test avcodec_find_decoder() returning NULL.
VideoDecoderConfig config(kUnknownVideoCodec, VIDEO_CODEC_PROFILE_UNKNOWN, VideoDecoderConfig config(kUnknownVideoCodec, VIDEO_CODEC_PROFILE_UNKNOWN,
kVideoFormat, kVideoFormat,
kCodedSize, kVisibleRect, kCodedSize, kVisibleRect, kNaturalSize,
kAspectRatio.num, kAspectRatio.den,
NULL, 0); NULL, 0);
InitializeWithConfigAndStatus(config, PIPELINE_ERROR_DECODE); InitializeWithConfigAndStatus(config, PIPELINE_ERROR_DECODE);
} }
...@@ -256,8 +255,7 @@ TEST_F(FFmpegVideoDecoderTest, Initialize_UnsupportedPixelFormat) { ...@@ -256,8 +255,7 @@ TEST_F(FFmpegVideoDecoderTest, Initialize_UnsupportedPixelFormat) {
// Ensure decoder handles unsupport pixel formats without crashing. // Ensure decoder handles unsupport pixel formats without crashing.
VideoDecoderConfig config(kCodecVP8, VIDEO_CODEC_PROFILE_UNKNOWN, VideoDecoderConfig config(kCodecVP8, VIDEO_CODEC_PROFILE_UNKNOWN,
VideoFrame::INVALID, VideoFrame::INVALID,
kCodedSize, kVisibleRect, kCodedSize, kVisibleRect, kNaturalSize,
kAspectRatio.num, kAspectRatio.den,
NULL, 0); NULL, 0);
InitializeWithConfigAndStatus(config, PIPELINE_ERROR_DECODE); InitializeWithConfigAndStatus(config, PIPELINE_ERROR_DECODE);
} }
...@@ -266,8 +264,64 @@ TEST_F(FFmpegVideoDecoderTest, Initialize_OpenDecoderFails) { ...@@ -266,8 +264,64 @@ TEST_F(FFmpegVideoDecoderTest, Initialize_OpenDecoderFails) {
// Specify Theora w/o extra data so that avcodec_open2() fails. // Specify Theora w/o extra data so that avcodec_open2() fails.
VideoDecoderConfig config(kCodecTheora, VIDEO_CODEC_PROFILE_UNKNOWN, VideoDecoderConfig config(kCodecTheora, VIDEO_CODEC_PROFILE_UNKNOWN,
kVideoFormat, kVideoFormat,
kCodedSize, kVisibleRect, kCodedSize, kVisibleRect, kNaturalSize,
kAspectRatio.num, kAspectRatio.den, NULL, 0);
InitializeWithConfigAndStatus(config, PIPELINE_ERROR_DECODE);
}
TEST_F(FFmpegVideoDecoderTest, Initialize_AspectRatioNumeratorZero) {
gfx::Size natural_size = GetNaturalSize(kVisibleRect.size(), 0, 1);
VideoDecoderConfig config(kCodecVP8, VP8PROFILE_MAIN,
kVideoFormat,
kCodedSize, kVisibleRect, natural_size,
NULL, 0);
InitializeWithConfigAndStatus(config, PIPELINE_ERROR_DECODE);
}
TEST_F(FFmpegVideoDecoderTest, Initialize_AspectRatioDenominatorZero) {
gfx::Size natural_size = GetNaturalSize(kVisibleRect.size(), 1, 0);
VideoDecoderConfig config(kCodecVP8, VP8PROFILE_MAIN,
kVideoFormat,
kCodedSize, kVisibleRect, natural_size,
NULL, 0);
InitializeWithConfigAndStatus(config, PIPELINE_ERROR_DECODE);
}
TEST_F(FFmpegVideoDecoderTest, Initialize_AspectRatioNumeratorNegative) {
gfx::Size natural_size = GetNaturalSize(kVisibleRect.size(), -1, 1);
VideoDecoderConfig config(kCodecVP8, VP8PROFILE_MAIN,
kVideoFormat,
kCodedSize, kVisibleRect, natural_size,
NULL, 0);
InitializeWithConfigAndStatus(config, PIPELINE_ERROR_DECODE);
}
TEST_F(FFmpegVideoDecoderTest, Initialize_AspectRatioDenominatorNegative) {
gfx::Size natural_size = GetNaturalSize(kVisibleRect.size(), 1, -1);
VideoDecoderConfig config(kCodecVP8, VP8PROFILE_MAIN,
kVideoFormat,
kCodedSize, kVisibleRect, natural_size,
NULL, 0);
InitializeWithConfigAndStatus(config, PIPELINE_ERROR_DECODE);
}
TEST_F(FFmpegVideoDecoderTest, Initialize_AspectRatioNumeratorTooLarge) {
int width = kVisibleRect.size().width();
int num = ceil(static_cast<double>(limits::kMaxDimension + 1) / width);
gfx::Size natural_size = GetNaturalSize(kVisibleRect.size(), num, 1);
VideoDecoderConfig config(kCodecVP8, VP8PROFILE_MAIN,
kVideoFormat,
kCodedSize, kVisibleRect, natural_size,
NULL, 0);
InitializeWithConfigAndStatus(config, PIPELINE_ERROR_DECODE);
}
TEST_F(FFmpegVideoDecoderTest, Initialize_AspectRatioDenominatorTooLarge) {
int den = kVisibleRect.size().width() + 1;
gfx::Size natural_size = GetNaturalSize(kVisibleRect.size(), 1, den);
VideoDecoderConfig config(kCodecVP8, VP8PROFILE_MAIN,
kVideoFormat,
kCodedSize, kVisibleRect, natural_size,
NULL, 0); NULL, 0);
InitializeWithConfigAndStatus(config, PIPELINE_ERROR_DECODE); InitializeWithConfigAndStatus(config, PIPELINE_ERROR_DECODE);
} }
......
...@@ -283,6 +283,13 @@ TEST_F(PipelineIntegrationTest, BasicPlayback_MediaSource) { ...@@ -283,6 +283,13 @@ TEST_F(PipelineIntegrationTest, BasicPlayback_MediaSource) {
Stop(); Stop();
} }
TEST_F(PipelineIntegrationTest, BasicPlayback_16x9AspectRatio) {
ASSERT_TRUE(Start(GetTestDataURL("bear-320x240-16x9-aspect.webm"),
PIPELINE_OK));
Play();
ASSERT_TRUE(WaitUntilOnEnded());
}
// TODO(fgalligan): Enable test when encrypted test data is updated and new // TODO(fgalligan): Enable test when encrypted test data is updated and new
// decryption code is landed. http://crbug.com/132801 // decryption code is landed. http://crbug.com/132801
TEST_F(PipelineIntegrationTest, DISABLED_EncryptedPlayback) { TEST_F(PipelineIntegrationTest, DISABLED_EncryptedPlayback) {
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "media/base/audio_decoder_config.h" #include "media/base/audio_decoder_config.h"
#include "media/base/stream_parser_buffer.h" #include "media/base/stream_parser_buffer.h"
#include "media/base/video_decoder_config.h" #include "media/base/video_decoder_config.h"
#include "media/base/video_util.h"
#include "media/mp4/box_definitions.h" #include "media/mp4/box_definitions.h"
#include "media/mp4/box_reader.h" #include "media/mp4/box_reader.h"
#include "media/mp4/es_descriptor.h" #include "media/mp4/es_descriptor.h"
...@@ -218,14 +219,16 @@ bool MP4StreamParser::ParseMoov(BoxReader* reader) { ...@@ -218,14 +219,16 @@ bool MP4StreamParser::ParseMoov(BoxReader* reader) {
RCHECK(EmitKeyNeeded(entry.sinf.info.track_encryption)); RCHECK(EmitKeyNeeded(entry.sinf.info.track_encryption));
// TODO(strobe): Recover correct crop box // TODO(strobe): Recover correct crop box
gfx::Size coded_size(entry.width, entry.height);
gfx::Rect visible_rect(coded_size);
gfx::Size natural_size = GetNaturalSize(visible_rect.size(),
entry.pixel_aspect.h_spacing,
entry.pixel_aspect.v_spacing);
video_config.Initialize(kCodecH264, H264PROFILE_MAIN, VideoFrame::YV12, video_config.Initialize(kCodecH264, H264PROFILE_MAIN, VideoFrame::YV12,
gfx::Size(entry.width, entry.height), coded_size, visible_rect, natural_size,
gfx::Rect(0, 0, entry.width, entry.height),
entry.pixel_aspect.h_spacing,
entry.pixel_aspect.v_spacing,
// No decoder-specific buffer needed for AVC; // No decoder-specific buffer needed for AVC;
// SPS/PPS are embedded in the video stream // SPS/PPS are embedded in the video stream
NULL, 0, false); NULL, 0, true);
has_video_ = true; has_video_ = true;
video_track_id_ = track->header.track_id; video_track_id_ = track->header.track_id;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment