200 lines
7.2 KiB
Diff
200 lines
7.2 KiB
Diff
|
From cd10f3ba0d83f34ca978cc4c7a552b72fdd068aa Mon Sep 17 00:00:00 2001
|
||
|
From: David Tolnay <dtolnay@gmail.com>
|
||
|
Date: Tue, 28 Nov 2023 11:18:39 -0800
|
||
|
Subject: [PATCH 1/2] Flatten cursor.kind() matching in Item::parse down to one
|
||
|
match
|
||
|
|
||
|
---
|
||
|
third_party/rust/bindgen/ir/item.rs | 84 ++++++++++++++++++++++------------------------
|
||
|
1 file changed, 41 insertions(+), 43 deletions(-)
|
||
|
|
||
|
diff --git a/third_party/rust/bindgen/ir/item.rs b/third_party/rust/bindgen/ir/item.rs
|
||
|
index 0556452bfa..4f2d361e51 100644
|
||
|
--- a/third_party/rust/bindgen/ir/item.rs
|
||
|
+++ b/third_party/rust/bindgen/ir/item.rs
|
||
|
@@ -1427,53 +1427,52 @@
|
||
|
}
|
||
|
}
|
||
|
|
||
|
- // Guess how does clang treat extern "C" blocks?
|
||
|
- if cursor.kind() == CXCursor_UnexposedDecl {
|
||
|
- Err(ParseError::Recurse)
|
||
|
- } else {
|
||
|
+ match cursor.kind() {
|
||
|
+ // Guess how does clang treat extern "C" blocks?
|
||
|
+ CXCursor_UnexposedDecl => Err(ParseError::Recurse),
|
||
|
+
|
||
|
// We allowlist cursors here known to be unhandled, to prevent being
|
||
|
// too noisy about this.
|
||
|
- match cursor.kind() {
|
||
|
- CXCursor_MacroDefinition |
|
||
|
- CXCursor_MacroExpansion |
|
||
|
- CXCursor_UsingDeclaration |
|
||
|
- CXCursor_UsingDirective |
|
||
|
- CXCursor_StaticAssert |
|
||
|
- CXCursor_FunctionTemplate => {
|
||
|
- debug!(
|
||
|
- "Unhandled cursor kind {:?}: {:?}",
|
||
|
- cursor.kind(),
|
||
|
- cursor
|
||
|
- );
|
||
|
- }
|
||
|
- CXCursor_InclusionDirective => {
|
||
|
- let file = cursor.get_included_file_name();
|
||
|
- match file {
|
||
|
- None => {
|
||
|
- warn!(
|
||
|
- "Inclusion of a nameless file in {:?}",
|
||
|
- cursor
|
||
|
- );
|
||
|
- }
|
||
|
- Some(filename) => {
|
||
|
- ctx.include_file(filename);
|
||
|
- }
|
||
|
- }
|
||
|
- }
|
||
|
- _ => {
|
||
|
- // ignore toplevel operator overloads
|
||
|
- let spelling = cursor.spelling();
|
||
|
- if !spelling.starts_with("operator") {
|
||
|
+ CXCursor_MacroDefinition |
|
||
|
+ CXCursor_MacroExpansion |
|
||
|
+ CXCursor_UsingDeclaration |
|
||
|
+ CXCursor_UsingDirective |
|
||
|
+ CXCursor_StaticAssert |
|
||
|
+ CXCursor_FunctionTemplate => {
|
||
|
+ debug!(
|
||
|
+ "Unhandled cursor kind {:?}: {:?}",
|
||
|
+ cursor.kind(),
|
||
|
+ cursor
|
||
|
+ );
|
||
|
+ Err(ParseError::Continue)
|
||
|
+ }
|
||
|
+ CXCursor_InclusionDirective => {
|
||
|
+ let file = cursor.get_included_file_name();
|
||
|
+ match file {
|
||
|
+ None => {
|
||
|
warn!(
|
||
|
- "Unhandled cursor kind {:?}: {:?}",
|
||
|
- cursor.kind(),
|
||
|
+ "Inclusion of a nameless file in {:?}",
|
||
|
cursor
|
||
|
);
|
||
|
}
|
||
|
+ Some(filename) => {
|
||
|
+ ctx.include_file(filename);
|
||
|
+ }
|
||
|
}
|
||
|
+ Err(ParseError::Continue)
|
||
|
+ }
|
||
|
+ _ => {
|
||
|
+ // ignore toplevel operator overloads
|
||
|
+ let spelling = cursor.spelling();
|
||
|
+ if !spelling.starts_with("operator") {
|
||
|
+ warn!(
|
||
|
+ "Unhandled cursor kind {:?}: {:?}",
|
||
|
+ cursor.kind(),
|
||
|
+ cursor
|
||
|
+ );
|
||
|
+ }
|
||
|
+ Err(ParseError::Continue)
|
||
|
}
|
||
|
-
|
||
|
- Err(ParseError::Continue)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
From 2997017b5a3065b83e9d76f0080d6cb99c94c0c1 Mon Sep 17 00:00:00 2001
|
||
|
From: David Tolnay <dtolnay@gmail.com>
|
||
|
Date: Tue, 28 Nov 2023 11:21:18 -0800
|
||
|
Subject: [PATCH 2/2] Handle CXCursor_LinkageSpec in Clang 18+
|
||
|
|
||
|
---
|
||
|
third_party/rust/bindgen/ir/item.rs | 7 +++++--
|
||
|
1 file changed, 5 insertions(+), 2 deletions(-)
|
||
|
|
||
|
diff --git a/third_party/rust/bindgen/ir/item.rs b/third_party/rust/bindgen/ir/item.rs
|
||
|
index 4f2d361e51..dd587b088b 100644
|
||
|
--- a/third_party/rust/bindgen/ir/item.rs
|
||
|
+++ b/third_party/rust/bindgen/ir/item.rs
|
||
|
@@ -1433,8 +1433,11 @@ impl Item {
|
||
|
}
|
||
|
|
||
|
match cursor.kind() {
|
||
|
- // Guess how does clang treat extern "C" blocks?
|
||
|
- CXCursor_UnexposedDecl => Err(ParseError::Recurse),
|
||
|
+ // On Clang 18+, extern "C" is reported accurately as a LinkageSpec.
|
||
|
+ // Older LLVM treat it as UnexposedDecl.
|
||
|
+ CXCursor_LinkageSpec | CXCursor_UnexposedDecl => {
|
||
|
+ Err(ParseError::Recurse)
|
||
|
+ }
|
||
|
|
||
|
// We allowlist cursors here known to be unhandled, to prevent being
|
||
|
// too noisy about this.
|
||
|
diff --git a/dom/media/gmp-plugin-openh264/gmp-fake-openh264.cpp b/dom/media/gmp-plugin-openh264/gmp-fake-openh264.cpp
|
||
|
--- a/dom/media/gmp-plugin-openh264/gmp-fake-openh264.cpp
|
||
|
+++ b/dom/media/gmp-plugin-openh264/gmp-fake-openh264.cpp
|
||
|
@@ -97,11 +97,11 @@
|
||
|
uint32_t width_;
|
||
|
uint32_t height_;
|
||
|
uint8_t y_;
|
||
|
uint8_t u_;
|
||
|
uint8_t v_;
|
||
|
- uint32_t timestamp_;
|
||
|
+ uint64_t timestamp_;
|
||
|
} idr_nalu;
|
||
|
};
|
||
|
#pragma pack(pop)
|
||
|
|
||
|
#define ENCODED_FRAME_MAGIC 0x004000b8
|
||
|
diff --git a/dom/media/gtest/TestGMPRemoveAndDelete.cpp b/dom/media/gtest/TestGMPRemoveAndDelete.cpp
|
||
|
--- a/dom/media/gtest/TestGMPRemoveAndDelete.cpp
|
||
|
+++ b/dom/media/gtest/TestGMPRemoveAndDelete.cpp
|
||
|
@@ -359,11 +359,11 @@
|
||
|
uint32_t width_;
|
||
|
uint32_t height_;
|
||
|
uint8_t y_;
|
||
|
uint8_t u_;
|
||
|
uint8_t v_;
|
||
|
- uint32_t timestamp_;
|
||
|
+ uint64_t timestamp_;
|
||
|
} idr_nalu;
|
||
|
};
|
||
|
#pragma pack(pop)
|
||
|
|
||
|
GMPVideoFrame* absFrame;
|
||
|
diff --git a/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.h b/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.h
|
||
|
--- a/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.h
|
||
|
+++ b/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.h
|
||
|
@@ -300,11 +300,11 @@
|
||
|
|
||
|
struct InputImageData {
|
||
|
int64_t timestamp_us;
|
||
|
};
|
||
|
// Map rtp time -> input image data
|
||
|
- DataMutex<std::map<uint32_t, InputImageData>> mInputImageMap;
|
||
|
+ DataMutex<std::map<uint64_t, InputImageData>> mInputImageMap;
|
||
|
|
||
|
MediaEventProducer<uint64_t> mInitPluginEvent;
|
||
|
MediaEventProducer<uint64_t> mReleasePluginEvent;
|
||
|
};
|
||
|
|
||
|
diff --git a/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.cpp b/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.cpp
|
||
|
--- a/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.cpp
|
||
|
+++ b/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.cpp
|
||
|
@@ -538,11 +538,11 @@
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
webrtc::VideoFrameType ft;
|
||
|
GmpFrameTypeToWebrtcFrameType(aEncodedFrame->FrameType(), &ft);
|
||
|
- uint32_t timestamp = (aEncodedFrame->TimeStamp() * 90ll + 999) / 1000;
|
||
|
+ uint64_t timestamp = (aEncodedFrame->TimeStamp() * 90ll + 999) / 1000;
|
||
|
|
||
|
GMP_LOG_DEBUG("GMP Encoded: %" PRIu64 ", type %d, len %d",
|
||
|
aEncodedFrame->TimeStamp(), aEncodedFrame->BufferType(),
|
||
|
aEncodedFrame->Size());
|
||
|
|
||
|
|