public void bufferPacket ( OggPacket packet , long granulePosition ) { if ( closed ) { throw new IllegalStateException ( "Can't buffer packets on a closed stream!" ) ; } if ( ! doneFirstPacket ) { packet . setIsBOS ( ) ; doneFirstPacket = true ; } int size = packet . getData ( ) . length ; boolean emptyPacket = ( size == 0 ) ; // Add to pages in turn OggPage page = getCurrentPage ( false ) ; int pos = 0 ; while ( pos < size || emptyPacket ) { pos = page . addPacket ( packet , pos ) ; if ( pos < size ) { page = getCurrentPage ( true ) ; page . setIsContinuation ( ) ; } page . setGranulePosition ( granulePosition ) ; emptyPacket = false ; } currentGranulePosition = granulePosition ; packet . setParent ( page ) ; }
Buffers the given packet up ready for writing to the stream but doesn t write it to disk yet . The granule position is updated on the page . If writing the packet requires a new page then the updated granule position only applies to the new page