Diff
Modified: branches/safari-611-branch/Source/ThirdParty/libwebrtc/ChangeLog (279020 => 279021)
--- branches/safari-611-branch/Source/ThirdParty/libwebrtc/ChangeLog 2021-06-17 22:59:22 UTC (rev 279020)
+++ branches/safari-611-branch/Source/ThirdParty/libwebrtc/ChangeLog 2021-06-17 22:59:24 UTC (rev 279021)
@@ -1,3 +1,36 @@
+2021-06-17 Alan Coon <[email protected]>
+
+ Cherry-pick r279011. rdar://problem/79474211
+
+ [Mac] libwebrtc CMBaseClass objects need alignment fixup
+ https://bugs.webkit.org/show_bug.cgi?id=227137
+
+ Reviewed by Youenn Fablet.
+
+ * Source/webrtc/sdk/WebKit/WebKitVP8Decoder.cpp:
+ (webrtc::createWebKitVP8Decoder): Add padding to the CMBaseClass object on x86_64
+ so function pointers are naturally aligned. Add static_asserts to ensure alignment
+ and sizes are correct.
+ * Source/webrtc/sdk/WebKit/WebKitVP9Decoder.cpp:
+ (webrtc::createWebKitVP9Decoder): Ditto.
+
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@279011 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 2021-06-17 Eric Carlson <[email protected]>
+
+ [Mac] libwebrtc CMBaseClass objects need alignment fixup
+ https://bugs.webkit.org/show_bug.cgi?id=227137
+
+ Reviewed by Youenn Fablet.
+
+ * Source/webrtc/sdk/WebKit/WebKitVP8Decoder.cpp:
+ (webrtc::createWebKitVP8Decoder): Add padding to the CMBaseClass object on x86_64
+ so function pointers are naturally aligned. Add static_asserts to ensure alignment
+ and sizes are correct.
+ * Source/webrtc/sdk/WebKit/WebKitVP9Decoder.cpp:
+ (webrtc::createWebKitVP9Decoder): Ditto.
+
2021-06-15 Alan Coon <[email protected]>
Cherry-pick r278410. rdar://problem/79355285
Modified: branches/safari-611-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitVP8Decoder.cpp (279020 => 279021)
--- branches/safari-611-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitVP8Decoder.cpp 2021-06-17 22:59:22 UTC (rev 279020)
+++ branches/safari-611-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitVP8Decoder.cpp 2021-06-17 22:59:24 UTC (rev 279021)
@@ -47,20 +47,34 @@
static void finalizeVP8Decoder(CMBaseObjectRef);
static CFStringRef copyVP8DecoderDebugDescription(CMBaseObjectRef);
-static const CMBaseClass WebKitVP8Decoder_BaseClass =
-{
- kCMBaseObject_ClassVersion_1,
- sizeof(WebKitVP8Decoder),
- nullptr, // Comparison by pointer equality
- invalidateVP8Decoder,
- finalizeVP8Decoder,
- copyVP8DecoderDebugDescription,
- nullptr, // CopyProperty
- nullptr, // SetProperty
- nullptr,
- nullptr
-};
+#if defined(__x86_64__) || defined(_M_X64)
+ constexpr size_t padSize = 4;
+#else
+ constexpr size_t padSize = 0;
+#endif
+#pragma pack(push, 4)
+ struct DecoderClass { uint8_t pad[padSize]; CMBaseClass alignedClass; } WebKitVP8Decoder_BaseClass { { }, {
+ kCMBaseObject_ClassVersion_1,
+ sizeof(WebKitVP8Decoder),
+ nullptr, // Comparison by pointer equality
+ invalidateVP8Decoder,
+ finalizeVP8Decoder,
+ copyVP8DecoderDebugDescription,
+ nullptr, // CopyProperty
+ nullptr, // SetProperty
+ nullptr,
+ nullptr
+ } };
+#pragma pack(pop)
+
+#if defined(__x86_64__) || defined(_M_X64)
+ static_assert(sizeof(WebKitVP8Decoder_BaseClass.alignedClass.version) != sizeof(void*), "CMBaseClass fixup is required on X86_64");
+#else
+ static_assert(sizeof(WebKitVP8Decoder_BaseClass.alignedClass.version) == sizeof(void*), "CMBaseClass fixup only required on X86_64");
+#endif
+ static_assert(alignof(DecoderClass) == 4, "CMBaseClass must have 4 byte alignment");
+
static OSStatus startVP8DecoderSession(VTVideoDecoderRef, VTVideoDecoderSession, CMVideoFormatDescriptionRef);
static OSStatus decodeVP8DecoderFrame(VTVideoDecoderRef, VTVideoDecoderFrame, CMSampleBufferRef, VTDecodeFrameFlags, VTDecodeInfoFlags*);
@@ -81,7 +95,7 @@
static const VTVideoDecoderVTable WebKitVP8DecoderVTable =
{
- { nullptr, &WebKitVP8Decoder_BaseClass },
+ { nullptr, &WebKitVP8Decoder_BaseClass.alignedClass },
&WebKitVP8Decoder_VideoDecoderClass
};
Modified: branches/safari-611-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitVP9Decoder.cpp (279020 => 279021)
--- branches/safari-611-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitVP9Decoder.cpp 2021-06-17 22:59:22 UTC (rev 279020)
+++ branches/safari-611-branch/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitVP9Decoder.cpp 2021-06-17 22:59:24 UTC (rev 279021)
@@ -47,20 +47,34 @@
static void finalizeVP9Decoder(CMBaseObjectRef);
static CFStringRef copyVP9DecoderDebugDescription(CMBaseObjectRef);
-static const CMBaseClass WebKitVP9Decoder_BaseClass =
-{
- kCMBaseObject_ClassVersion_1,
- sizeof(WebKitVP9Decoder),
- nullptr, // Comparison by pointer equality
- invalidateVP9Decoder,
- finalizeVP9Decoder,
- copyVP9DecoderDebugDescription,
- nullptr, // CopyProperty
- nullptr, // SetProperty
- nullptr,
- nullptr
-};
+#if defined(__x86_64__) || defined(_M_X64)
+ constexpr size_t padSize = 4;
+#else
+ constexpr size_t padSize = 0;
+#endif
+#pragma pack(push, 4)
+ struct DecoderClass { uint8_t pad[padSize]; CMBaseClass alignedClass; } WebKitVP9Decoder_BaseClass { { }, {
+ kCMBaseObject_ClassVersion_1,
+ sizeof(WebKitVP9Decoder),
+ nullptr, // Comparison by pointer equality
+ invalidateVP9Decoder,
+ finalizeVP9Decoder,
+ copyVP9DecoderDebugDescription,
+ nullptr, // CopyProperty
+ nullptr, // SetProperty
+ nullptr,
+ nullptr
+ } };
+#pragma pack(pop)
+
+#if defined(__x86_64__) || defined(_M_X64)
+ static_assert(sizeof(WebKitVP9Decoder_BaseClass.alignedClass.version) != sizeof(void*), "CMBaseClass fixup is required on X86_64");
+#else
+ static_assert(sizeof(WebKitVP9Decoder_BaseClass.alignedClass.version) == sizeof(void*), "CMBaseClass fixup only required on X86_64");
+#endif
+ static_assert(alignof(DecoderClass) == 4, "CMBaseClass must have 4 byte alignment");
+
static OSStatus startVP9DecoderSession(VTVideoDecoderRef, VTVideoDecoderSession, CMVideoFormatDescriptionRef);
static OSStatus decodeVP9DecoderFrame(VTVideoDecoderRef, VTVideoDecoderFrame, CMSampleBufferRef, VTDecodeFrameFlags, VTDecodeInfoFlags*);
@@ -81,7 +95,7 @@
static const VTVideoDecoderVTable WebKitVP9DecoderVTable =
{
- { nullptr, &WebKitVP9Decoder_BaseClass },
+ { nullptr, &WebKitVP9Decoder_BaseClass.alignedClass },
&WebKitVP9Decoder_VideoDecoderClass
};