What is the difference between the
AVCaptureVideoDataOutput and the
The class that allows us to access the frames in a pixel buffer.
We are using this protocol to declare the
ViewController which contains the
AVCaptureVideoDataOutput as a delegate. This delegate is notified to receive new frames.
AVCaptureVideoDataOutputSampleBufferDelegate are two different things. We use the former to write frames into the buffer. And the latter is used to notify the detector part once a new frame is available
The former is a class, the latter is a
Protocol. In the
ViewController class, we define the
AVCaptureVideoDataOutput to write frames into a pixel buffer. Whenever there is a new frame, we want the detector to run detection on it. But how does the detector know that a new frame is available? This is where the
AVCaptureVideoDataOutputSampleBufferDelegate comes in.
We make the ViewController conform to the
AVCaptureVideoDataOutputSampleBufferDelegate protocol and we also assign the
ViewController itself its own delegate (line 103). The protocol allows the
ViewController to implement a method that is called whenever there is a new frame in the pixel buffer. We can then use this to run the detector on the frame.
This is how Apple requires us to feed frames to CoreML models. For more information regarding protocols and delegation in Swift check out the Swift documentation: https://docs.swift.org/swift-book/LanguageGuide/Protocols.html