Просмотр исходного кода

obs-ffmpeg: Fix leaks in AMF with unique_ptr

jpark37 3 лет назад
Родитель
Сommit
690ba952de
1 измененных файлов с 14 добавлено и 14 удалено
  1. 14 14
      plugins/obs-ffmpeg/texture-amf.cpp

+ 14 - 14
plugins/obs-ffmpeg/texture-amf.cpp

@@ -1231,15 +1231,15 @@ static void *amf_avc_create_texencode(obs_data_t *settings,
 try {
 	check_texture_encode_capability(encoder, false);
 
-	amf_texencode *enc = new amf_texencode;
+	std::unique_ptr<amf_texencode> enc = std::make_unique<amf_texencode>();
 	enc->encoder = encoder;
 	enc->encoder_str = "texture-amf-h264";
 
-	if (!amf_init_d3d11(enc))
+	if (!amf_init_d3d11(enc.get()))
 		throw "Failed to create D3D11";
 
-	amf_avc_create_internal(enc, settings);
-	return enc;
+	amf_avc_create_internal(enc.get(), settings);
+	return enc.release();
 
 } catch (const amf_error &err) {
 	blog(LOG_ERROR, "[texture-amf-h264] %s: %s: %ls", __FUNCTION__, err.str,
@@ -1254,12 +1254,12 @@ try {
 static void *amf_avc_create_fallback(obs_data_t *settings,
 				     obs_encoder_t *encoder)
 try {
-	amf_fallback *enc = new amf_fallback;
+	std::unique_ptr<amf_fallback> enc = std::make_unique<amf_fallback>();
 	enc->encoder = encoder;
 	enc->encoder_str = "fallback-amf-h264";
 
-	amf_avc_create_internal(enc, settings);
-	return enc;
+	amf_avc_create_internal(enc.get(), settings);
+	return enc.release();
 
 } catch (const amf_error &err) {
 	blog(LOG_ERROR, "[texture-amf-h264] %s: %s: %ls", __FUNCTION__, err.str,
@@ -1541,15 +1541,15 @@ static void *amf_hevc_create_texencode(obs_data_t *settings,
 try {
 	check_texture_encode_capability(encoder, true);
 
-	amf_texencode *enc = new amf_texencode;
+	std::unique_ptr<amf_texencode> enc = std::make_unique<amf_texencode>();
 	enc->encoder = encoder;
 	enc->encoder_str = "texture-amf-h265";
 
-	if (!amf_init_d3d11(enc))
+	if (!amf_init_d3d11(enc.get()))
 		throw "Failed to create D3D11";
 
-	amf_hevc_create_internal(enc, settings);
-	return enc;
+	amf_hevc_create_internal(enc.get(), settings);
+	return enc.release();
 
 } catch (const amf_error &err) {
 	blog(LOG_ERROR, "[texture-amf-h265] %s: %s: %ls", __FUNCTION__, err.str,
@@ -1564,12 +1564,12 @@ try {
 static void *amf_hevc_create_fallback(obs_data_t *settings,
 				      obs_encoder_t *encoder)
 try {
-	amf_fallback *enc = new amf_fallback;
+	std::unique_ptr<amf_fallback> enc = std::make_unique<amf_fallback>();
 	enc->encoder = encoder;
 	enc->encoder_str = "fallback-amf-h265";
 
-	amf_hevc_create_internal(enc, settings);
-	return enc;
+	amf_hevc_create_internal(enc.get(), settings);
+	return enc.release();
 
 } catch (const amf_error &err) {
 	blog(LOG_ERROR, "[texture-amf-h265] %s: %s: %ls", __FUNCTION__, err.str,