mirror of
https://github.com/pion/mediadevices.git
synced 2024-05-31 14:03:35 +08:00
97046bc6ec
Changes: * [BREAKING CHANGE] NewEncodedReader is renamed to NewEncodedIOReader * NewEncodedReader now returns a non-standard buffer reader to give more meta data such as sample count
62 lines
1.2 KiB
Go
62 lines
1.2 KiB
Go
package mediadevices
|
|
|
|
type EncodedBuffer struct {
|
|
Data []byte
|
|
Samples uint32
|
|
}
|
|
|
|
type EncodedReadCloser interface {
|
|
Read() (EncodedBuffer, func(), error)
|
|
Close() error
|
|
}
|
|
|
|
type encodedReadCloserImpl struct {
|
|
readFn func() (EncodedBuffer, func(), error)
|
|
closeFn func() error
|
|
}
|
|
|
|
func (r *encodedReadCloserImpl) Read() (EncodedBuffer, func(), error) {
|
|
return r.readFn()
|
|
}
|
|
|
|
func (r *encodedReadCloserImpl) Close() error {
|
|
return r.closeFn()
|
|
}
|
|
|
|
type encodedIOReadCloserImpl struct {
|
|
readFn func([]byte) (int, error)
|
|
closeFn func() error
|
|
}
|
|
|
|
func newEncodedIOReadCloserImpl(reader EncodedReadCloser) *encodedIOReadCloserImpl {
|
|
var encoded EncodedBuffer
|
|
release := func() {}
|
|
return &encodedIOReadCloserImpl{
|
|
readFn: func(b []byte) (int, error) {
|
|
var err error
|
|
|
|
if len(encoded.Data) == 0 {
|
|
release()
|
|
encoded, release, err = reader.Read()
|
|
if err != nil {
|
|
reader.Close()
|
|
return 0, err
|
|
}
|
|
}
|
|
|
|
n := copy(b, encoded.Data)
|
|
encoded.Data = encoded.Data[n:]
|
|
return n, nil
|
|
},
|
|
closeFn: reader.Close,
|
|
}
|
|
}
|
|
|
|
func (r *encodedIOReadCloserImpl) Read(b []byte) (int, error) {
|
|
return r.readFn(b)
|
|
}
|
|
|
|
func (r *encodedIOReadCloserImpl) Close() error {
|
|
return r.closeFn()
|
|
}
|