dshow: remove filters from graph before releasing them
Signed-off-by: Stefano Sabatini <stefasab@gmail.com>
This commit is contained in:
parent
a1644f6287
commit
6613db9736
@ -112,6 +112,22 @@ dshow_read_close(AVFormatContext *s)
|
|||||||
IMediaControl_Release(ctx->control);
|
IMediaControl_Release(ctx->control);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
|
if (IGraphBuilder_RemoveFilter(ctx->graph, f) == S_OK)
|
||||||
|
IEnumFilters_Reset(fenum); /* When a filter is removed,
|
||||||
|
* the list must be reset. */
|
||||||
|
IEnumFilters_Release(fenum);
|
||||||
|
}
|
||||||
|
IGraphBuilder_Release(ctx->graph);
|
||||||
|
}
|
||||||
|
|
||||||
if (ctx->capture_pin[VideoDevice])
|
if (ctx->capture_pin[VideoDevice])
|
||||||
libAVPin_Release(ctx->capture_pin[VideoDevice]);
|
libAVPin_Release(ctx->capture_pin[VideoDevice]);
|
||||||
if (ctx->capture_pin[AudioDevice])
|
if (ctx->capture_pin[AudioDevice])
|
||||||
@ -130,22 +146,6 @@ dshow_read_close(AVFormatContext *s)
|
|||||||
if (ctx->device_filter[AudioDevice])
|
if (ctx->device_filter[AudioDevice])
|
||||||
IBaseFilter_Release(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)
|
|
||||||
if (IGraphBuilder_RemoveFilter(ctx->graph, f) == S_OK)
|
|
||||||
IEnumFilters_Reset(fenum); /* When a filter is removed,
|
|
||||||
* the list must be reset. */
|
|
||||||
IEnumFilters_Release(fenum);
|
|
||||||
}
|
|
||||||
IGraphBuilder_Release(ctx->graph);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ctx->device_name[0])
|
if (ctx->device_name[0])
|
||||||
av_free(ctx->device_name[0]);
|
av_free(ctx->device_name[0]);
|
||||||
if (ctx->device_name[1])
|
if (ctx->device_name[1])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user