[vorbis-dev] packet rearranging questions

Michael Smith msmith at xiph.org
Tue Oct 28 16:27:34 PST 2003



On Tuesday 28 October 2003 18:49, Joshua Haberman wrote:
> Hello again.  If you recall, I am the guy working on enabling Audacity
> to losslessly rearrange Ogg Vorbis files for my senior thesis.  I have
> more or less completed the required modifications to Audacity to support
> this.  You can read more about the work this entailed by reading my
> journal:
>
> http://www.reverberate.org/computers/thesis/journal
>
> Now my attention moves to the Ogg Vorbis code necessary to do all this
> splicing.  From reading the Ogg documentation and the vcut source I have
> a good understanding of the Ogg format and how I will go about
> rearranging Vorbis packets.  However I have a few questions I would like
> to clarify:
>
> 1.  how exactly will the overlap/add nature of Vorbis packets affect me
> as I attempt to rearrange them?   Is it correct to say that for any
> Vorbis packet I take from an existing stream (other than the first
> packet) I must also take the packet preceding it?

Yes. The reason that the first packet is an exception here is that it produces 
no output audio (because the overlap is _always_ required).

>
> 2.  When I am grabbing an extra preceding packet as described above,
> should I set the granulepos of this preceding packet to 0 so that this
> packet itself does not produce any sample data?  Will that confuse the
> decoder if this is in the middle of a stream?

You must always have monotonically increasing granulepos values (with the 
exception of -1 indicating no packet ending on that page). So no, you 
shouldn't just set a granulepos to zero, except at start-of-stream.

>
> 3.  I notice that you can get decoders to discard some of the samples
> from the end of a packet by subtracting from the granulepos the number
> of samples you want discarded.  A similar way to do this for discarding
> samples from the beginning of a packet (used by vcut) is to set the
> granulepos to -x, where x is the number of samples you want discarded
> from the beginning.  But will this work in the middle of a stream, where
> the granulepos should reflect the total sample offset of the stream?

No, a negative granulepos (other than -1) is undefined. libvorbis treats all 
negative granulepos values as equivalent to -1, though, I think. 

This only works at the beginning and end of stream, never in the middle. See 
the spec for exact details on how to do this, but in summary: you give a 
'short' (less than it would naturally be, greater than zero) granulepos for 
the final page.

>
> 4.  Is it just a special case that it is not possible to discard one
> sample from the beginning of a block using this method, since -1 implies
> that no packets finish in this block?

No, see above.

Mike

--- >8 ----
List archives:  http://www.xiph.org/archives/
Ogg project homepage: http://www.xiph.org/ogg/
To unsubscribe from this list, send a message to 'vorbis-dev-request at xiph.org'
containing only the word 'unsubscribe' in the body.  No subject is needed.
Unsubscribe messages sent to the list will be ignored/filtered.



More information about the Vorbis-dev mailing list