You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.8 KiB
69 lines
1.8 KiB
|
|
|
|
|
|
Frames
|
|
======
|
|
|
|
|
|
Frames are needed for passing data between decoders around.
|
|
A decoder gets an mpeg audio encoded frame as input and
|
|
writes data to an audioFrame (pcm/float)
|
|
|
|
frame
|
|
|
|
|
audioFrame
|
|
/ \
|
|
pcmFrame floatFrame
|
|
|
|
|
|
FrameQueues
|
|
===========
|
|
|
|
FrameQueues are needed for storing some frames. (For example
|
|
you store 100 pre-decoded pcmFrames.)
|
|
A FrameQueue is a queue, simply not more.
|
|
|
|
IOFrameQueues
|
|
=============
|
|
|
|
IOFrameQueues deal with the problem, that you first start
|
|
with an empty FrameQueue (this is a FrameQueue which contains
|
|
prealloceated data, but the data is empty (eg:all pcm samples zero)
|
|
Only after converting an "empty" Frame by a decoder (mp3decoder)
|
|
the frame if "full" (== Frame with data)
|
|
So: IOFrameQueues mark frames with
|
|
|
|
i) empty
|
|
ii) data
|
|
|
|
You can get an empty Frame from the empty-frame-queue and
|
|
then enqueue it in the data-frame-queue.
|
|
After the frame was used (played) we dequeue it from the
|
|
data queue and put them back in the empty queue.
|
|
You can see IOFrameQueues as a ringbuffer.
|
|
(get free space. write to it. read data. mark space as free,....)
|
|
|
|
|
|
FrameQueue
|
|
|
|
|
IOFrameQueue
|
|
/
|
|
audioFrameQueue
|
|
|
|
|
|
AudioFrameQueue
|
|
===============
|
|
|
|
A IOFrameQueue, which allows converting "dataFrames back to continous
|
|
stream".
|
|
What is this?
|
|
Lets say an application wants only 20 byte from a dataFrame which
|
|
contains 3KB of data?
|
|
There must be some mechanism to read less or more data from the
|
|
queue. And the data should be written to a continus memory
|
|
segment.
|
|
AudioFrameQueue deals with this problem.You can read data from
|
|
the queue to a given pointer location.
|
|
|
|
|