mirror of
https://github.com/wader/fq.git
synced 2024-11-26 21:55:57 +03:00
format: Cleanup comments
This commit is contained in:
parent
1ccab2da1e
commit
798141a0b0
@ -1,4 +1,4 @@
|
|||||||
// Package all imports all standard formats
|
// Package all imports and registers all formats in the default registry
|
||||||
package all
|
package all
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
@ -2,9 +2,6 @@ package flac
|
|||||||
|
|
||||||
// https://xiph.org/flac/format.html
|
// https://xiph.org/flac/format.html
|
||||||
|
|
||||||
// TODO: reuse samples buffer
|
|
||||||
// TODO: mime audio/x-flac
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"crypto/md5"
|
"crypto/md5"
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
package flac
|
package flac
|
||||||
|
|
||||||
// TODO: reuse samples buffer. pass in buf?
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
@ -6,7 +6,6 @@ package gif
|
|||||||
|
|
||||||
// TODO: local color map
|
// TODO: local color map
|
||||||
// TODO: bit depth done correct?
|
// TODO: bit depth done correct?
|
||||||
// TDOO: mime mage/gif
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
@ -3,7 +3,6 @@ package gz
|
|||||||
// https://tools.ietf.org/html/rfc1952
|
// https://tools.ietf.org/html/rfc1952
|
||||||
// TODO: test name, comment etc
|
// TODO: test name, comment etc
|
||||||
// TODO: verify isize?
|
// TODO: verify isize?
|
||||||
// TODO: mime application/gzip
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
@ -8,7 +8,6 @@ import (
|
|||||||
"github.com/wader/fq/pkg/decode"
|
"github.com/wader/fq/pkg/decode"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TODO: trim strings?
|
|
||||||
// TODO: comment 28 long, zero byte, track number
|
// TODO: comment 28 long, zero byte, track number
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
@ -3,7 +3,6 @@ package jpeg
|
|||||||
// https://www.w3.org/Graphics/JPEG/itu-t81.pdf
|
// https://www.w3.org/Graphics/JPEG/itu-t81.pdf
|
||||||
// TODO: warning on junk before marker?
|
// TODO: warning on junk before marker?
|
||||||
// TODO: extract photohop to own decoder?
|
// TODO: extract photohop to own decoder?
|
||||||
// TODO: image/jpeg
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package mp4
|
package mp4
|
||||||
|
|
||||||
|
// TODO: flags?
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -205,7 +207,6 @@ func init() {
|
|||||||
"tref": decodeBoxes,
|
"tref": decodeBoxes,
|
||||||
"tkhd": func(ctx *decodeContext, d *decode.D) {
|
"tkhd": func(ctx *decodeContext, d *decode.D) {
|
||||||
d.FieldU8("version")
|
d.FieldU8("version")
|
||||||
// TODO: values
|
|
||||||
d.FieldU24("flags")
|
d.FieldU24("flags")
|
||||||
_ = decodeFieldTime(d, "creation_time")
|
_ = decodeFieldTime(d, "creation_time")
|
||||||
_ = decodeFieldTime(d, "modification_time")
|
_ = decodeFieldTime(d, "modification_time")
|
||||||
@ -214,7 +215,6 @@ func init() {
|
|||||||
d.FieldU32("duration")
|
d.FieldU32("duration")
|
||||||
d.FieldBitBufLen("reserved2", 8*8)
|
d.FieldBitBufLen("reserved2", 8*8)
|
||||||
d.FieldU16("layer")
|
d.FieldU16("layer")
|
||||||
// TODO: values
|
|
||||||
d.FieldU16("alternate_group")
|
d.FieldU16("alternate_group")
|
||||||
d.FieldFP16("volume")
|
d.FieldFP16("volume")
|
||||||
d.FieldU16("reserved3")
|
d.FieldU16("reserved3")
|
||||||
@ -232,7 +232,6 @@ func init() {
|
|||||||
"mdia": decodeBoxes,
|
"mdia": decodeBoxes,
|
||||||
"mdhd": func(_ *decodeContext, d *decode.D) {
|
"mdhd": func(_ *decodeContext, d *decode.D) {
|
||||||
d.FieldU8("version")
|
d.FieldU8("version")
|
||||||
// TODO: values
|
|
||||||
d.FieldU24("flags")
|
d.FieldU24("flags")
|
||||||
// TODO: timestamps
|
// TODO: timestamps
|
||||||
_ = decodeFieldTime(d, "creation_time")
|
_ = decodeFieldTime(d, "creation_time")
|
||||||
@ -254,7 +253,6 @@ func init() {
|
|||||||
},
|
},
|
||||||
"hdlr": func(ctx *decodeContext, d *decode.D) {
|
"hdlr": func(ctx *decodeContext, d *decode.D) {
|
||||||
d.FieldU8("version")
|
d.FieldU8("version")
|
||||||
// TODO: values
|
|
||||||
d.FieldU24("flags")
|
d.FieldU24("flags")
|
||||||
d.FieldUTF8("component_type", 4)
|
d.FieldUTF8("component_type", 4)
|
||||||
subTypeNames := map[string]string{
|
subTypeNames := map[string]string{
|
||||||
@ -306,7 +304,6 @@ func init() {
|
|||||||
"dinf": decodeBoxes,
|
"dinf": decodeBoxes,
|
||||||
"dref": func(_ *decodeContext, d *decode.D) {
|
"dref": func(_ *decodeContext, d *decode.D) {
|
||||||
d.FieldU8("version")
|
d.FieldU8("version")
|
||||||
// TODO: values
|
|
||||||
d.FieldU24("flags")
|
d.FieldU24("flags")
|
||||||
entryCount := d.FieldU32("entry_count")
|
entryCount := d.FieldU32("entry_count")
|
||||||
var i uint64
|
var i uint64
|
||||||
@ -323,7 +320,6 @@ func init() {
|
|||||||
"stbl": decodeBoxes,
|
"stbl": decodeBoxes,
|
||||||
"stsd": func(ctx *decodeContext, d *decode.D) {
|
"stsd": func(ctx *decodeContext, d *decode.D) {
|
||||||
d.FieldU8("version")
|
d.FieldU8("version")
|
||||||
// TODO: values
|
|
||||||
d.FieldU24("flags")
|
d.FieldU24("flags")
|
||||||
entryCount := d.FieldU32("entry_count")
|
entryCount := d.FieldU32("entry_count")
|
||||||
var i uint64
|
var i uint64
|
||||||
@ -350,24 +346,7 @@ func init() {
|
|||||||
|
|
||||||
version := d.FieldU16("version")
|
version := d.FieldU16("version")
|
||||||
d.FieldU16("revision_level")
|
d.FieldU16("revision_level")
|
||||||
d.FieldU32("max_packet_size") // TODO: vendor?
|
d.FieldU32("max_packet_size") // TODO: vendor for some subtype?
|
||||||
|
|
||||||
// "Some sample descriptions terminate with four zero bytes that are not otherwise indicated."
|
|
||||||
// uses decodeBoxes
|
|
||||||
|
|
||||||
// Timecode sample
|
|
||||||
// TODO: tc64
|
|
||||||
// d.DecodeRangeFn(firstBit, nBits, func(d *decode.D) {
|
|
||||||
// d.FieldStructFn("sample", func(d *decode.D) {
|
|
||||||
// d.FieldU32("reserved0")
|
|
||||||
// d.FieldBitBufLen("data", d.BitsLeft())
|
|
||||||
// // d.FieldU32("flags")
|
|
||||||
// // d.FieldS32("timescale")
|
|
||||||
// // d.FieldS32("frame_duration")
|
|
||||||
// // d.FieldS32("num_frames")
|
|
||||||
// // d.FieldU8("reserved1")
|
|
||||||
// })
|
|
||||||
// })
|
|
||||||
|
|
||||||
switch subType {
|
switch subType {
|
||||||
case "soun":
|
case "soun":
|
||||||
@ -476,7 +455,6 @@ func init() {
|
|||||||
},
|
},
|
||||||
"dfLa": func(ctx *decodeContext, d *decode.D) {
|
"dfLa": func(ctx *decodeContext, d *decode.D) {
|
||||||
d.FieldU8("version")
|
d.FieldU8("version")
|
||||||
// TODO: values
|
|
||||||
d.FieldU24("flags")
|
d.FieldU24("flags")
|
||||||
d.FieldArrayFn("metadatablocks", func(d *decode.D) {
|
d.FieldArrayFn("metadatablocks", func(d *decode.D) {
|
||||||
for {
|
for {
|
||||||
@ -511,15 +489,6 @@ func init() {
|
|||||||
"esds": func(ctx *decodeContext, d *decode.D) {
|
"esds": func(ctx *decodeContext, d *decode.D) {
|
||||||
d.FieldU32("version")
|
d.FieldU32("version")
|
||||||
|
|
||||||
// TODO: some other way to know how to decode?
|
|
||||||
// TODO: why not always? was there a reason?
|
|
||||||
// dataFormat := ""
|
|
||||||
// if ctx.currentTrack != nil && len(ctx.currentTrack.sampleDescriptions) > 0 {
|
|
||||||
// dataFormat = ctx.currentTrack.sampleDescriptions[0].dataFormat
|
|
||||||
// }
|
|
||||||
|
|
||||||
// switch dataFormat {
|
|
||||||
// case "mp4a", "mp4v":
|
|
||||||
_, v := d.FieldFormat("es_descriptor", mpegESFormat)
|
_, v := d.FieldFormat("es_descriptor", mpegESFormat)
|
||||||
mpegEsOut, ok := v.(format.MpegEsOut)
|
mpegEsOut, ok := v.(format.MpegEsOut)
|
||||||
if !ok {
|
if !ok {
|
||||||
@ -532,15 +501,9 @@ func init() {
|
|||||||
ctx.currentTrack.decodeOpts = append(ctx.currentTrack.decodeOpts,
|
ctx.currentTrack.decodeOpts = append(ctx.currentTrack.decodeOpts,
|
||||||
decode.FormatOptions{InArg: format.AACFrameIn{ObjectType: dc.ASCObjectType}})
|
decode.FormatOptions{InArg: format.AACFrameIn{ObjectType: dc.ASCObjectType}})
|
||||||
}
|
}
|
||||||
|
|
||||||
// default:
|
|
||||||
// d.FieldBitBufLen("data", d.BitsLeft())
|
|
||||||
// }
|
|
||||||
|
|
||||||
},
|
},
|
||||||
"stts": func(_ *decodeContext, d *decode.D) {
|
"stts": func(_ *decodeContext, d *decode.D) {
|
||||||
d.FieldU8("version")
|
d.FieldU8("version")
|
||||||
// TODO: values
|
|
||||||
d.FieldU24("flags")
|
d.FieldU24("flags")
|
||||||
numEntries := d.FieldU32("entry_count")
|
numEntries := d.FieldU32("entry_count")
|
||||||
var i uint64
|
var i uint64
|
||||||
@ -552,7 +515,6 @@ func init() {
|
|||||||
},
|
},
|
||||||
"stsc": func(ctx *decodeContext, d *decode.D) {
|
"stsc": func(ctx *decodeContext, d *decode.D) {
|
||||||
d.FieldU8("version")
|
d.FieldU8("version")
|
||||||
// TODO: values
|
|
||||||
d.FieldU24("flags")
|
d.FieldU24("flags")
|
||||||
entryCount := d.FieldU32("entry_count")
|
entryCount := d.FieldU32("entry_count")
|
||||||
var i uint64
|
var i uint64
|
||||||
@ -572,7 +534,6 @@ func init() {
|
|||||||
},
|
},
|
||||||
"stsz": func(ctx *decodeContext, d *decode.D) {
|
"stsz": func(ctx *decodeContext, d *decode.D) {
|
||||||
d.FieldU8("version")
|
d.FieldU8("version")
|
||||||
// TODO: values
|
|
||||||
d.FieldU24("flags")
|
d.FieldU24("flags")
|
||||||
// TODO: bytes_per_sample from audio stsd?
|
// TODO: bytes_per_sample from audio stsd?
|
||||||
sampleSize := d.FieldU32("sample_size")
|
sampleSize := d.FieldU32("sample_size")
|
||||||
@ -596,7 +557,6 @@ func init() {
|
|||||||
},
|
},
|
||||||
"stco": func(ctx *decodeContext, d *decode.D) {
|
"stco": func(ctx *decodeContext, d *decode.D) {
|
||||||
d.FieldU8("version")
|
d.FieldU8("version")
|
||||||
// TODO: values
|
|
||||||
d.FieldU24("flags")
|
d.FieldU24("flags")
|
||||||
entryCount := d.FieldU32("entry_count")
|
entryCount := d.FieldU32("entry_count")
|
||||||
var i uint64
|
var i uint64
|
||||||
@ -653,7 +613,6 @@ func init() {
|
|||||||
// TODO: refactor: merge with stco?
|
// TODO: refactor: merge with stco?
|
||||||
"co64": func(ctx *decodeContext, d *decode.D) {
|
"co64": func(ctx *decodeContext, d *decode.D) {
|
||||||
d.FieldU8("version")
|
d.FieldU8("version")
|
||||||
// TODO: values
|
|
||||||
d.FieldU24("flags")
|
d.FieldU24("flags")
|
||||||
entryCount := d.FieldU32("entry_count")
|
entryCount := d.FieldU32("entry_count")
|
||||||
var i uint64
|
var i uint64
|
||||||
@ -971,7 +930,7 @@ func init() {
|
|||||||
d.FieldU8("version")
|
d.FieldU8("version")
|
||||||
d.FieldU24("flags")
|
d.FieldU24("flags")
|
||||||
d.FieldU1("pad")
|
d.FieldU1("pad")
|
||||||
// ISO-639-2/T as 3*5 bit intgers - 0x60
|
// ISO-639-2/T as 3*5 bit integers - 0x60
|
||||||
d.FieldStrFn("language", func() (string, string) {
|
d.FieldStrFn("language", func() (string, string) {
|
||||||
s := ""
|
s := ""
|
||||||
for i := 0; i < 3; i++ {
|
for i := 0; i < 3; i++ {
|
||||||
@ -1170,25 +1129,7 @@ func init() {
|
|||||||
d.FieldU24("flags")
|
d.FieldU24("flags")
|
||||||
|
|
||||||
d.FieldU32("sample_count")
|
d.FieldU32("sample_count")
|
||||||
// d.FieldArrayFn("samples", func(d *decode.D) {
|
// TODO need iv size here
|
||||||
// for i := uint64(0); i < sampleCount; i++ {
|
|
||||||
// d.FieldStructFn("sample", func(d *decode.D) {
|
|
||||||
// // TODO: IV_size?
|
|
||||||
// d.FieldBitBufLen("iv", 8*8)
|
|
||||||
// if flags&0b10 != 0 {
|
|
||||||
// subSampleCount := d.FieldU32("sub_sample_count")
|
|
||||||
// d.FieldArrayFn("subsamples", func(d *decode.D) {
|
|
||||||
// for i := uint64(0); i < subSampleCount; i++ {
|
|
||||||
// d.FieldStructFn("subsample", func(d *decode.D) {
|
|
||||||
// d.FieldU16("bytes_of_clear_data")
|
|
||||||
// d.FieldU32("bytes_fo_encrypted_data")
|
|
||||||
// })
|
|
||||||
// }
|
|
||||||
// })
|
|
||||||
// }
|
|
||||||
// })
|
|
||||||
// }
|
|
||||||
// })
|
|
||||||
},
|
},
|
||||||
"tenc": func(_ *decodeContext, d *decode.D) {
|
"tenc": func(_ *decodeContext, d *decode.D) {
|
||||||
version := d.FieldU8("version")
|
version := d.FieldU8("version")
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package mp4
|
package mp4
|
||||||
|
|
||||||
// from
|
// from:
|
||||||
// https://cconcolato.github.io/mp4ra/filetype.html
|
// https://cconcolato.github.io/mp4ra/filetype.html
|
||||||
// https://exiftool.org/TagNames/QuickTime.html
|
// https://exiftool.org/TagNames/QuickTime.html
|
||||||
var brandDescriptions = map[string]string{
|
var brandDescriptions = map[string]string{
|
||||||
|
@ -1,23 +1,19 @@
|
|||||||
package mp4
|
package mp4
|
||||||
|
|
||||||
// Tries to decode both ISOBMFF and quicktime
|
// Tries to decode ISOBMFF quicktime mov
|
||||||
// Uses naming from ISOBMFF when possible
|
// Uses naming from ISOBMFF when possible
|
||||||
// ISO/IEC 14496-12
|
// ISO/IEC 14496-12
|
||||||
// Quicktime file format https://developer.apple.com/standards/qtff-2001.pdf
|
// Quicktime file format https://developer.apple.com/standards/qtff-2001.pdf
|
||||||
// FLAC in ISOBMFF https://github.com/xiph/flac/blob/master/doc/isoflac.txt
|
// FLAC in ISOBMFF https://github.com/xiph/flac/blob/master/doc/isoflac.txt
|
||||||
// https://www.webmproject.org/vp9/mp4/
|
// vp9 in ISOBMFF https://www.webmproject.org/vp9/mp4/
|
||||||
|
// https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/Metadata/Metadata.html#//apple_ref/doc/uid/TP40000939-CH1-SW43
|
||||||
|
|
||||||
// TODO: validate structure better? trak/stco etc
|
// TODO: validate structure better? trak/stco etc
|
||||||
// TODO: fmp4, default samples sizes etc
|
|
||||||
// TODO: keep track of structure somehow to detect errors
|
// TODO: keep track of structure somehow to detect errors
|
||||||
// TODO: ISO-14496 says mp4 mdat can begin and end with original header/trailer (no used i guess?)
|
// TODO: ISO-14496 says mp4 mdat can begin and end with original header/trailer (no used?)
|
||||||
// TODO: more metadata
|
|
||||||
// https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/Metadata/Metadata.html#//apple_ref/doc/uid/TP40000939-CH1-SW43
|
|
||||||
// TODO: split into mov and mp4 decoder?
|
// TODO: split into mov and mp4 decoder?
|
||||||
// TODO: split into mp4_box decoder? needs complex in/out args?
|
// TODO: split into mp4_box decoder? needs complex in/out args?
|
||||||
// TODO: fragmented: tracks per fragment? fragment_index in samples?
|
|
||||||
// TODO: better probe, find first 2 boxes, should be free,ftyp or mdat?
|
// TODO: better probe, find first 2 boxes, should be free,ftyp or mdat?
|
||||||
// TODO: mime
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"embed"
|
"embed"
|
||||||
|
@ -1,9 +1,5 @@
|
|||||||
package mpeg
|
package mpeg
|
||||||
|
|
||||||
// TODO: move aac things to mpeg?
|
|
||||||
|
|
||||||
// TODO:
|
|
||||||
// create ASC decoder
|
|
||||||
// https://github.com/mstorsjo/fdk-aac/blob/f285813ec15e7c6f8e4839c9eb4f6b0cd2da1990/libMpegTPEnc/src/tpenc_asc.cpp
|
// https://github.com/mstorsjo/fdk-aac/blob/f285813ec15e7c6f8e4839c9eb4f6b0cd2da1990/libMpegTPEnc/src/tpenc_asc.cpp
|
||||||
// https://www.iis.fraunhofer.de/content/dam/iis/de/doc/ame/wp/FraunhoferIIS_Application-Bulletin_AAC-Transport-Formats.pdf
|
// https://www.iis.fraunhofer.de/content/dam/iis/de/doc/ame/wp/FraunhoferIIS_Application-Bulletin_AAC-Transport-Formats.pdf
|
||||||
// https://github.com/FFmpeg/FFmpeg/blob/master/libavcodec/aac_adtstoasc_bsf.c
|
// https://github.com/FFmpeg/FFmpeg/blob/master/libavcodec/aac_adtstoasc_bsf.c
|
||||||
|
@ -3,9 +3,7 @@ package mpeg
|
|||||||
// ISO/IEC 14496-15 AVC file format, 5.3.3.1.2 Syntax
|
// ISO/IEC 14496-15 AVC file format, 5.3.3.1.2 Syntax
|
||||||
// ISO_IEC_14496-10 AVC
|
// ISO_IEC_14496-10 AVC
|
||||||
|
|
||||||
// TODO: PPS
|
|
||||||
// TODO: use avcLevels
|
// TODO: use avcLevels
|
||||||
// TODO: nal unescape function?
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/wader/fq/format"
|
"github.com/wader/fq/format"
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package mpeg
|
package mpeg
|
||||||
|
|
||||||
// TODO: unescape configurable? merge with AVC_NAL? merge with HEVC?
|
// TODO: unescape configurable? merge with AVC_NAL? merge with HEVC?
|
||||||
// TODO: naming
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/wader/fq/format"
|
"github.com/wader/fq/format"
|
||||||
|
@ -1,8 +1,5 @@
|
|||||||
package mpeg
|
package mpeg
|
||||||
|
|
||||||
// ISO/IEC 14496-15 AVC file format, 5.3.3.1.2 Syntax
|
|
||||||
// ISO_IEC_14496-10 AVC
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/wader/fq/format"
|
"github.com/wader/fq/format"
|
||||||
"github.com/wader/fq/format/registry"
|
"github.com/wader/fq/format/registry"
|
||||||
|
@ -91,13 +91,6 @@ func init() {
|
|||||||
// 15: {4, 3},
|
// 15: {4, 3},
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// func huffmanDecode(d *decode.D, table []int) {
|
|
||||||
// i := 0
|
|
||||||
// for table[i] < 0 {
|
|
||||||
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
var blockTypeNames = map[uint64]string{
|
var blockTypeNames = map[uint64]string{
|
||||||
0: "reserved",
|
0: "reserved",
|
||||||
1: "start block",
|
1: "start block",
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package mpeg
|
package mpeg
|
||||||
|
|
||||||
// TODO: probeable?
|
// TODO: probeable?
|
||||||
// TODO: add ts
|
|
||||||
|
|
||||||
// http://dvdnav.mplayerhq.hu/dvdinfo/mpeghdrs.html
|
// http://dvdnav.mplayerhq.hu/dvdinfo/mpeghdrs.html
|
||||||
|
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package ogg
|
package ogg
|
||||||
|
|
||||||
// https://xiph.org/ogg/doc/framing.html
|
// https://xiph.org/ogg/doc/framing.html
|
||||||
// TODO: audio/ogg"
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
@ -101,7 +100,6 @@ func decodeOgg(d *decode.D, in interface{}) interface{} {
|
|||||||
s.firstBit = d.Pos()
|
s.firstBit = d.Pos()
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: decoder buffer api that panics?
|
|
||||||
psBytes := ps.Len() / 8
|
psBytes := ps.Len() / 8
|
||||||
|
|
||||||
// TODO: cleanup
|
// TODO: cleanup
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
package ogg
|
package ogg
|
||||||
|
|
||||||
// https://xiph.org/ogg/doc/framing.html
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
|
||||||
|
@ -4,7 +4,6 @@ package png
|
|||||||
// https://ftp-osl.osuosl.org/pub/libpng/documents/pngext-1.5.0.html
|
// https://ftp-osl.osuosl.org/pub/libpng/documents/pngext-1.5.0.html
|
||||||
// https://wiki.mozilla.org/APNG_Specification
|
// https://wiki.mozilla.org/APNG_Specification
|
||||||
// TODO: color types
|
// TODO: color types
|
||||||
// TODO: image/png
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"hash/crc32"
|
"hash/crc32"
|
||||||
|
@ -2,7 +2,6 @@ package tar
|
|||||||
|
|
||||||
// https://www.gnu.org/software/tar/manual/html_node/Standard.html
|
// https://www.gnu.org/software/tar/manual/html_node/Standard.html
|
||||||
// TODO: extensions?
|
// TODO: extensions?
|
||||||
// TODO: application/x-tar
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package tiff
|
package tiff
|
||||||
|
|
||||||
// https://www.adobe.io/content/dam/udp/en/open/standards/tiff/TIFF6.pdf
|
// https://www.adobe.io/content/dam/udp/en/open/standards/tiff/TIFF6.pdf
|
||||||
// TODO: image/tiff
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/wader/fq/format"
|
"github.com/wader/fq/format"
|
||||||
|
@ -91,10 +91,6 @@ func vorbisDecode(d *decode.D, in interface{}) interface{} {
|
|||||||
// TODO: warning if not 64-8192
|
// TODO: warning if not 64-8192
|
||||||
d.FieldValidateZeroPadding("padding0", 7)
|
d.FieldValidateZeroPadding("padding0", 7)
|
||||||
d.FieldValidateUFn("framing_flag", 1, d.U1)
|
d.FieldValidateUFn("framing_flag", 1, d.U1)
|
||||||
|
|
||||||
// if d.BitsLeft() > 0 {
|
|
||||||
// d.FieldValidateZeroPadding("padding1", int(d.BitsLeft()))
|
|
||||||
// }
|
|
||||||
case packetTypeSetup:
|
case packetTypeSetup:
|
||||||
d.FieldUFn("vorbis_codebook_count", func() (uint64, decode.DisplayFormat, string) {
|
d.FieldUFn("vorbis_codebook_count", func() (uint64, decode.DisplayFormat, string) {
|
||||||
return d.U8() + 1, decode.NumberDecimal, ""
|
return d.U8() + 1, decode.NumberDecimal, ""
|
||||||
@ -123,16 +119,11 @@ func vorbisDecode(d *decode.D, in interface{}) interface{} {
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
case packetTypeComment:
|
case packetTypeComment:
|
||||||
// TODO: should not be try, FieldFormat?
|
|
||||||
d.FieldFormat("comment", vorbisComment)
|
d.FieldFormat("comment", vorbisComment)
|
||||||
|
|
||||||
// note this uses vorbis bitpacking convention, bits are added LSB first per byte
|
// note this uses vorbis bitpacking convention, bits are added LSB first per byte
|
||||||
d.FieldValidateZeroPadding("padding0", 7)
|
d.FieldValidateZeroPadding("padding0", 7)
|
||||||
d.FieldValidateUFn("frame_bit", 1, d.U1)
|
d.FieldValidateUFn("frame_bit", 1, d.U1)
|
||||||
|
|
||||||
// if d.BitsLeft() > 0 {
|
|
||||||
// d.FieldValidateZeroPadding("padding1", int(d.BitsLeft()))
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package webp
|
package webp
|
||||||
|
|
||||||
// https://developers.google.com/speed/webp/docs/riff_container
|
// https://developers.google.com/speed/webp/docs/riff_container
|
||||||
// TODO: image/webp
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
Loading…
Reference in New Issue
Block a user