mirror of
https://github.com/pion/mediadevices.git
synced 2025-09-27 04:46:10 +08:00
78 lines
2.0 KiB
Go
78 lines
2.0 KiB
Go
package prop
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/pion/mediadevices/pkg/frame"
|
|
"slices"
|
|
"strings"
|
|
)
|
|
|
|
// FrameFormatConstraint is an interface to represent frame format constraint.
|
|
type FrameFormatConstraint interface {
|
|
Compare(frame.Format) (float64, bool)
|
|
Value() (frame.Format, bool)
|
|
}
|
|
|
|
// FrameFormat specifies expected frame format.
|
|
// Any value may be selected, but matched value takes priority.
|
|
type FrameFormat frame.Format
|
|
|
|
// Compare implements FrameFormatConstraint.
|
|
func (f FrameFormat) Compare(a frame.Format) (float64, bool) {
|
|
if frame.Format(f) == a {
|
|
return 0.0, true
|
|
}
|
|
return 1.0, true
|
|
}
|
|
|
|
// Value implements FrameFormatConstraint.
|
|
func (f FrameFormat) Value() (frame.Format, bool) { return frame.Format(f), true }
|
|
|
|
// String implements Stringify
|
|
func (f FrameFormat) String() string {
|
|
return fmt.Sprintf("%s (ideal)", frame.Format(f))
|
|
}
|
|
|
|
// FrameFormatExact specifies exact frame format.
|
|
type FrameFormatExact frame.Format
|
|
|
|
// Compare implements FrameFormatConstraint.
|
|
func (f FrameFormatExact) Compare(a frame.Format) (float64, bool) {
|
|
if frame.Format(f) == a {
|
|
return 0.0, true
|
|
}
|
|
return 1.0, false
|
|
}
|
|
|
|
// Value implements FrameFormatConstraint.
|
|
func (f FrameFormatExact) Value() (frame.Format, bool) { return frame.Format(f), true }
|
|
|
|
// String implements Stringify
|
|
func (f FrameFormatExact) String() string {
|
|
return fmt.Sprintf("%s (exact)", frame.Format(f))
|
|
}
|
|
|
|
// FrameFormatOneOf specifies list of expected frame format.
|
|
type FrameFormatOneOf []frame.Format
|
|
|
|
// Compare implements FrameFormatConstraint.
|
|
func (f FrameFormatOneOf) Compare(a frame.Format) (float64, bool) {
|
|
if slices.Contains(f, a) {
|
|
return 0.0, true
|
|
}
|
|
return 1.0, false
|
|
}
|
|
|
|
// Value implements FrameFormatConstraint.
|
|
func (FrameFormatOneOf) Value() (frame.Format, bool) { return "", false }
|
|
|
|
// String implements Stringify
|
|
func (f FrameFormatOneOf) String() string {
|
|
var opts []string
|
|
for _, v := range f {
|
|
opts = append(opts, fmt.Sprint(v))
|
|
}
|
|
|
|
return fmt.Sprintf("%s (one of values)", strings.Join(opts, ","))
|
|
}
|