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