Blame TODO

Packit a38265
Packit a38265
This is a loosely-categorized list of outstanding tasks and ideas for improving
Packit a38265
liboggz and the oggz tools. When implementing any of these, please include an
Packit a38265
update to this TODO file removing that task, in the same commit.
Packit a38265
Packit a38265
Library
Packit a38265
=======
Packit a38265
Packit a38265
Documentation
Packit a38265
-------------
Packit a38265
Packit a38265
	Doxygen
Packit a38265
	* add docs about auto gp functionality
Packit a38265
	* review: is all functionality covered?
Packit a38265
	* separate into intro/advanced topics
Packit a38265
	* rewrite intro so that newer, simpler functionality is covered.
Packit a38265
Packit a38265
Seeking
Packit a38265
-------
Packit a38265
(See seek-rewrite branch for updates)
Packit a38265
Packit a38265
	State
Packit a38265
	* add seek_packet() function to return to a previous packet
Packit a38265
Packit a38265
	Keyframe seeking
Packit a38265
	* add seek_keyframe() (double-seek) function, using method from thread
Packit a38265
	titled "ogg double seek algorithm" to a11y list 18/11/2008 including
Packit a38265
	Ralph's corrections
Packit a38265
Packit a38265
	* seek to a specific gp (not time)
Packit a38265
Packit a38265
	* switch table to a vector
Packit a38265
	* seek_units (SET, CUR, END)
Packit a38265
Packit a38265
	oggz_get_duration()
Packit a38265
	* add new public API call
Packit a38265
	* subtract file start / presentation time from duration
Packit a38265
Packit a38265
	Large file offsets
Packit a38265
	* introduce seek_offset(), tell_offset() variants using oggz_off_t
Packit a38265
	interface, and deprecate oggz_seek(), oggz_tell()
Packit a38265
Packit a38265
	* s/units/time/ throughout (or more explicitly "milliseconds" or
Packit a38265
	"nanoseconds")
Packit a38265
Packit a38265
	New seek API calls:
Packit a38265
	* next(), prev(), key(): seek to the next, prev or keyframe of this packet
Packit a38265
Packit a38265
Internals
Packit a38265
---------
Packit a38265
Packit a38265
	* replace table implementation, allow NULL insertion
Packit a38265
Packit a38265
	* use debug_printf() (eg. from libshcodecs) instead of #ifdef DEBUG
Packit a38265
	throughout
Packit a38265
Packit a38265
Cleanups
Packit a38265
--------
Packit a38265
	* dirac.c is included in tools/Makefile.am in LIBS. Instead, include it
Packit a38265
	where it is actually used (by oggz_tools.c)
Packit a38265
Packit a38265
API
Packit a38265
---
Packit a38265
	* rename all track-specific functions to oggz_track_*() ?
Packit a38265
Packit a38265
	* add a OGGZ_SORT option (flag w/ OGGZ_WRITE) which queues pages like
Packit a38265
	oggz-merge internally. Use this for oggz-merge (and libannodex ...)
Packit a38265
Packit a38265
	* add low-level public functions to extract packets from a page?
Packit a38265
	(like in fix-eos)
Packit a38265
Packit a38265
Packit a38265
Tools
Packit a38265
===== 
Packit a38265
Packit a38265
	* verbose operation in oggz-sort, oggz-merge etc. should print to stderr,
Packit a38265
	not clobber stdout
Packit a38265
Packit a38265
	* use libexplain in tools, esp. oggz-chop logging errors.
Packit a38265
Packit a38265
oggz-addskel
Packit a38265
------------
Packit a38265
	* new tool to add skeleton (though oggz-chop with no args does this)
Packit a38265
Packit a38265
oggz-chop
Packit a38265
---------
Packit a38265
(See chop-rewrite branch for updates)
Packit a38265
Packit a38265
	Content-Duration
Packit a38265
	* add Content-Duration header
Packit a38265
	* use get_duration() in oggz-chop
