前言

image.png
image.png
image.png

代码分析

h:\webrtc-20210315\webrtc-20210315\webrtc\webrtc-checkout\src\modules\video_capture\windows\video_capture_ds.cc

VideoCaptureDS::Init

  1. int32_t VideoCaptureDS::Init(const char* deviceUniqueIdUTF8) {
  2. ****
  3. // Create the sink filte used for receiving Captured frames.
  4. sink_filter_ = new ComRefCount<CaptureSinkFilter>(this);
  5. hr = _graphBuilder->AddFilter(sink_filter_, SINK_FILTER_NAME);
  6. if (FAILED(hr)) {
  7. RTC_LOG(LS_INFO) << "Failed to add the send filter to the graph.";
  8. return -1;
  9. }
  10. ***
  11. ***
  12. }

—》 sinkfilter = new ComRefCount(this);

CaptureSinkFilter::CaptureSinkFilter

  1. CaptureSinkFilter::CaptureSinkFilter(VideoCaptureImpl* capture_observer)
  2. : input_pin_(new ComRefCount<CaptureInputPin>(this)),
  3. capture_observer_(capture_observer) {}

CaptureSinkFilter获取数据后,就可以调用captureobserver的函数传递了。
—》

  1. CaptureInputPin::CaptureInputPin(CaptureSinkFilter* filter) {
  2. capture_checker_.Detach();
  3. // No reference held to avoid circular references.
  4. info_.pFilter = filter;
  5. info_.dir = PINDIR_INPUT;
  6. }