diff options
author | tomfinegan@chromium.org <tomfinegan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-19 04:48:11 +0000 |
---|---|---|
committer | tomfinegan@chromium.org <tomfinegan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-19 04:48:11 +0000 |
commit | fc4fc007af0973617fb434629a1fcf22705908fd (patch) | |
tree | 29211d6b68584ee6d3da9a8fd1d0f6a2ef611e05 /media/ffmpeg/ffmpeg_common.cc | |
parent | 0c8bd57fac6f7a4bd6f5252d4f0d15a63f0c2107 (diff) | |
download | chromium_src-fc4fc007af0973617fb434629a1fcf22705908fd.zip chromium_src-fc4fc007af0973617fb434629a1fcf22705908fd.tar.gz chromium_src-fc4fc007af0973617fb434629a1fcf22705908fd.tar.bz2 |
Add wrapper class to media for support of VP9 video, and add a command line flag to enable the support.
This initial version of the wrapper provides support for decoding VP9 video in WebM container files, and is disabled by default.
New flag added: --enable-vp9-playback
TBR=brettw,scherkus,xhwang
BUG=166094
TEST=VP9 video in WebM containers plays back in <video> elements when --enable-vp9-playback is specified on the command line.
Review URL: https://chromiumcodereview.appspot.com/12025030
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@177842 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/ffmpeg/ffmpeg_common.cc')
-rw-r--r-- | media/ffmpeg/ffmpeg_common.cc | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/media/ffmpeg/ffmpeg_common.cc b/media/ffmpeg/ffmpeg_common.cc index 8b81e01..2ae0b1b 100644 --- a/media/ffmpeg/ffmpeg_common.cc +++ b/media/ffmpeg/ffmpeg_common.cc @@ -147,6 +147,8 @@ VideoCodec CodecIDToVideoCodec(CodecID codec_id) { return kCodecMPEG4; case CODEC_ID_VP8: return kCodecVP8; + case AV_CODEC_ID_VP9: + return kCodecVP9; default: DVLOG(1) << "Unknown video CodecID: " << codec_id; } @@ -163,6 +165,8 @@ static CodecID VideoCodecToCodecID(VideoCodec video_codec) { return CODEC_ID_MPEG4; case kCodecVP8: return CODEC_ID_VP8; + case kCodecVP9: + return AV_CODEC_ID_VP9; default: DVLOG(1) << "Unknown VideoCodec: " << video_codec; } @@ -335,13 +339,28 @@ void AVStreamToVideoDecoderConfig( aspect_ratio = stream->codec->sample_aspect_ratio; VideoCodec codec = CodecIDToVideoCodec(stream->codec->codec_id); - VideoCodecProfile profile = (codec == kCodecVP8) ? VP8PROFILE_MAIN : - ProfileIDToVideoCodecProfile(stream->codec->profile); + + VideoCodecProfile profile = VIDEO_CODEC_PROFILE_UNKNOWN; + if (codec == kCodecVP8) + profile = VP8PROFILE_MAIN; + else if (codec == kCodecVP9) + profile = VP9PROFILE_MAIN; + else + profile = ProfileIDToVideoCodecProfile(stream->codec->profile); + gfx::Size natural_size = GetNaturalSize( visible_rect.size(), aspect_ratio.num, aspect_ratio.den); + + VideoFrame::Format format = PixelFormatToVideoFormat(stream->codec->pix_fmt); + if (codec == kCodecVP9) { + // TODO(tomfinegan): libavcodec doesn't know about VP9. + format = VideoFrame::YV12; + coded_size = natural_size; + } + config->Initialize(codec, profile, - PixelFormatToVideoFormat(stream->codec->pix_fmt), + format, coded_size, visible_rect, natural_size, stream->codec->extradata, stream->codec->extradata_size, false, // Not encrypted. |