>From c64bccd79a63ec3e7a3fdeeaa21656730695dd2b Mon Sep 17 00:00:00 2001 From: Test <[email protected]> Date: Thu, 28 Nov 2024 16:09:28 -0800 Subject: [PATCH 1/3] Fix SEI buffer memory leaks
---
source/encoder/encoder.cpp | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/source/encoder/encoder.cpp b/source/encoder/encoder.cpp
index 2e65cb1a9..e3285bbae 100644
--- a/source/encoder/encoder.cpp
+++ b/source/encoder/encoder.cpp
@@ -1082,6 +1082,16 @@ void Encoder::copyUserSEIMessages(Frame *frame,
const x265_picture* pic_in)
}
int numPayloads = pic_in->userSEI.numPayloads + toneMapPayload +
userPayload;
+
+ // TODO: we may reuse buffer if become smaller than exist buffer
+ if (frame->m_userSEI.payloads && numPayloads !=
frame->m_userSEI.numPayloads)
+ {
+ for (int i = 0; i < frame->m_userSEI.numPayloads; i++)
+ delete[] frame->m_userSEI.payloads[i].payload;
+ delete[] frame->m_userSEI.payloads;
+ frame->m_userSEI.payloads = NULL;
+ }
+
frame->m_userSEI.numPayloads = numPayloads;
if (frame->m_userSEI.numPayloads)
@@ -1102,6 +1112,12 @@ void Encoder::copyUserSEIMessages(Frame *frame,
const x265_picture* pic_in)
else
input = pic_in->userSEI.payloads[i];
+ // TODO: condition may improve, because buffer size may change
from big to small, but never back to original allocate size
+ if (frame->m_userSEI.payloads[i].payload &&
frame->m_userSEI.payloads[i].payloadSize < input.payloadSize)
+ {
+ delete[] frame->m_userSEI.payloads[i].payload;
+ frame->m_userSEI.payloads[i].payload = NULL;
+ }
if (!frame->m_userSEI.payloads[i].payload)
frame->m_userSEI.payloads[i].payload = new
uint8_t[input.payloadSize];
memcpy(frame->m_userSEI.payloads[i].payload, input.payload,
input.payloadSize);
--
2.35.1.windows.2
0001-Fix-SEI-buffer-memory-leaks.patch
Description: Binary data
_______________________________________________ x265-devel mailing list [email protected] https://mailman.videolan.org/listinfo/x265-devel