Packit a38265
Packit a38265
	Content-Length
Packit a38265
	* if no subview, return length of file
Packit a38265
	* if supports byte range redirect, cache control section and return its
Packit a38265
	length. Print that, then sendfile() the control section.
Packit a38265
	Else, build, write and send the whole subview.
Packit a38265
Packit a38265
	* use seek_keyframe() to find chop point, from which to accumulate headers.
Packit a38265
	Confirm same output as current version.
Packit a38265
Packit a38265
	Error handling
Packit a38265
	* handle failed parse of query: redirect to canonical file rather than
Packit a38265
	producing output (for caching sanity), or reject the request?
Packit a38265
	* strip unknown parameters and redirect to canonical form?
Packit a38265
Packit a38265
	Range requests
Packit a38265
	* handle Range requests
Packit a38265
Packit a38265
	Skeleton
Packit a38265
	* add message header fields for Chopped-By, Encoded-By etc.
Packit a38265
Packit a38265
	Multiple time ranges
Packit a38265
	* support multiple time ranges, convert to byte ranges
Packit a38265
Packit a38265
	* Terminate when all tracks are at EOS, don't spin to end of file.
Packit a38265
Packit a38265
	FastCGI support
Packit a38265
Packit a38265
	sndfile()
Packit a38265
Packit a38265
	TCP_CORK
Packit a38265
Packit a38265
oggz-comment
Packit a38265
------------
Packit a38265
	* add a -p option to add padding, like rareware's oggenc2. This will need
Packit a38265
	to track page boundaries accurately, ie. when inserting tags, see if it
Packit a38265
	can be done inplace and do that if possible.
Packit a38265
Packit a38265
oggz-diff
Packit a38265
---------
Packit a38265
	* is not using mkfifo
Packit a38265
Packit a38265
oggz-dump
Packit a38265
---------
Packit a38265
	* add info to "oggz-dump --help" explaining how to interpret the info.
Packit a38265
	Point to RFC3533 for details. Explain serialno, and explain granulepos for
Packit a38265
	audio, Theora and Dirac -- ie. how to interpret keyframe.
Packit a38265
Packit a38265
oggz-optimize
Packit a38265
-------------
Packit a38265
	* new tool: optimize the flushing on an ogg stream. Give limits on page
Packit a38265
	duration or size.
Packit a38265
Packit a38265
oggz-merge
Packit a38265
----------
Packit a38265
	* Accumulate gp -1 pages rather than writing them out as soon as they
Packit a38265
	are available, so that single-packet continued pages are placed immediately
Packit a38265
	prior to the page their contained packet finishes on.
Packit a38265
	(reported by gmaxwell, 20100318)
Packit a38265
Packit a38265
	* Dirac: take pt,dt into account. See
Packit a38265
	http://lists.xiph.org/pipermail/ogg-dev/2008-November/001264.html
Packit a38265
	* but first, reject Dirac streams
Packit a38265
Packit a38265
oggz-sort
Packit a38265
---------
Packit a38265
	* Accumulate gp -1 pages rather than writing them out as soon as they
Packit a38265
	are available, so that single-packet continued pages are placed immediately
Packit a38265
	prior to the page their contained packet finishes on.
Packit a38265
	(reported by gmaxwell, 20100318)
Packit a38265
Packit a38265
	* Dirac: take pt,dt into account. See
Packit a38265
	http://lists.xiph.org/pipermail/ogg-dev/2008-November/001264.html
Packit a38265
	* but first, reject Dirac streams
Packit a38265
Packit a38265
oggz-validate
Packit a38265
-------------
Packit a38265
	* Throw an error for pages with gp -1 that have a packet finishing on them
Packit a38265
	(requested by derf 20100316, framing spec clearly states that "A special
Packit a38265
	value of '-1' (in two's complement) indicates that no packets finish on this
Packit a38265
	page."
Packit a38265
Packit a38265
	* validate skeleton
Packit a38265