Index: content/renderer/pepper/video_decoder_shim.cc |
diff --git a/content/renderer/pepper/video_decoder_shim.cc b/content/renderer/pepper/video_decoder_shim.cc |
index 36c4b9fb80d9609ba9c123f7b0f513ad988ad0e6..32f80bf159526620f84d5ffbb88d5bf6f0a43577 100644 |
--- a/content/renderer/pepper/video_decoder_shim.cc |
+++ b/content/renderer/pepper/video_decoder_shim.cc |
@@ -18,6 +18,7 @@ |
#include "media/base/limits.h" |
#include "media/base/video_decoder.h" |
#include "media/filters/ffmpeg_video_decoder.h" |
+#include "media/filters/vpx_video_decoder.h" |
#include "media/video/picture.h" |
#include "media/video/video_decode_accelerator.h" |
#include "ppapi/c/pp_errors.h" |
@@ -124,10 +125,15 @@ VideoDecoderShim::DecoderImpl::~DecoderImpl() { |
void VideoDecoderShim::DecoderImpl::Initialize( |
media::VideoDecoderConfig config) { |
DCHECK(!decoder_); |
- scoped_ptr<media::FFmpegVideoDecoder> ffmpeg_video_decoder( |
- new media::FFmpegVideoDecoder(base::MessageLoopProxy::current())); |
- ffmpeg_video_decoder->set_decode_nalus(true); |
- decoder_ = ffmpeg_video_decoder.Pass(); |
+ if (config.codec() == media::kCodecVP9) { |
+ decoder_.reset( |
+ new media::VpxVideoDecoder(base::MessageLoopProxy::current())); |
+ } else { |
+ scoped_ptr<media::FFmpegVideoDecoder> ffmpeg_video_decoder( |
+ new media::FFmpegVideoDecoder(base::MessageLoopProxy::current())); |
+ ffmpeg_video_decoder->set_decode_nalus(true); |
+ decoder_ = ffmpeg_video_decoder.Pass(); |
+ } |
max_decodes_at_decoder_ = decoder_->GetMaxDecodeRequests(); |
// We can use base::Unretained() safely in decoder callbacks because we call |
// VideoDecoder::Stop() before deletion. Stop() guarantees there will be no |
@@ -324,6 +330,8 @@ bool VideoDecoderShim::Initialize( |
codec = media::kCodecH264; |
else if (profile <= media::VP8PROFILE_MAX) |
codec = media::kCodecVP8; |
+ else if (profile <= media::VP9PROFILE_MAX) |
+ codec = media::kCodecVP9; |
DCHECK_NE(codec, media::kUnknownVideoCodec); |
media::VideoDecoderConfig config( |