mirror of
https://github.com/zergon321/reisen.git
synced 2025-09-26 20:01:14 +08:00
Merge pull request #20 from TurbineOne/embrace-the-unknown
Handle the unknown
This commit is contained in:
Binary file not shown.
21
media.go
21
media.go
@@ -7,6 +7,7 @@ package reisen
|
||||
// #include <libswscale/swscale.h>
|
||||
// #include <libavcodec/bsf.h>
|
||||
import "C"
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
@@ -120,9 +121,14 @@ func (media *Media) findStreams() error {
|
||||
codec := C.avcodec_find_decoder(codecParams.codec_id)
|
||||
|
||||
if codec == nil {
|
||||
return fmt.Errorf(
|
||||
"couldn't find codec by ID = %d",
|
||||
codecParams.codec_id)
|
||||
unknownStream := new(UnknownStream)
|
||||
unknownStream.inner = innerStream
|
||||
unknownStream.codecParams = codecParams
|
||||
unknownStream.media = media
|
||||
|
||||
streams = append(streams, unknownStream)
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
switch codecParams.codec_type {
|
||||
@@ -145,7 +151,13 @@ func (media *Media) findStreams() error {
|
||||
streams = append(streams, audioStream)
|
||||
|
||||
default:
|
||||
return fmt.Errorf("unknown stream type")
|
||||
unknownStream := new(UnknownStream)
|
||||
unknownStream.inner = innerStream
|
||||
unknownStream.codecParams = codecParams
|
||||
unknownStream.codec = codec
|
||||
unknownStream.media = media
|
||||
|
||||
streams = append(streams, unknownStream)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -256,7 +268,6 @@ func NewMedia(filename string) (*Media, error) {
|
||||
|
||||
C.free(unsafe.Pointer(fname))
|
||||
err := media.findStreams()
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
25
unknown.go
Executable file
25
unknown.go
Executable file
@@ -0,0 +1,25 @@
|
||||
package reisen
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// UnknownStream is a stream containing frames consisting of unknown data.
|
||||
type UnknownStream struct {
|
||||
baseStream
|
||||
}
|
||||
|
||||
// Open is just a stub.
|
||||
func (unknown *UnknownStream) Open() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// ReadFrame is just a stub.
|
||||
func (unknown *UnknownStream) ReadFrame() (Frame, bool, error) {
|
||||
return nil, false, fmt.Errorf("UnknownStream.ReadFrame() not implemented")
|
||||
}
|
||||
|
||||
// Close is just a stub.
|
||||
func (unknown *UnknownStream) Close() error {
|
||||
return nil
|
||||
}
|
Reference in New Issue
Block a user