* David Schleef (d...@entropywave.com) wrote:
> After some thought...
...
> Ideally, I'd like to see:
> 
>   - SchroDecoder that works on a picture basis.
> 
>   - SchroParser that parses a bitstream into pictures
> 
>   - automatic glue code in SchroDecoder that allows you to use the
>     decoder in bitstream mode

Ok, i don't disagree with any of that.  how about:

main (raw) api:

 - This api allows for synchronous parsing.
   Ie, able to determine the parse state on a picture basis
   at the input to the decoder

 - The state machine emits EOS when a sequence ends.

 - There is no auto creation of new decoder instances

decoder_push():
  - called with a single aligned data unit
  - will return the parsing state
  - ie, no real change

decoder_push_end_of_sequence():
  - sets the internal EOS state.

decoder_push_end_of_stream():
  - depricate. (calls decoder_push_end_of_sequence).

decoder_push_ready():
  - returns if the system state is able to accomodate a new picture data unit
  - no real change

decoder_wait():
  - no real change from now, ie iterates the decoder, returns next state

decoder_instance_new():
  - creates a new decoder instance.
    all pushing and state operations will work on
    the new instance.

decoder_instance_delete():
  - the decoder maintains a list of instances.
    delete the oldest.
    Rationale: when wait() retuns EOS, you need to kick the decoder onto
               the next sequence.

-----

the autoparse api:

 - This api allows you to throw unaligned data for asynchronous parsing
   No parsing state will be returned at input to the decoder.

decoder_autoparse_push():
 - push a buffer of data into the decoder.
   There may be an associated tag with the buffer.
 - every time an EOS is pushed, a new instance is created.

decoder_autoparse_push_end_of_sequence():
 - sets the internal EOS state on the first decoder instance
 - creates a new instance.

decoder_autoparse_wait():
 - iterates the decoder:
 - EOS is never returned -- it causes the head instance to be deleted


my current autoparse work is able to return data units if you call it
directly with a parse state object.

-----
common stuff:

set_picture_order():
 - sets the internal state to use a reorder buffer size = 0+1.
 - pictures returned in stream order.
 - this is per decoder not instance.
 - must be called just after a decoder_reset.
   (results are otherwise undefined).

decoder_reset():
 - resets all internal state, destroys all instances.

bool get_picture_number_full(int *picture_number):
 - returns the next picture number if possible in *picture_number
 - returns TRUE on success, FALSE otherwise.
   (FALSE if there is no valid picture yet).

decoder_need_output_picture():
 - returns if the decoder is lacking an output picture for any picture
   currently in flight.

decoder_add_output_picture():
 - adds an output picture to the last instance to be created.

decoder_new/free()
 - as before.

------------------------------------------------------------------------------
This SF.net email is sponsored by:
SourcForge Community
SourceForge wants to tell your story.
http://p.sf.net/sfu/sf-spreadtheword
_______________________________________________
Schrodinger-devel mailing list
Schrodinger-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/schrodinger-devel

Reply via email to