568{
570 IPin *source_out =
NULL, *renderer_in;
575
576 TRACE(
"graph %p, category %s, majortype %s, source %p, intermediate %p, sink %p.\n",
578
580 {
581 FIXME(
"Need a capture graph\n");
583 }
584
586 {
587 FIXME(
"Tee/Sink-to-Sink filter not supported\n");
589 }
590
592 {
594 IPin_Release(pin);
595 }
597 {
599 IBaseFilter_Release(
filter);
600 }
601 else
602 {
603 WARN(
"Source object does not expose IBaseFilter or IPin.\n");
605 }
609
610 if (!pfRenderer)
611 {
613 hr = IPin_EnumMediaTypes(source_out, &enumMedia);
616 hr = IEnumMediaTypes_Next(enumMedia, 1, &mediaType,
NULL);
618 if (
IsEqualIID(&mediaType->majortype, &MEDIATYPE_Video)) {
621 }
else if (
IsEqualIID(&mediaType->majortype, &MEDIATYPE_Audio)) {
624 } else {
625 FIXME(
"cannot automatically load renderer for majortype %s\n",
debugstr_guid(&mediaType->majortype));
627 }
629 rendererNeedsRelease =
TRUE;
630 hr = IGraphBuilder_AddFilter(
This->mygraph, pfRenderer,
NULL);
631 }
633 }
634 IEnumMediaTypes_Release(enumMedia);
635 }
637 if (rendererNeedsRelease)
638 IBaseFilter_Release(pfRenderer);
639 IPin_Release(source_out);
641 }
642 }
643
646 {
647 if (rendererNeedsRelease)
648 IBaseFilter_Release(pfRenderer);
649 IPin_Release(source_out);
651 }
652
653 if (!pfCompressor)
654 hr = IGraphBuilder_Connect(
This->mygraph, source_out, renderer_in);
655 else
656 {
657 IPin *compressor_in, *compressor_out;
658
659 hr = ICaptureGraphBuilder2_FindPin(iface, (
IUnknown*)pfCompressor,
662 {
663 hr = IGraphBuilder_Connect(
This->mygraph, source_out, compressor_in);
664 IPin_Release(compressor_in);
665 }
666
668 {
669 hr = ICaptureGraphBuilder2_FindPin(iface, (
IUnknown*)pfCompressor,
672 {
673 hr = IGraphBuilder_Connect(
This->mygraph, compressor_out, renderer_in);
674 IPin_Release(compressor_out);
675 }
676 }
677 }
678
679 IPin_Release(source_out);
680 IPin_Release(renderer_in);
681 if (rendererNeedsRelease)
682 IBaseFilter_Release(pfRenderer);
684 return return_hr;
686}
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
void WINAPI DeleteMediaType(AM_MEDIA_TYPE *pMediaType)