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

Unified Diff: ppapi/c/dev/pp_video_dev.h

Issue 5674004: Add compile assertions to enforce the sizes of all structs and enums in the C... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 10 years 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
« no previous file with comments | « ppapi/c/dev/pp_file_info_dev.h ('k') | ppapi/c/dev/ppb_audio_config_dev.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/c/dev/pp_video_dev.h
===================================================================
--- ppapi/c/dev/pp_video_dev.h (revision 68603)
+++ ppapi/c/dev/pp_video_dev.h (working copy)
@@ -7,6 +7,7 @@
#include "ppapi/c/pp_bool.h"
#include "ppapi/c/pp_instance.h"
+#include "ppapi/c/pp_macros.h"
#include "ppapi/c/pp_resource.h"
#include "ppapi/c/pp_stdint.h"
@@ -39,6 +40,7 @@
PP_VIDEOKEY_H264FEATURE_CABAC,
PP_VIDEOKEY_H264FEATURE_WEIGHTEDPREDICTION
};
+PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoKey_Dev, 4);
enum PP_VideoDecoderEvent_Dev {
PP_VIDEODECODEREVENT_NONE = 0,
@@ -49,6 +51,7 @@
// Signaling new cropping rectangle
PP_VIDEODECODEREVENT_NEWCROP
};
+PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoDecoderEvent_Dev, 4);
enum PP_VideoDecodeError_Dev {
PP_VIDEODECODEERROR_NONE = 0,
@@ -58,6 +61,7 @@
PP_VIDEODECODEERROR_BADINPUT,
PP_VIDEODECODEERROR_HARDWARE
};
+PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoDecodeError_Dev, 4);
enum PP_VideoCodecId_Dev {
PP_VIDEODECODECID_NONE = 0,
@@ -66,12 +70,14 @@
PP_VIDEODECODECID_MPEG2,
PP_VIDEODECODECID_VP8
};
+PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoCodecId_Dev, 4);
enum PP_VideoOperation_Dev {
PP_VIDEOOPERATION_NONE = 0,
PP_VIDEOOPERATION_DECODE,
PP_VIDEOOPERATION_ENCODE
};
+PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoOperation_Dev, 4);
enum PP_VideoCodecProfile_Dev {
PP_VIDEOCODECPROFILE_NONE = 0,
@@ -94,6 +100,7 @@
PP_VIDEOCODECPROFILE_MPEG2_SPATIAL,
PP_VIDEOCODECPROFILE_MPEG2_HIGH
};
+PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoCodecProfile_Dev, 4);
enum PP_VideoCodecLevel_Dev {
PP_VIDEOCODECLEVEL_NONE = 0,
@@ -128,12 +135,14 @@
PP_VIDEOCODECLEVEL_MPEG2_HIGH1440,
PP_VIDEOCODECLEVEL_MPEG2_HIGH
};
+PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoCodecLevel_Dev, 4);
enum PP_VideoPayloadFormat_Dev {
PP_VIDEOPAYLOADFORMAT_NONE = 0,
PP_VIDEOPAYLOADFORMAT_BYTESTREAM,
PP_VIDEOPAYLOADFORMAT_RTPPAYLOAD
};
+PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoPayloadFormat_Dev, 4);
enum PP_VideoFrameColorType_Dev {
PP_VIDEOFRAMECOLORTYPE_NONE = 0,
@@ -145,6 +154,7 @@
PP_VIDEOFRAMECOLORTYPE_YUV422PLANAR,
PP_VIDEOFRAMECOLORTYPE_YUV444PLANAR
};
+PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoFrameColorType_Dev, 4);
enum PP_VideoFrameSurfaceType_Dev {
PP_VIDEOFRAMESURFACETYPE_NONE = 0,
@@ -152,6 +162,7 @@
PP_VIDEOFRAMESURFACETYPE_GLTEXTURE,
PP_VIDEOFRAMESURFACETYPE_PIXMAP
};
+PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoFrameSurfaceType_Dev, 4);
enum PP_VideoFrameInfoFlag_Dev {
PP_VIDEOFRAMEINFOFLAG_NONE = 0,
@@ -164,6 +175,7 @@
// Indicate the decoded frame has data corruption. Used by browser.
PP_VIDEOFRAMEINFOFLAG_DATACORRUPT = 1 << 3
};
+PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoFrameInfoFlag_Dev, 4);
enum PP_VideoFrameBufferConst_Dev {
// YUV formats
@@ -178,8 +190,10 @@
PP_VIDEOFRAMEBUFFER_MAXNUMBERPLANES = 4
};
+PP_COMPILE_ASSERT_ENUM_SIZE_IN_BYTES(PP_VideoFrameBufferConst_Dev, 4);
typedef int64_t PP_VideoDecodeData_Dev;
+PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_VideoDecodeData_Dev, 8);
// Array of key/value pairs describing video configuration.
// It could include any keys from PP_VideoKey. Its last element shall be
@@ -195,34 +209,48 @@
// };
typedef int32_t* PP_VideoConfig_Dev;
typedef int32_t PP_VideoConfigElement_Dev;
+PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_VideoConfigElement_Dev, 4);
// The data structure for compressed data buffer.
struct PP_VideoCompressedDataBuffer_Dev {
// The buffer is created through PPB_Buffer API.
// TODO(wjia): would uint8_t* be good, too?
PP_Resource buffer;
+
// number of bytes with real data in the buffer.
int32_t filled_size;
+ // Bit mask of PP_VideoFrameInfoFlag.
+ uint32_t flags;
+
// Time stamp of the frame in microsecond.
uint64_t time_stamp_us;
-
- // Bit mask of PP_VideoFrameInfoFlag.
- uint32_t flags;
};
+PP_COMPILE_ASSERT_STRUCT_SIZE_IN_BYTES(PP_VideoCompressedDataBuffer_Dev, 24);
struct PP_VideoFrameBuffer_Dev {
union {
struct {
- int32_t planes;
struct {
int32_t width;
int32_t height;
int32_t stride;
+ // Padding to ensure the PP_Resource is 8-byte aligned relative to the
+ // start of the struct. This helps ensure PP_VideoFrameBuffer_Dev has
+ // consistent size and alignment across compilers.
+ int32_t padding;
+
// TODO(wjia): uint8* would be better for some cases.
PP_Resource buffer;
} data_plane[PP_VIDEOFRAMEBUFFER_MAXNUMBERPLANES];
+
+ int32_t planes;
+
+ // This padding makes sure the sys_mem struct's size is a multiple of 8
+ // bytes, ensuring that handle is always 8-byte aligned relative to the
+ // start of the PP_VideoFrameBuffer_Dev struct.
+ int32_t padding;
} sys_mem;
// Handle for pixmap, gl texture, etc.
@@ -232,23 +260,40 @@
// Storage for decoder to save some private data. It could be useful when
// plugin returns frame buffer to decoder.
void* private_handle;
+
+ // In some 32-bit platforms (NaCl and Win32), this struct is 8-byte aligned
darin (slow to review) 2010/12/13 08:24:57 Is this comment out-dated now that PP_Resource has
+ // due to the PP_Resource above. That causes the compiler to pad it an extra
+ // 4 bytes on the end. In other 32-bit platforms, there is no such pad. This
+ // padding ensures that the size is consistent on 32-bit platforms (and it
+ // is still consistent on 64-bit platforms, just bigger than it would be
+ // without the padding).
+ int32_t padding;
};
struct PP_VideoUncompressedDataBuffer_Dev {
PP_VideoConfig_Dev format;
- struct PP_VideoFrameBuffer_Dev buffer;
+ // Bit mask of PP_VideoFrameInfoFlag.
+ uint32_t flags;
+
// Time stamp of the frame in microsecond.
uint64_t time_stamp_us;
- // Bit mask of PP_VideoFrameInfoFlag.
- uint32_t flags;
+ struct PP_VideoFrameBuffer_Dev buffer;
// Output from decoder, indicating the decoded frame has error pixels. This
// could be resulted from corrupted input bit stream and error concealment
// in decoding. PP_TRUE indicates error.
// TODO(wjia): add more info about error pixels, such as error MB map, etc.
PP_Bool error;
+
+ // In some 32-bit platforms (NaCl and Win32), this struct is 8-byte aligned
+ // due to the uint64_t and buffer above. That causes the compiler to pad it
+ // an extra 4 bytes on the end. In other 32-bit platforms, there is no such
+ // pad. This padding ensures that the size is consistent on 32-bit platforms
+ // (and it is still consistent on 64-bit platforms, just bigger than it would
+ // be without the padding).
+ int32_t padding;
};
// Plugin callback for decoder to deliver decoded frame buffers.
« no previous file with comments | « ppapi/c/dev/pp_file_info_dev.h ('k') | ppapi/c/dev/ppb_audio_config_dev.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698