TODO 4.86 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

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)

conrad's avatar
conrad committed
22 23 24
	State
	* add seek_packet() function to return to a previous packet

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
	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.

145 146
oggz-merge
----------
147 148 149 150 151
	* 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)

152 153 154 155 156 157
	* 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
---------
158 159 160 161 162
	* 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)

163 164 165 166
	* Dirac: take pt,dt into account. See
	http://lists.xiph.org/pipermail/ogg-dev/2008-November/001264.html
	* but first, reject Dirac streams

167 168
oggz-validate
-------------
169 170 171 172 173
	* 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."

174 175 176
	* Flag a discrepancy between continued flag and lack of a last < 255 segment
	in the previous packet

177 178
	* validate skeleton