mirror of
https://github.com/moonlight-stream/moonlight-qt.git
synced 2026-06-17 22:23:31 +00:00
av_buffer_create() copies the pointer not the data
This commit is contained in:
@@ -251,7 +251,7 @@ ssize_t EglImageFactory::exportDRMImages(AVFrame* frame, EGLDisplay dpy, EGLImag
|
|||||||
|
|
||||||
// Add a buffer reference to the frame to automatically destroy the EGLImages
|
// Add a buffer reference to the frame to automatically destroy the EGLImages
|
||||||
// when the frame is no longer referenced.
|
// when the frame is no longer referenced.
|
||||||
frame->opaque_ref = av_buffer_create((uint8_t*)imgCtx, sizeof(imgCtx),
|
frame->opaque_ref = av_buffer_create((uint8_t*)imgCtx, sizeof(*imgCtx),
|
||||||
freeEglImageContextBuffer,
|
freeEglImageContextBuffer,
|
||||||
frame->opaque_ref, // Chain any existing buffer
|
frame->opaque_ref, // Chain any existing buffer
|
||||||
AV_BUFFER_FLAG_READONLY);
|
AV_BUFFER_FLAG_READONLY);
|
||||||
@@ -477,7 +477,7 @@ ssize_t EglImageFactory::exportVAImages(AVFrame *frame, uint32_t exportFlags, EG
|
|||||||
|
|
||||||
// Add a buffer reference to the frame to automatically destroy the EGLImages
|
// Add a buffer reference to the frame to automatically destroy the EGLImages
|
||||||
// when the frame is no longer referenced.
|
// when the frame is no longer referenced.
|
||||||
frame->opaque_ref = av_buffer_create((uint8_t*)imgCtx, sizeof(imgCtx),
|
frame->opaque_ref = av_buffer_create((uint8_t*)imgCtx, sizeof(*imgCtx),
|
||||||
freeEglImageContextBuffer,
|
freeEglImageContextBuffer,
|
||||||
frame->opaque_ref, // Chain any existing buffer
|
frame->opaque_ref, // Chain any existing buffer
|
||||||
AV_BUFFER_FLAG_READONLY);
|
AV_BUFFER_FLAG_READONLY);
|
||||||
|
|||||||
@@ -1221,7 +1221,8 @@ bool VAAPIRenderer::mapDrmPrimeFrame(AVFrame* frame, AVDRMFrameDescriptor* drmDe
|
|||||||
|
|
||||||
// Add a buffer reference to the frame to automatically close the
|
// Add a buffer reference to the frame to automatically close the
|
||||||
// mapped FDs when the frame is no longer referenced.
|
// mapped FDs when the frame is no longer referenced.
|
||||||
frame->opaque_ref = av_buffer_create((uint8_t*)drmDescriptor, sizeof(*drmDescriptor),
|
frame->opaque_ref = av_buffer_create((uint8_t*)(new AVDRMFrameDescriptor(*drmDescriptor)),
|
||||||
|
sizeof(*drmDescriptor),
|
||||||
freeDrmDescriptorBuffer,
|
freeDrmDescriptorBuffer,
|
||||||
frame->opaque_ref, // Chain any existing buffer
|
frame->opaque_ref, // Chain any existing buffer
|
||||||
AV_BUFFER_FLAG_READONLY);
|
AV_BUFFER_FLAG_READONLY);
|
||||||
@@ -1236,6 +1237,7 @@ void VAAPIRenderer::freeDrmDescriptorBuffer(void* opaque, uint8_t* data)
|
|||||||
for (int i = 0; i < drmDescriptor->nb_objects; i++) {
|
for (int i = 0; i < drmDescriptor->nb_objects; i++) {
|
||||||
close(drmDescriptor->objects[i].fd);
|
close(drmDescriptor->objects[i].fd);
|
||||||
}
|
}
|
||||||
|
delete drmDescriptor;
|
||||||
|
|
||||||
// Free any chained buffers
|
// Free any chained buffers
|
||||||
av_buffer_unref((AVBufferRef**)&opaque);
|
av_buffer_unref((AVBufferRef**)&opaque);
|
||||||
|
|||||||
Reference in New Issue
Block a user