Skip to content

Commit 6dadf23

Browse files
committed
wip
1 parent e0f81df commit 6dadf23

10 files changed

+829
-45
lines changed

format/format.go

+36
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,10 @@ const (
106106
MPEG_PES_PACKET = "mpeg_pes_packet"
107107
MPEG_SPU = "mpeg_spu"
108108
MPEG_TS = "mpeg_ts"
109+
MPEG_TS_PACKET = "mpeg_ts_packet"
110+
MPEG_TS_PAT = "mpeg_ts_pat"
111+
MPEG_TS_PMT = "mpeg_ts_pmt"
112+
MPEG_TS_SDT = "mpeg_ts_sdt"
109113
MSGPACK = "msgpack"
110114
OGG = "ogg"
111115
OGG_PAGE = "ogg_page"
@@ -327,3 +331,35 @@ type CSVLIn struct {
327331
type BitCoinBlockIn struct {
328332
HasHeader bool `doc:"Has blkdat header"`
329333
}
334+
335+
type MpegTsStream struct {
336+
ProgramPid int
337+
Type int
338+
}
339+
340+
type MpegTsProgram struct {
341+
Number int
342+
Pid int
343+
StreamPids []int
344+
}
345+
346+
type MpegTsPacketIn struct {
347+
ProgramMap map[int]MpegTsProgram
348+
StreamMap map[int]MpegTsStream
349+
}
350+
351+
type MpegTsPacketOut struct {
352+
Pid int
353+
ContinuityCounter int
354+
TransportScramblingControl int
355+
PayloadUnitStart bool
356+
Payload []byte
357+
}
358+
359+
type MpegTsPatOut struct {
360+
PidMap map[int]int // pid to program number that has pmt
361+
}
362+
363+
type MpegTsPmtOut struct {
364+
Streams map[int]MpegTsStream
365+
}

format/mpeg/mpeg_pes.go

+32-27
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ package mpeg
55
// http://dvdnav.mplayerhq.hu/dvdinfo/mpeghdrs.html
66

77
import (
8+
"log"
9+
810
"github.com/wader/fq/format"
911
"github.com/wader/fq/pkg/bitio"
1012
"github.com/wader/fq/pkg/decode"
@@ -19,8 +21,8 @@ func init() {
1921
Name: format.MPEG_PES,
2022
Description: "MPEG Packetized elementary stream",
2123
DecodeFn: pesDecode,
22-
RootArray: true,
23-
RootName: "packets",
24+
// RootArray: true,
25+
RootName: "packets",
2426
Dependencies: []decode.Dependency{
2527
{Names: []string{format.MPEG_PES_PACKET}, Group: &pesPacketFormat},
2628
{Names: []string{format.MPEG_SPU}, Group: &spuFormat},
@@ -45,36 +47,39 @@ func pesDecode(d *decode.D, _ any) any {
4547

4648
spuD := d.FieldArrayValue("spus")
4749

48-
for d.NotEnd() {
49-
dv, v, err := d.TryFieldFormat("packet", pesPacketFormat, nil)
50-
if dv == nil || err != nil {
51-
break
52-
}
53-
54-
switch dvv := v.(type) {
55-
case subStreamPacket:
56-
s, ok := substreams[dvv.number]
57-
if !ok {
58-
s = &subStream{}
59-
substreams[dvv.number] = s
50+
d.FieldArray("packets", func(d *decode.D) {
51+
for d.NotEnd() {
52+
dv, v, err := d.TryFieldFormat("packet", pesPacketFormat, nil)
53+
if dv == nil || err != nil {
54+
log.Printf("err: %#+v\n", err)
55+
break
6056
}
61-
s.b = append(s.b, dvv.buf...)
6257

63-
if s.l == 0 && len(s.b) >= 2 {
64-
s.l = int(s.b[0])<<8 | int(s.b[1])
65-
// TODO: zero l?
58+
switch dvv := v.(type) {
59+
case subStreamPacket:
60+
s, ok := substreams[dvv.number]
61+
if !ok {
62+
s = &subStream{}
63+
substreams[dvv.number] = s
64+
}
65+
s.b = append(s.b, dvv.buf...)
66+
67+
if s.l == 0 && len(s.b) >= 2 {
68+
s.l = int(s.b[0])<<8 | int(s.b[1])
69+
// TODO: zero l?
70+
}
71+
72+
// TODO: is this how spu end is signalled?
73+
if s.l == len(s.b) {
74+
spuD.FieldFormatBitBuf("spu", bitio.NewBitReader(s.b, -1), spuFormat, nil)
75+
s.b = nil
76+
s.l = 0
77+
}
6678
}
6779

68-
// TODO: is this how spu end is signalled?
69-
if s.l == len(s.b) {
70-
spuD.FieldFormatBitBuf("spu", bitio.NewBitReader(s.b, -1), spuFormat, nil)
71-
s.b = nil
72-
s.l = 0
73-
}
80+
i++
7481
}
75-
76-
i++
77-
}
82+
})
7883

7984
return nil
8085
}

format/mpeg/mpeg_pes_packet.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -201,9 +201,9 @@ func pesPacketDecode(d *decode.D, _ any) any {
201201
// nop
202202
}
203203

204-
if d.BitsLeft() > 0 {
205-
d.FieldRawLen("data", d.BitsLeft())
206-
}
204+
// if d.BitsLeft() > 0 {
205+
// d.FieldRawLen("data", d.BitsLeft())
206+
// }
207207

208208
return v
209209
}

0 commit comments

Comments
 (0)