mirror of
https://github.com/pion/mediadevices.git
synced 2025-10-27 18:40:51 +08:00
Rename Spec to Setting
This commit is contained in:
@@ -46,7 +46,7 @@ func (m *mediaDevices) videoSelect(constraints VideoTrackConstraints) (tracker,
|
|||||||
drivers := driver.Manager.Query(videoFilterFn)
|
drivers := driver.Manager.Query(videoFilterFn)
|
||||||
|
|
||||||
var bestDriver driver.VideoDriver
|
var bestDriver driver.VideoDriver
|
||||||
var bestSpec driver.VideoSpec
|
var bestSetting driver.VideoSetting
|
||||||
minFitnessDist := math.Inf(1)
|
minFitnessDist := math.Inf(1)
|
||||||
|
|
||||||
for _, d := range drivers {
|
for _, d := range drivers {
|
||||||
@@ -55,19 +55,19 @@ func (m *mediaDevices) videoSelect(constraints VideoTrackConstraints) (tracker,
|
|||||||
if wasClosed {
|
if wasClosed {
|
||||||
err := d.Open()
|
err := d.Open()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// Skip this driver if we failed to open because we can't get the specs
|
// Skip this driver if we failed to open because we can't get the settings
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
vd := d.(driver.VideoDriver)
|
vd := d.(driver.VideoDriver)
|
||||||
for _, spec := range vd.Specs() {
|
for _, setting := range vd.Settings() {
|
||||||
fitnessDist := constraints.fitnessDistance(spec)
|
fitnessDist := constraints.fitnessDistance(setting)
|
||||||
|
|
||||||
if fitnessDist < minFitnessDist {
|
if fitnessDist < minFitnessDist {
|
||||||
minFitnessDist = fitnessDist
|
minFitnessDist = fitnessDist
|
||||||
bestDriver = vd
|
bestDriver = vd
|
||||||
bestSpec = spec
|
bestSetting = setting
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,5 +87,5 @@ func (m *mediaDevices) videoSelect(constraints VideoTrackConstraints) (tracker,
|
|||||||
return nil, fmt.Errorf("failed in opening the best video driver")
|
return nil, fmt.Errorf("failed in opening the best video driver")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return newVideoTrack(m.pc, bestDriver, bestSpec, constraints.Codec)
|
return newVideoTrack(m.pc, bestDriver, bestSetting, constraints.Codec)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ type VideoTrackConstraints struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// fitnessDistance is an implementation for https://w3c.github.io/mediacapture-main/#dfn-fitness-distance
|
// fitnessDistance is an implementation for https://w3c.github.io/mediacapture-main/#dfn-fitness-distance
|
||||||
func (c *VideoTrackConstraints) fitnessDistance(s driver.VideoSpec) float64 {
|
func (c *VideoTrackConstraints) fitnessDistance(s driver.VideoSetting) float64 {
|
||||||
var dist float64
|
var dist float64
|
||||||
|
|
||||||
if s.Width != c.Width {
|
if s.Width != c.Width {
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ type camera struct {
|
|||||||
cam *webcam.Webcam
|
cam *webcam.Webcam
|
||||||
formats map[webcam.PixelFormat]frame.Format
|
formats map[webcam.PixelFormat]frame.Format
|
||||||
reversedFormats map[frame.Format]webcam.PixelFormat
|
reversedFormats map[frame.Format]webcam.PixelFormat
|
||||||
specs []VideoSpec
|
settings []VideoSetting
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ VideoAdapter = &camera{}
|
var _ VideoAdapter = &camera{}
|
||||||
@@ -53,10 +53,10 @@ func (c *camera) Open() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
specs := make([]VideoSpec, 0)
|
settings := make([]VideoSetting, 0)
|
||||||
for format := range cam.GetSupportedFormats() {
|
for format := range cam.GetSupportedFormats() {
|
||||||
for _, frameSize := range cam.GetSupportedFrameSizes(format) {
|
for _, frameSize := range cam.GetSupportedFrameSizes(format) {
|
||||||
specs = append(specs, VideoSpec{
|
settings = append(settings, VideoSetting{
|
||||||
Width: int(frameSize.MaxWidth),
|
Width: int(frameSize.MaxWidth),
|
||||||
Height: int(frameSize.MaxHeight),
|
Height: int(frameSize.MaxHeight),
|
||||||
FrameFormat: c.formats[format],
|
FrameFormat: c.formats[format],
|
||||||
@@ -65,12 +65,12 @@ func (c *camera) Open() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
c.cam = cam
|
c.cam = cam
|
||||||
c.specs = specs
|
c.settings = settings
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *camera) Close() error {
|
func (c *camera) Close() error {
|
||||||
c.specs = nil
|
c.settings = nil
|
||||||
if c.cam == nil {
|
if c.cam == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -78,9 +78,9 @@ func (c *camera) Close() error {
|
|||||||
return c.cam.StopStreaming()
|
return c.cam.StopStreaming()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *camera) Start(spec VideoSpec, cb DataCb) error {
|
func (c *camera) Start(setting VideoSetting, cb DataCb) error {
|
||||||
pf := c.reversedFormats[spec.FrameFormat]
|
pf := c.reversedFormats[setting.FrameFormat]
|
||||||
_, _, _, err := c.cam.SetImageFormat(pf, uint32(spec.Width), uint32(spec.Height))
|
_, _, _, err := c.cam.SetImageFormat(pf, uint32(setting.Width), uint32(setting.Height))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -124,6 +124,6 @@ func (c *camera) Info() Info {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *camera) Specs() []VideoSpec {
|
func (c *camera) Settings() []VideoSetting {
|
||||||
return c.specs
|
return c.settings
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,28 +25,28 @@ type Infoer interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type Info struct {
|
type Info struct {
|
||||||
Kind Kind
|
Kind Kind
|
||||||
DeviceType DeviceType
|
DeviceType DeviceType
|
||||||
}
|
}
|
||||||
|
|
||||||
type VideoCapable interface {
|
type VideoCapable interface {
|
||||||
Start(spec VideoSpec, cb DataCb) error
|
Start(setting VideoSetting, cb DataCb) error
|
||||||
Stop() error
|
Stop() error
|
||||||
Specs() []VideoSpec
|
Settings() []VideoSetting
|
||||||
}
|
}
|
||||||
|
|
||||||
type VideoSpec struct {
|
type VideoSetting struct {
|
||||||
Width, Height int
|
Width, Height int
|
||||||
FrameFormat frame.Format
|
FrameFormat frame.Format
|
||||||
}
|
}
|
||||||
|
|
||||||
type AudioCapable interface {
|
type AudioCapable interface {
|
||||||
Start(spec AudioSpec, cb DataCb) error
|
Start(setting AudioSetting, cb DataCb) error
|
||||||
Stop() error
|
Stop() error
|
||||||
Specs() []AudioSpec
|
Settings() []AudioSetting
|
||||||
}
|
}
|
||||||
|
|
||||||
type AudioSpec struct {
|
type AudioSetting struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type Adapter interface {
|
type Adapter interface {
|
||||||
|
|||||||
16
track.go
16
track.go
@@ -19,14 +19,14 @@ type videoTrack struct {
|
|||||||
t *webrtc.Track
|
t *webrtc.Track
|
||||||
s *sampler
|
s *sampler
|
||||||
d driver.VideoDriver
|
d driver.VideoDriver
|
||||||
spec driver.VideoSpec
|
setting driver.VideoSetting
|
||||||
decoder frame.Decoder
|
decoder frame.Decoder
|
||||||
encoder codec.Encoder
|
encoder codec.Encoder
|
||||||
}
|
}
|
||||||
|
|
||||||
func newVideoTrack(pc *webrtc.PeerConnection, d driver.VideoDriver, spec driver.VideoSpec, codecName Codec) (*videoTrack, error) {
|
func newVideoTrack(pc *webrtc.PeerConnection, d driver.VideoDriver, setting driver.VideoSetting, codecName Codec) (*videoTrack, error) {
|
||||||
var err error
|
var err error
|
||||||
decoder, err := frame.NewDecoder(spec.FrameFormat)
|
decoder, err := frame.NewDecoder(setting.FrameFormat)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -37,8 +37,8 @@ func newVideoTrack(pc *webrtc.PeerConnection, d driver.VideoDriver, spec driver.
|
|||||||
default:
|
default:
|
||||||
payloadType = webrtc.DefaultPayloadTypeH264
|
payloadType = webrtc.DefaultPayloadTypeH264
|
||||||
encoder, err = h264.NewEncoder(h264.Options{
|
encoder, err = h264.NewEncoder(h264.Options{
|
||||||
Width: spec.Width,
|
Width: setting.Width,
|
||||||
Height: spec.Height,
|
Height: setting.Height,
|
||||||
Bitrate: 1000000,
|
Bitrate: 1000000,
|
||||||
MaxFrameRate: 30,
|
MaxFrameRate: 30,
|
||||||
})
|
})
|
||||||
@@ -58,17 +58,17 @@ func newVideoTrack(pc *webrtc.PeerConnection, d driver.VideoDriver, spec driver.
|
|||||||
t: track,
|
t: track,
|
||||||
s: newSampler(track.Codec().ClockRate),
|
s: newSampler(track.Codec().ClockRate),
|
||||||
d: d,
|
d: d,
|
||||||
spec: spec,
|
setting: setting,
|
||||||
decoder: decoder,
|
decoder: decoder,
|
||||||
encoder: encoder,
|
encoder: encoder,
|
||||||
}
|
}
|
||||||
|
|
||||||
go d.Start(spec, vt.dataCb)
|
go d.Start(setting, vt.dataCb)
|
||||||
return &vt, nil
|
return &vt, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (vt *videoTrack) dataCb(b []byte) {
|
func (vt *videoTrack) dataCb(b []byte) {
|
||||||
img, err := vt.decoder.Decode(b, vt.spec.Width, vt.spec.Height)
|
img, err := vt.decoder.Decode(b, vt.setting.Width, vt.setting.Height)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// TODO: probably do some logging here
|
// TODO: probably do some logging here
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user