mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
dshow: properly disconnect and remove filters from graph
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
5e77dc2ea7
commit
ff5e1b0b7a
@ -92,11 +92,7 @@ dshow_read_close(AVFormatContext *s)
|
||||
IMediaControl_Stop(ctx->control);
|
||||
IMediaControl_Release(ctx->control);
|
||||
}
|
||||
if (ctx->graph)
|
||||
IGraphBuilder_Release(ctx->graph);
|
||||
|
||||
/* FIXME remove filters from graph */
|
||||
/* FIXME disconnect pins */
|
||||
if (ctx->capture_pin[VideoDevice])
|
||||
libAVPin_Release(ctx->capture_pin[VideoDevice]);
|
||||
if (ctx->capture_pin[AudioDevice])
|
||||
@ -115,6 +111,20 @@ dshow_read_close(AVFormatContext *s)
|
||||
if (ctx->device_filter[AudioDevice])
|
||||
IBaseFilter_Release(ctx->device_filter[AudioDevice]);
|
||||
|
||||
if (ctx->graph) {
|
||||
IEnumFilters *fenum;
|
||||
int r;
|
||||
r = IGraphBuilder_EnumFilters(ctx->graph, &fenum);
|
||||
if (r == S_OK) {
|
||||
IBaseFilter *f;
|
||||
IEnumFilters_Reset(fenum);
|
||||
while (IEnumFilters_Next(fenum, 1, &f, NULL) == S_OK)
|
||||
IGraphBuilder_RemoveFilter(ctx->graph, f);
|
||||
IEnumFilters_Release(fenum);
|
||||
}
|
||||
IGraphBuilder_Release(ctx->graph);
|
||||
}
|
||||
|
||||
if (ctx->device_name[0])
|
||||
av_free(ctx->device_name[0]);
|
||||
if (ctx->device_name[1])
|
||||
|
Loading…
Reference in New Issue
Block a user