summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-30 21:36:00 +0000
committerfischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-30 21:36:00 +0000
commitc9ea52e108e514c9c3fc9c1d721316cbe9d4cd4a (patch)
treea5e46cbbb7e3c8a01c65c85ddc1828f4f698bd94
parent2e18d74b76c4b03a92ee008b6a5e5caaf6139224 (diff)
downloadchromium_src-c9ea52e108e514c9c3fc9c1d721316cbe9d4cd4a.zip
chromium_src-c9ea52e108e514c9c3fc9c1d721316cbe9d4cd4a.tar.gz
chromium_src-c9ea52e108e514c9c3fc9c1d721316cbe9d4cd4a.tar.bz2
Fix h.264 Profile conversion between ppapi & media worlds (since they were off by one before).
Review URL: https://chromiumcodereview.appspot.com/9864025 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@129951 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--media/base/video_decoder_config.h1
-rw-r--r--webkit/plugins/ppapi/ppb_video_decoder_impl.cc34
2 files changed, 32 insertions, 3 deletions
diff --git a/media/base/video_decoder_config.h b/media/base/video_decoder_config.h
index 96dd677..3d4d98c 100644
--- a/media/base/video_decoder_config.h
+++ b/media/base/video_decoder_config.h
@@ -34,6 +34,7 @@ enum MEDIA_EXPORT VideoCodec {
};
// Video stream profile. This *must* match PP_VideoDecoder_Profile.
+// (enforced in webkit/plugins/ppapi/ppb_video_decoder_impl.cc)
enum MEDIA_EXPORT VideoCodecProfile {
// Keep the values in this enum unique, as they imply format (h.264 vs. VP8,
// for example), and keep the values for a particular format grouped
diff --git a/webkit/plugins/ppapi/ppb_video_decoder_impl.cc b/webkit/plugins/ppapi/ppb_video_decoder_impl.cc
index ac4a82b..db8a8f6 100644
--- a/webkit/plugins/ppapi/ppb_video_decoder_impl.cc
+++ b/webkit/plugins/ppapi/ppb_video_decoder_impl.cc
@@ -48,9 +48,37 @@ PPB_VideoDecoder_Impl::~PPB_VideoDecoder_Impl() {
// Convert PP_VideoDecoder_Profile to media::VideoCodecProfile.
static media::VideoCodecProfile PPToMediaProfile(
const PP_VideoDecoder_Profile pp_profile) {
- // TODO(fischman,vrk): this assumes the enum values in the two Profile types
- // match up exactly. Add a COMPILE_ASSERT for this somewhere.
- return static_cast<media::VideoCodecProfile>(pp_profile);
+ switch (pp_profile) {
+ case PP_VIDEODECODER_H264PROFILE_NONE:
+ // HACK: PPAPI contains a bogus "none" h264 profile that doesn't
+ // correspond to anything in h.264; but a number of released chromium
+ // versions silently promoted this to Baseline profile, so we retain that
+ // behavior here. Fall through.
+ case PP_VIDEODECODER_H264PROFILE_BASELINE:
+ return media::H264PROFILE_BASELINE;
+ case PP_VIDEODECODER_H264PROFILE_MAIN:
+ return media::H264PROFILE_MAIN;
+ case PP_VIDEODECODER_H264PROFILE_EXTENDED:
+ return media::H264PROFILE_EXTENDED;
+ case PP_VIDEODECODER_H264PROFILE_HIGH:
+ return media::H264PROFILE_HIGH;
+ case PP_VIDEODECODER_H264PROFILE_HIGH10PROFILE:
+ return media::H264PROFILE_HIGH10PROFILE;
+ case PP_VIDEODECODER_H264PROFILE_HIGH422PROFILE:
+ return media::H264PROFILE_HIGH422PROFILE;
+ case PP_VIDEODECODER_H264PROFILE_HIGH444PREDICTIVEPROFILE:
+ return media::H264PROFILE_HIGH444PREDICTIVEPROFILE;
+ case PP_VIDEODECODER_H264PROFILE_SCALABLEBASELINE:
+ return media::H264PROFILE_SCALABLEBASELINE;
+ case PP_VIDEODECODER_H264PROFILE_SCALABLEHIGH:
+ return media::H264PROFILE_SCALABLEHIGH;
+ case PP_VIDEODECODER_H264PROFILE_STEREOHIGH:
+ return media::H264PROFILE_STEREOHIGH;
+ case PP_VIDEODECODER_H264PROFILE_MULTIVIEWHIGH:
+ return media::H264PROFILE_MULTIVIEWHIGH;
+ default:
+ return media::VIDEO_CODEC_PROFILE_UNKNOWN;
+ }
}
// static