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