[FFmpeg-devel] [PATCH v5 10/13] avdevice/dshow: add media type info to get_device_list
Andreas Rheinhardt
andreas.rheinhardt at outlook.com
Mon Dec 20 03:04:18 EET 2021
Diederick Niehorster:
> The list returned by get_device_list now contains info about what media
> type(s), if any, can be provided by each device.
>
> Signed-off-by: Diederick Niehorster <dcnieho at gmail.com>
> ---
> libavdevice/dshow.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/libavdevice/dshow.c b/libavdevice/dshow.c
> index f25537db5c..fa3a06c077 100644
> --- a/libavdevice/dshow.c
> +++ b/libavdevice/dshow.c
> @@ -377,6 +377,11 @@ dshow_cycle_devices(AVFormatContext *avctx, ICreateDevEnum *devenum,
> if (!device->device_name || !device->device_description)
> goto fail1;
>
> + device->nb_media_types = nb_media_types;
> + device->media_types = media_types;
> + nb_media_types = 0;
> + media_types = NULL;
> +
If this array is intended to be given to the caller, my "put in on the
stack" suggestion from #8 is no longer feasible.
> // store to device_list output
> if (av_reallocp_array(&(*device_list)->devices,
> (*device_list)->nb_devices + 1,
> @@ -412,6 +417,8 @@ dshow_cycle_devices(AVFormatContext *avctx, ICreateDevEnum *devenum,
> av_freep(&device->device_name);
> if (device->device_name)
> av_freep(&device->device_description);
> + if (device->media_types)
> + av_freep(&device->media_types);
You are duplicating freeing code here: You have code to free media_types
both before it was put into device and after; you can avoid the latter
by only attaching media_types to device when nothing else can fail.
Btw: All these checks before av_freep() here are unnecessary.
> av_free(device);
> }
> if (olestr && co_malloc)
>
More information about the ffmpeg-devel
mailing list