Skip to content

Commit a4bb3ec

Browse files
committed
Added mapping of streams
1 parent dfce20e commit a4bb3ec

File tree

5 files changed

+59
-14
lines changed

5 files changed

+59
-14
lines changed

cmd/transcode/main.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,9 @@ func main() {
118118
fmt.Fprintln(os.Stderr, err)
119119
os.Exit(-2)
120120
}
121-
fmt.Println(media_map)
121+
122+
// Print the map
123+
media_map.PrintMap(os.Stdout)
122124

123125
// For the output, we can output to a device, a URL, or a file
124126
var out Media

media.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,9 @@ type Map interface {
107107

108108
// Return streams which are mapped for decoding
109109
Streams() []Stream
110+
111+
// Print a summary of the mapping
112+
PrintMap(w io.Writer)
110113
}
111114

112115
// Media is a source or destination of media

pkg/media/map.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package media
22

33
import (
44
"context"
5+
"fmt"
6+
"io"
57

68
// Packages
79
multierror "github.com/hashicorp/go-multierror"
@@ -172,9 +174,35 @@ func (m *decodemap) Demux(ctx context.Context, p Packet, fn DemuxFn) error {
172174
}
173175
}
174176

177+
// PrintMap will print out a summary of the mapping
178+
func (m *decodemap) PrintMap(w io.Writer) {
179+
for id := range m.context {
180+
stream := m.input.streams[id]
181+
fmt.Fprintf(w, "Stream %2d (%s): %s\n", id, toMediaType(stream.Flags()), stream)
182+
}
183+
}
184+
175185
////////////////////////////////////////////////////////////////////////////////
176186
// PRIVATE METHODS
177187

188+
// Return media type (audio, video, subtitle, etc)
189+
func toMediaType(flag MediaFlag) string {
190+
switch {
191+
case flag.Is(MEDIA_FLAG_AUDIO):
192+
return "audio"
193+
case flag.Is(MEDIA_FLAG_VIDEO):
194+
return "video"
195+
case flag.Is(MEDIA_FLAG_SUBTITLE):
196+
return "subtitle"
197+
case flag.Is(MEDIA_FLAG_DATA):
198+
return "data"
199+
case flag.Is(MEDIA_FLAG_ATTACHMENT):
200+
return "attachment"
201+
default:
202+
return "other"
203+
}
204+
}
205+
178206
// Return streams of a given type for input media
179207
func streamsByType(input *input, media_type MediaFlag) map[int]*mapentry {
180208
if input == nil || input.ctx == nil {

pkg/media/stream.go

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,22 @@ func (stream *stream) Flags() MediaFlag {
6565
return flags
6666
}
6767

68-
// TODO: Add codec flags
69-
//if stream.ctx.CodecPar()codec != nil {
70-
// flags |= s.codec.Flags()
71-
//}
68+
// Add codec parameter flags
69+
if stream.ctx != nil {
70+
t := stream.ctx.CodecPar().CodecType()
71+
switch t {
72+
case ffmpeg.AVMEDIA_TYPE_AUDIO:
73+
flags |= MEDIA_FLAG_AUDIO
74+
case ffmpeg.AVMEDIA_TYPE_VIDEO:
75+
flags |= MEDIA_FLAG_VIDEO
76+
case ffmpeg.AVMEDIA_TYPE_SUBTITLE:
77+
flags |= MEDIA_FLAG_SUBTITLE
78+
case ffmpeg.AVMEDIA_TYPE_DATA:
79+
flags |= MEDIA_FLAG_DATA
80+
case ffmpeg.AVMEDIA_TYPE_ATTACHMENT:
81+
flags |= MEDIA_FLAG_ATTACHMENT
82+
}
83+
}
7284

7385
// Remove encoder/decoder flags
7486
flags &^= (MEDIA_FLAG_ENCODER | MEDIA_FLAG_DECODER)

sys/ffmpeg51/avformat.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ const (
4343
// Needs '%d' in filename.
4444
AVFMT_NEEDNUMBER AVFormat = C.AVFMT_NEEDNUMBER
4545
// The muxer/demuxer is experimental and should be used with caution
46-
//AVFMT_EXPERIMENTAL AVFormat = C.AVFMT_EXPERIMENTAL
46+
AVFMT_EXPERIMENTAL AVFormat = C.AVFMT_EXPERIMENTAL
4747
// Show format stream IDs numbers.
4848
AVFMT_SHOWIDS AVFormat = C.AVFMT_SHOW_IDS
4949
// Format wants global header.
@@ -116,14 +116,14 @@ const (
116116
AV_DISPOSITION_CLEAN_EFFECTS AVDisposition = C.AV_DISPOSITION_CLEAN_EFFECTS
117117
AV_DISPOSITION_ATTACHED_PIC AVDisposition = C.AV_DISPOSITION_ATTACHED_PIC
118118
AV_DISPOSITION_TIMED_THUMBNAILS AVDisposition = C.AV_DISPOSITION_TIMED_THUMBNAILS
119-
//AV_DISPOSITION_NON_DIEGETIC AVDisposition = C.AV_DISPOSITION_NON_DIEGETIC
120-
AV_DISPOSITION_CAPTIONS AVDisposition = C.AV_DISPOSITION_CAPTIONS
121-
AV_DISPOSITION_DESCRIPTIONS AVDisposition = C.AV_DISPOSITION_DESCRIPTIONS
122-
AV_DISPOSITION_METADATA AVDisposition = C.AV_DISPOSITION_METADATA
123-
AV_DISPOSITION_DEPENDENT AVDisposition = C.AV_DISPOSITION_DEPENDENT
124-
AV_DISPOSITION_STILL_IMAGE AVDisposition = C.AV_DISPOSITION_STILL_IMAGE
125-
AV_DISPOSITION_NONE AVDisposition = 0
126-
AV_DISPOSITION_MAX = AV_DISPOSITION_STILL_IMAGE
119+
AV_DISPOSITION_NON_DIEGETIC AVDisposition = C.AV_DISPOSITION_NON_DIEGETIC
120+
AV_DISPOSITION_CAPTIONS AVDisposition = C.AV_DISPOSITION_CAPTIONS
121+
AV_DISPOSITION_DESCRIPTIONS AVDisposition = C.AV_DISPOSITION_DESCRIPTIONS
122+
AV_DISPOSITION_METADATA AVDisposition = C.AV_DISPOSITION_METADATA
123+
AV_DISPOSITION_DEPENDENT AVDisposition = C.AV_DISPOSITION_DEPENDENT
124+
AV_DISPOSITION_STILL_IMAGE AVDisposition = C.AV_DISPOSITION_STILL_IMAGE
125+
AV_DISPOSITION_NONE AVDisposition = 0
126+
AV_DISPOSITION_MAX = AV_DISPOSITION_STILL_IMAGE
127127
)
128128

129129
const (

0 commit comments

Comments
 (0)