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

Unified Diff: media/video/video_decode_accelerator.h

Issue 7779001: Replace the use of an int32* with a proper struct for decoder configuration. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Replaced struct with explicit profile parameter. Created 9 years, 4 months 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 side-by-side diff with in-line comments
Download patch
Index: media/video/video_decode_accelerator.h
diff --git a/media/video/video_decode_accelerator.h b/media/video/video_decode_accelerator.h
index 799dca79a5bbd252be8864bba9e70f92c720e257..9a31bfdcfe9fdb430f7bfebc70ca8fb327debe55 100644
--- a/media/video/video_decode_accelerator.h
+++ b/media/video/video_decode_accelerator.h
@@ -15,149 +15,6 @@
namespace media {
-// Enumeration defining global dictionary ranges for various purposes that are
-// used to handle the configurations of the video decoder.
-//
-// IMPORTANT! Dictionary keys and corresponding values MUST match the ones found
-// in Pepper API dictionary for video (ppapi/c/dev/pp_video_dev.h)!
-enum VideoAttributeKey {
- VIDEOATTRIBUTEKEY_TERMINATOR = 0,
-
- VIDEOATTRIBUTEKEY_BITSTREAM_FORMAT_BASE = 0x100,
- // Array of key/value pairs describing video configuration.
- // It could include any keys from PP_VideoKey. Its last element shall be
- // VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_NONE with no corresponding value.
- // An example:
- // {
- // VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_FOURCC, PP_VIDEODECODECID_VP8,
- // VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_VP8_PROFILE, (VP8PROFILE_1 |
- // VP8PROFILE_2 |
- // VP8PROFILE_3),
- // VIDEOATTRIBUTEKEY_TERMINATOR
- // };
- // Keys for defining video bitstream format.
- // Value is type of PP_VideoCodecFourcc. Commonly known attributes values are
- // defined in PP_VideoCodecFourcc enumeration.
- VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_FOURCC,
- // Bitrate in bits/s. Attribute value is 32-bit unsigned integer.
- VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_BITRATE,
- // Width and height of the input video bitstream, if known by the application.
- // Decoder will expect the bitstream to match these values and does memory
- // considerations accordingly.
- VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_WIDTH,
- VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_HEIGHT,
- // Following attributes are applicable only in case of VP8.
- // Key for VP8 profile attribute. Attribute value is bitmask of flags defined
- // in PP_VP8Profile_Dev enumeration.
- VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_VP8_PROFILE,
- // Number of partitions per picture. Attribute value is unsigned 32-bit
- // integer.
- VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_VP8_NUM_OF_PARTITIONS,
- // Following attributes are applicable only in case of H.264.
- // Value is bitmask collection from the flags defined in PP_H264Profile.
- VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_H264_PROFILE,
- // Value is type of PP_H264Level.
- VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_H264_LEVEL,
- // Value is type of PP_H264PayloadFormat_Dev.
- VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_H264_PAYLOADFORMAT,
- // Subset for H.264 features, attribute value 0 signifies unsupported.
- // This is needed in case decoder has partial support for certain profile.
- // Default for features are enabled if they're part of supported profile.
- // H264 tool called Flexible Macroblock Ordering.
- VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_H264_FEATURE_FMO,
- // H264 tool called Arbitrary Slice Ordering.
- VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_H264_FEATURE_ASO,
- // H264 tool called Interlacing.
- VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_H264_FEATURE_INTERLACE,
- // H264 tool called Context-Adaptive Binary Arithmetic Coding.
- VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_H264_FEATURE_CABAC,
- // H264 tool called Weighted Prediction.
- VIDEOATTRIBUTEKEY_BITSTREAMFORMAT_H264_FEATURE_WEIGHTEDPREDICTION,
-
- VIDEOATTRIBUTEKEY_COLOR_FORMAT_BASE = 0x1000,
- // This specifies the output color format for a decoded frame. Value is one
- // of the values in VideoColorFormat enumeration.
- VIDEOATTRIBUTEKEY_VIDEOCOLORFORMAT,
-};
-
-enum VideoCodecFourcc {
- VIDEOCODECFOURCC_NONE = 0,
- VIDEOCODECFOURCC_VP8 = 0x00385056, // a.k.a. Fourcc 'VP8\0'.
- VIDEOCODECFOURCC_H264 = 0x31637661, // a.k.a. Fourcc 'avc1'.
-};
-
-// VP8 specific information to be carried over the APIs.
-// Enumeration for flags defining supported VP8 profiles.
-enum VP8Profile {
- VP8PROFILE_NONE = 0,
- VP8PROFILE_0 = 1,
- VP8PROFILE_1 = 1 << 1,
- VP8PROFILE_2 = 1 << 2,
- VP8PROFILE_3 = 1 << 3,
-};
-
-// H.264 specific information to be carried over the APIs.
-// Enumeration for flags defining supported H.264 profiles.
-enum H264Profile {
- H264PROFILE_NONE = 0,
- H264PROFILE_BASELINE = 1,
- H264PROFILE_MAIN = 1 << 2,
- H264PROFILE_EXTENDED = 1 << 3,
- H264PROFILE_HIGH = 1 << 4,
- H264PROFILE_HIGH10PROFILE = 1 << 5,
- H264PROFILE_HIGH422PROFILE = 1 << 6,
- H264PROFILE_HIGH444PREDICTIVEPROFILE = 1 << 7,
- H264PROFILE_SCALABLEBASELINE = 1 << 8,
- H264PROFILE_SCALABLEHIGH = 1 << 9,
- H264PROFILE_STEREOHIGH = 1 << 10,
- H264PROFILE_MULTIVIEWHIGH = 1 << 11,
-};
-
-// Enumeration for defining H.264 level of decoder implementation.
-enum H264Level {
- H264LEVEL_NONE = 0,
- H264LEVEL_10 = 1,
- H264LEVEL_1B = H264LEVEL_10 | 1 << 1,
- H264LEVEL_11 = H264LEVEL_1B | 1 << 2,
- H264LEVEL_12 = H264LEVEL_11 | 1 << 3,
- H264LEVEL_13 = H264LEVEL_12 | 1 << 4,
- H264LEVEL_20 = H264LEVEL_13 | 1 << 5,
- H264LEVEL_21 = H264LEVEL_20 | 1 << 6,
- H264LEVEL_22 = H264LEVEL_21 | 1 << 7,
- H264LEVEL_30 = H264LEVEL_22 | 1 << 8,
- H264LEVEL_31 = H264LEVEL_30 | 1 << 9,
- H264LEVEL_32 = H264LEVEL_31 | 1 << 10,
- H264LEVEL_40 = H264LEVEL_32 | 1 << 11,
- H264LEVEL_41 = H264LEVEL_40 | 1 << 12,
- H264LEVEL_42 = H264LEVEL_41 | 1 << 13,
- H264LEVEL_50 = H264LEVEL_42 | 1 << 14,
- H264LEVEL_51 = H264LEVEL_50 | 1 << 15,
-};
-
-// Enumeration to describe which payload format is used within the exchanged
-// bitstream buffers.
-enum H264PayloadFormat {
- H264PAYLOADFORMAT_NONE = 0,
- // NALUs separated by Start Code.
- H264PAYLOADFORMAT_BYTESTREAM = 1,
- // Exactly one raw NALU per buffer.
- H264PAYLOADFORMAT_ONE_NALU_PER_BUFFER = 1 << 1,
- // NALU separated by 1-byte interleaved length field.
- H264PAYLOADFORMAT_ONE_BYTE_INTERLEAVED_LENGTH = 1 << 2,
- // NALU separated by 2-byte interleaved length field.
- H264PAYLOADFORMAT_TWO_BYTE_INTERLEAVED_LENGTH = 1 << 3,
- // NALU separated by 4-byte interleaved length field.
- H264PAYLOADFORMAT_FOUR_BYTE_INTERLEAVED_LENGTH = 1 << 4,
-};
-
-// Enumeration for various color formats.
-enum VideoColorFormat {
- // Value represents 32-bit RGBA format where each component is 8-bit in order
- // R-G-B-A. Regardless of endianness of the architecture color components are
- // stored in this order in the memory.
- VIDEOCOLORFORMAT_RGBA = 0,
-};
-
// Video decoder interface.
// This interface is extended by the various components that ultimately
// implement the backend of PPB_VideoDecode_Dev.
@@ -167,6 +24,26 @@ enum VideoColorFormat {
class MEDIA_EXPORT VideoDecodeAccelerator
: public base::RefCountedThreadSafe<VideoDecodeAccelerator> {
public:
+ // Video stream profile. This *must* match PP_VideoDecoder_Profile.
+ enum Profile {
+ // 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
+ // together for clarity.
+ H264PROFILE_MIN = 0,
+ H264PROFILE_BASELINE = H264PROFILE_MIN,
+ H264PROFILE_MAIN,
+ H264PROFILE_EXTENDED,
+ H264PROFILE_HIGH,
+ H264PROFILE_HIGH10PROFILE,
+ H264PROFILE_HIGH422PROFILE,
+ H264PROFILE_HIGH444PREDICTIVEPROFILE,
+ H264PROFILE_SCALABLEBASELINE,
+ H264PROFILE_SCALABLEHIGH,
+ H264PROFILE_STEREOHIGH,
+ H264PROFILE_MULTIVIEWHIGH,
+ H264PROFILE_MAX = H264PROFILE_MULTIVIEWHIGH,
+ };
+
// Enumeration of potential errors generated by the API.
// Note: Keep these in sync with PP_VideoDecodeError_Dev.
enum Error {
@@ -226,10 +103,10 @@ class MEDIA_EXPORT VideoDecodeAccelerator
// Initializes the video decoder with specific configuration.
// Parameters:
- // |config| is the configuration on which the decoder should be initialized.
+ // |profile| is the video stream's format profile.
//
// Returns true when command successfully accepted. Otherwise false.
- virtual bool Initialize(const std::vector<int32>& config) = 0;
+ virtual bool Initialize(Profile profile) = 0;
// Decodes given bitstream buffer. Once decoder is done with processing
// |bitstream_buffer| it will call NotifyEndOfBitstreamBuffer() with the

Powered by Google App Engine
This is Rietveld 408576698