Refactoring #3
@@ -0,0 +1,40 @@
|
||||
package playback
|
||||
|
||||
import "context"
|
||||
|
||||
// VideoFrame contains metadata and borrowed source payload.
|
||||
//
|
||||
// Payload is valid only until the next VideoReader.ReadVideo call or until the
|
||||
// reader is closed. Consumers must finish reading Payload before returning
|
||||
// control to the worker
|
||||
type VideoFrame struct {
|
||||
Index uint64
|
||||
Width uint32
|
||||
Height uint32
|
||||
Stride uint32
|
||||
Size uint32
|
||||
Invalid bool
|
||||
Payload []byte
|
||||
}
|
||||
|
||||
// VideoReader reads frames from a video source.
|
||||
//
|
||||
// ReadVideo must not be called again until the previous frame's payload has
|
||||
// been consumed.
|
||||
type VideoReader interface {
|
||||
ReadVideo(context.Context) (VideoFrame, error)
|
||||
Close() error
|
||||
}
|
||||
|
||||
// VideoReaderFactory opens a reader for the configured video feed.
|
||||
type VideoReaderFactory interface {
|
||||
OpenVideo(context.Context, FeedConfig) (VideoReader, error)
|
||||
}
|
||||
|
||||
// VideoSink consumes a borrowed video frame.
|
||||
//
|
||||
// ConsumeVideo must finish using frame.Payload before returning and must never
|
||||
// retain it for asynchronous use.
|
||||
type VideoSink interface {
|
||||
ConsumeVideo(context.Context, VideoFrame) error
|
||||
}
|
||||
Reference in New Issue
Block a user