summaryrefslogtreecommitdiff
path: root/libavdevice
diff options
context:
space:
mode:
authorOliver Collyer <ovcollyer@mac.com>2019-01-03 07:41:12 +0000
committerJames Almer <jamrial@gmail.com>2019-01-03 13:15:45 -0300
commitbf96937a961baeef75236ad0b986a1bb17906143 (patch)
tree1599b57f81d7e6adb9a225f0a2c72cfccfae109f /libavdevice
parent5402c1886b97a0c46e843b5ae0c08de74d2e6091 (diff)
avdevice/dshow: Fixed some minor memory leaks
Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavdevice')
-rw-r--r--libavdevice/dshow.c12
-rw-r--r--libavdevice/dshow_pin.c14
2 files changed, 22 insertions, 4 deletions
diff --git a/libavdevice/dshow.c b/libavdevice/dshow.c
index 25481580af..d7f5bd7069 100644
--- a/libavdevice/dshow.c
+++ b/libavdevice/dshow.c
@@ -278,12 +278,12 @@ dshow_cycle_devices(AVFormatContext *avctx, ICreateDevEnum *devenum,
goto fail1;
}
*device_unique_name = unique_name;
+ unique_name = NULL;
// success, loop will end now
}
} else {
av_log(avctx, AV_LOG_INFO, " \"%s\"\n", friendly_name);
av_log(avctx, AV_LOG_INFO, " Alternative name \"%s\"\n", unique_name);
- av_free(unique_name);
}
fail1:
@@ -291,7 +291,8 @@ fail1:
IMalloc_Free(co_malloc, olestr);
if (bind_ctx)
IBindCtx_Release(bind_ctx);
- av_free(friendly_name);
+ av_freep(&friendly_name);
+ av_freep(&unique_name);
if (bag)
IPropertyBag_Release(bag);
IMoniker_Release(m);
@@ -941,6 +942,8 @@ dshow_add_device(AVFormatContext *avctx,
AVStream *st;
int ret = AVERROR(EIO);
+ type.pbFormat = NULL;
+
st = avformat_new_stream(avctx, NULL);
if (!st) {
ret = AVERROR(ENOMEM);
@@ -989,7 +992,8 @@ dshow_add_device(AVFormatContext *avctx,
if (par->codec_id == AV_CODEC_ID_NONE) {
av_log(avctx, AV_LOG_ERROR, "Unknown compression type. "
"Please report type 0x%X.\n", (int) bih->biCompression);
- return AVERROR_PATCHWELCOME;
+ ret = AVERROR_PATCHWELCOME;
+ goto error;
}
par->bits_per_coded_sample = bih->biBitCount;
} else {
@@ -1030,6 +1034,8 @@ dshow_add_device(AVFormatContext *avctx,
ret = 0;
error:
+ if (type.pbFormat)
+ CoTaskMemFree(type.pbFormat);
return ret;
}
diff --git a/libavdevice/dshow_pin.c b/libavdevice/dshow_pin.c
index 664246da92..53b1c9150d 100644
--- a/libavdevice/dshow_pin.c
+++ b/libavdevice/dshow_pin.c
@@ -249,8 +249,20 @@ libAVPin_Setup(libAVPin *this, libAVFilter *filter)
return 1;
}
+
+static void
+libAVPin_Free(libAVPin *this)
+{
+ if (!this)
+ return;
+ av_freep(&this->imemvtbl);
+ if (this->type.pbFormat) {
+ CoTaskMemFree(this->type.pbFormat);
+ this->type.pbFormat = NULL;
+ }
+}
DECLARE_CREATE(libAVPin, libAVPin_Setup(this, filter), libAVFilter *filter)
-DECLARE_DESTROY(libAVPin, nothing)
+DECLARE_DESTROY(libAVPin, libAVPin_Free)
/*****************************************************************************
* libAVMemInputPin