forked from kfish/liboggz
-
Notifications
You must be signed in to change notification settings - Fork 4
/
TODO
178 lines (129 loc) · 4.86 KB
/
TODO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
This is a loosely-categorized list of outstanding tasks and ideas for improving
liboggz and the oggz tools. When implementing any of these, please include an
update to this TODO file removing that task, in the same commit.
Library
=======
Documentation
-------------
Doxygen
* add docs about auto gp functionality
* review: is all functionality covered?
* separate into intro/advanced topics
* rewrite intro so that newer, simpler functionality is covered.
Seeking
-------
(See seek-rewrite branch for updates)
State
* add seek_packet() function to return to a previous packet
Keyframe seeking
* add seek_keyframe() (double-seek) function, using method from thread
titled "ogg double seek algorithm" to a11y list 18/11/2008 including
Ralph's corrections
* seek to a specific gp (not time)
* switch table to a vector
* seek_units (SET, CUR, END)
oggz_get_duration()
* add new public API call
* subtract file start / presentation time from duration
Large file offsets
* introduce seek_offset(), tell_offset() variants using oggz_off_t
interface, and deprecate oggz_seek(), oggz_tell()
* s/units/time/ throughout (or more explicitly "milliseconds" or
"nanoseconds")
New seek API calls:
* next(), prev(), key(): seek to the next, prev or keyframe of this packet
Internals
---------
* replace table implementation, allow NULL insertion
* use debug_printf() (eg. from libshcodecs) instead of #ifdef DEBUG
throughout
Cleanups
--------
* dirac.c is included in tools/Makefile.am in LIBS. Instead, include it
where it is actually used (by oggz_tools.c)
API
---
* rename all track-specific functions to oggz_track_*() ?
* add a OGGZ_SORT option (flag w/ OGGZ_WRITE) which queues pages like
oggz-merge internally. Use this for oggz-merge (and libannodex ...)
* add low-level public functions to extract packets from a page?
(like in fix-eos)
Tools
=====
* verbose operation in oggz-sort, oggz-merge etc. should print to stderr,
not clobber stdout
* use libexplain in tools, esp. oggz-chop logging errors.
oggz-addskel
------------
* new tool to add skeleton (though oggz-chop with no args does this)
oggz-chop
---------
(See chop-rewrite branch for updates)
Content-Duration
* add Content-Duration header
* use get_duration() in oggz-chop
Content-Length
* if no subview, return length of file
* if supports byte range redirect, cache control section and return its
length. Print that, then sendfile() the control section.
Else, build, write and send the whole subview.
* use seek_keyframe() to find chop point, from which to accumulate headers.
Confirm same output as current version.
Error handling
* handle failed parse of query: redirect to canonical file rather than
producing output (for caching sanity), or reject the request?
* strip unknown parameters and redirect to canonical form?
Range requests
* handle Range requests
Skeleton
* add message header fields for Chopped-By, Encoded-By etc.
Multiple time ranges
* support multiple time ranges, convert to byte ranges
* Terminate when all tracks are at EOS, don't spin to end of file.
FastCGI support
sndfile()
TCP_CORK
oggz-comment
------------
* add a -p option to add padding, like rareware's oggenc2. This will need
to track page boundaries accurately, ie. when inserting tags, see if it
can be done inplace and do that if possible.
oggz-diff
---------
* is not using mkfifo
oggz-dump
---------
* add info to "oggz-dump --help" explaining how to interpret the info.
Point to RFC3533 for details. Explain serialno, and explain granulepos for
audio, Theora and Dirac -- ie. how to interpret keyframe.
oggz-optimize
-------------
* new tool: optimize the flushing on an ogg stream. Give limits on page
duration or size.
oggz-merge
----------
* Accumulate gp -1 pages rather than writing them out as soon as they
are available, so that single-packet continued pages are placed immediately
prior to the page their contained packet finishes on.
(reported by gmaxwell, 20100318)
* Dirac: take pt,dt into account. See
http://lists.xiph.org/pipermail/ogg-dev/2008-November/001264.html
* but first, reject Dirac streams
oggz-sort
---------
* Accumulate gp -1 pages rather than writing them out as soon as they
are available, so that single-packet continued pages are placed immediately
prior to the page their contained packet finishes on.
(reported by gmaxwell, 20100318)
* Dirac: take pt,dt into account. See
http://lists.xiph.org/pipermail/ogg-dev/2008-November/001264.html
* but first, reject Dirac streams
oggz-validate
-------------
* Throw an error for pages with gp -1 that have a packet finishing on them
(requested by derf 20100316, framing spec clearly states that "A special
value of '-1' (in two's complement) indicates that no packets finish on this
page."
* Flag a discrepancy between continued flag and lack of a last < 255 segment
in the previous packet
* validate skeleton