From 51e52062e111ecfa9c68b7dab5fdfa64097c868a Mon Sep 17 00:00:00 2001 From: sauwming Date: Fri, 29 Mar 2024 10:05:02 +0800 Subject: [PATCH] Fixed Metal renderer memory leak (#3909) --- pjmedia/src/pjmedia-codec/vid_toolbox.m | 23 +++++++++++++---------- pjmedia/src/pjmedia-videodev/metal_dev.m | 7 +++++++ 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/pjmedia/src/pjmedia-codec/vid_toolbox.m b/pjmedia/src/pjmedia-codec/vid_toolbox.m index f12050f43d..01b1eceed6 100644 --- a/pjmedia/src/pjmedia-codec/vid_toolbox.m +++ b/pjmedia/src/pjmedia-codec/vid_toolbox.m @@ -554,17 +554,20 @@ static OSStatus create_encoder(vtool_codec_data *vtool_data) ret = VTSessionCopySupportedPropertyDictionary(vtool_data->enc, &supported_prop); - if (ret == noErr && - CFDictionaryContainsKey(supported_prop, + if (ret == noErr) { + if (CFDictionaryContainsKey(supported_prop, kVTCompressionPropertyKey_MaxH264SliceBytes)) - { - /* kVTCompressionPropertyKey_MaxH264SliceBytes is not yet supported - * by Apple. We leave it here for possible future enhancements. - SET_PROPERTY(vtool_data->enc, - kVTCompressionPropertyKey_MaxH264SliceBytes, - // param->enc_mtu - NAL_HEADER_ADD_0X30BYTES - (__bridge CFTypeRef)@(param->enc_mtu - 50)); - */ + { + /* kVTCompressionPropertyKey_MaxH264SliceBytes is not yet supported + * by Apple. We leave it here for possible future enhancements. + SET_PROPERTY(vtool_data->enc, + kVTCompressionPropertyKey_MaxH264SliceBytes, + // param->enc_mtu - NAL_HEADER_ADD_0X30BYTES + (__bridge CFTypeRef)@(param->enc_mtu - 50)); + */ + } + + CFRelease(supported_prop); } VTCompressionSessionPrepareToEncodeFrames(vtool_data->enc); diff --git a/pjmedia/src/pjmedia-videodev/metal_dev.m b/pjmedia/src/pjmedia-videodev/metal_dev.m index 3118687739..f12bfa8d99 100644 --- a/pjmedia/src/pjmedia-videodev/metal_dev.m +++ b/pjmedia/src/pjmedia-videodev/metal_dev.m @@ -428,6 +428,11 @@ - (nonnull instancetype)initWithMetalKitView:(nonnull MTKView *)mtkView textureCoordBuffer = [device newBufferWithBytes:textureCoordinates length:sizeof(textureCoordinates) options:MTLResourceStorageModeShared]; + + [pQuadPipelineStateDescriptor release]; + [fragmentProgram release]; + [vertexProgram release]; + [shaderLibrary release]; } return self; @@ -509,6 +514,8 @@ - (void)update_image [commandBuffer presentDrawable:drawable]; [commandBuffer commit]; + [texture release]; + stream->is_rendering = PJ_FALSE; }