aboutsummaryrefslogtreecommitdiff
path: root/lib/libmpeg2/doc/libmpeg2.txt
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libmpeg2/doc/libmpeg2.txt')
-rw-r--r--lib/libmpeg2/doc/libmpeg2.txt266
1 files changed, 0 insertions, 266 deletions
diff --git a/lib/libmpeg2/doc/libmpeg2.txt b/lib/libmpeg2/doc/libmpeg2.txt
deleted file mode 100644
index de380fbcee..0000000000
--- a/lib/libmpeg2/doc/libmpeg2.txt
+++ /dev/null
@@ -1,266 +0,0 @@
-The documentation is currently a mess. Sorry about that, hope to write
-something better for the 0.4.1 release.
-
-
-For people migrating code from 0.3.x to 0.4.0, the biggest thing to
-note is that mpeg2_parse now returns a new state STATE_BUFFER when it
-needs more data. Version 0.3.x used to return a -1 constant for this -
-please update your code to replace that -1 with STATE_BUFFER. Otherwise
-0.3.x code should mostly work with 0.4.0, hopefully.
-
-
-For people new to libmpeg2, it's best to start by looking at
-doc/sample1 and doc/sample2, which decode an mpeg2 elementary stream
-and output their individual pictures as yuv frames (sample1) or rgb
-frames (sample2). The main loop calls mpeg2_parse() which does some
-work and then returns a state indicating what it just did -
-STATE_BUFFER if it reached the end of the buffer and it needs a new
-one, STATE_SEQUENCE if it just parsed a sequence header, STATE_PICTURE
-if it just parsed a picture header, STATE_SLICE if it just decoded the
-slice information associated with a picture (now is a good time to
-save that decoded picture), etc...
-
-
-To make more complex buffer management (basically allocate your own
-buffers instead of letting the lib do it for you), look at
-sample3/sample4 (giving your buffers to the lib at init time but
-letting the lib chose a buffer for each picture) or sample5/sample6
-(giving a new buffer to the lib for each picture).
-
-
-Color conversion has been moved to a new helper library, libmpeg2convert.
-The details of the mpeg2_convert_t type might change in the future,
-but what won't change is that you should just take one of the
-mpeg2_convert_t symbols exported from libmpeg2convert, and pass it to
-the mpeg2_convert() function, and voila, you now get your output
-buffers in the desired format. For example if you want rgb 32-bit
-samples, you just call mpeg2_convert (mpeg2dec, mpeg2convert_rgb32, NULL)
-and that's it.
-
-
-There is a new mpeg2_stride function too. By default libmpeg2 choses
-the smallest stride that will work for a given picture size, if you
-want a larger stride you can set it (after the sequence header has
-been decoded) by calling mpeg2_stride.
-
-
-There is also a new function mpeg2_reset which should hopefully do the
-right thing after skipping to a new position in the mpeg2 stream. If
-full_reset is zero the lib starts decoding at the next picture, if
-it's one the lib starts looking for the next sequence header.
-
-
-The mpeg2_pts function is gone, because people complained about not
-being to pass a 33-bit PTS thru it. So instead it's been replaced with
-mpeg2_tag_picture(), which is identical except that it allows you to
-pass two 32-bit values. You can use them to form a combined 64-bit
-time stamp, or two 32-bit PTS/DTS stamps, or whatever you please -
-libmpeg2 never uses these values, it just passes them around, hence
-the name "tag". The semantics are what you want for a PTS function
-though, i.e. the tags get associated to the next picture that starts
-after the tag was set, where the start of a picture is defined as the
-first byte of its picture start code.
-
-
-That's all I can think of - sorry for the lack of proper
-documentation, I'll try to help this before the 0.4.1 release.
-
-
-
-
-
-
-I - simplest example
-
-explanation of sequence_t, picture_t fields
-
-II - w/ color conversion
-
-III - pts
-
-IV - app that preallocates buffers
-
-V - app that does its own buffer management
-
-
-
-
-
-Quick-and-dirty documentation for libmpeg2 0.3.1
-Kees Cook <mpeg2@outflux.net>
-2003-04-25
-
-
-
-Basic Usage Pseudocode
-----------------------
-
- if (you need a certain acceleration)
- mpeg2_accel(desired_acceleration);
- handle=mpeg2_init();
- info=mpeg2_info(handle);
- while (data_available) {
- state=mpeg2_parse(handle);
- switch (state) {
- case STATE_BUFFER:
- read some data
- mpeg2_buffer(handle,data_start,data_end);
- break;
- case STATE_SLICE:
- case STATE_END:
- display the frame described in "info"
- break;
- case STATE_INVALID:
- abort
- break;
- }
- }
- mpeg2_close(handle);
-
-
-Basic Usage Explained
----------------------
-
-libmpeg2 uses an opaque pointer which is the active "handle" to the mpeg2
-decoder. To get this handle (of type "mpeg2dec_t"), call "mpeg2_init()".
-
-Data is loaded into the decoder with "mpeg2_buffer" whenever
-"mpeg2_parse" is ready for more data (return state is STATE_BUFFER).
-Pictures are available whenever "mpeg2_parse"'s return state is
-STATE_SLICE or STATE_END.
-
- This means the *previous* picture is available, right? In other
- words, when STATE_SLICE is seen, that means that the *previous*
- picture is all done. Same thing for STATE_END. So if you want to
- see one frame at a time (without starting to fill the mpeg2 decoder
- with more data not from that picture) we'd have to inject something
- to make it report STATE_END?
-
-
-
-Basic Function Reference
-------------------------
-
-mpeg2dec_t * mpeg2_init()
- Initializes a memory space for mpeg2 decoding. This memory must
- be freed with a call to "mpeg2_close" when finished.
-
- Returns NULL on error (when system is out of memory)
-
- - Doesn't check if chunk_buffer is NULL?
-
-
-uint32_t mpeg2_accel(uint32_t accel)
- Sets the CPU acceleration type to be used for all decoders for the
- life of the program. YOU CAN SAFELY IGNORE THIS FUNCTION.
-
- By default, a call to mpeg2_accel is not needed, since the best
- available acceleration will be auto-detected. To override the
- default, this function must be called before any calls to
- "mpeg2_init". See mpeg2.h for a list of the available accelerations
- (prefix "MPEG2_ACCEL_...").
-
- After a call to mpeg2_init, mpeg2_accel can be called to find out
- what the selected acceleration list is. Once the accelerations have
- been selected (through explicitly requesting one, or through
- auto-detection) the "accel" parameter will be ignored.
-
- Returns selected acceleration list. If the requested acceleration
- is not available, the function will auto-detect the best available
- accelerations and return that instead.
-
- - Cannot be undone! This should maybe be a part of
- the mpeg2 structure somehow?
-
-
-const mpeg2_info_t * mpeg2_info(mpeg2dec_t * handle)
- Gets structure for the mpeg2 decoder's "mpeg2_info_t" structure.
- This will let you do something (like display!) the decoded pictures
- with the mpeg2_info_t structure members:
-
- display_fbuf:
- memory area containing the rendered picture information.
- If this is NULL, no frame is available.
-
- display_fbuf->buf:
- YUV coded pixel data for the picture.
-
- display_picture:
- data structure describing the current picture.
- see mpeg2.h for more details.
-
- sequence:
- data structure describing the entire current picture sequence:
-
- width: picture width in pixels.
- height: picture height in pixels.
-
- see mpeg2.h for more details.
-
- user_data:
- handy place to attach things needed by your program. Must
- be detached before calling "mpeg2_close".
-
- there are more...check mpeg2.h
-
-
-
-
-int mpeg2_parse(mpeg2dec_t * handle)
- Parses available data and returns state of the decoder:
-
- STATE_BUFFER:
- ready for more data. decoder has finished reading
- the buffer sent with mpeg2_buffer.
-
- STATE_SEQUENCE:
- A sequence header has been found.
-
- STATE_SEQUENCE_REPEATED:
- A repeated sequence header has been found and processed.
-
- STATE_GOP:
- A GOP has been found.
-
- STATE_PICTURE:
- A picture header has been found.
- STATE_PICTURE_2ND:
- A second field picture header has been found.
-
- STATE_SLICE_1ST:
- First slice of a multi-field picture has been found.
- STATE_SLICE:
- Final slice (multi-field or not) of a picture has been found.
- Good time to update the display.
- STATE_END:
- End of the stream? Good time to update the display.
-
- STATE_INVALID:
- Filled the internal buffers without finding any start codes.
- Cannot continue: mpeg2_close must be called next.
-
-
-void mpeg2_buffer(mpeg2dec_t * handle, uint8_t * start, uint8_t * end)
- Makes data between "start" and "end" available for processing.
- If a subsequent call to "mpeg2_parse" doesn't find anything useful
- (returns STATE_BUFFER) then this data will be copied into the mpeg2
- decoder's private data area. This process repeats until something
- useful is found with mpeg2_parse (returns something other than
- STATE_BUFFER), or the buffer fills up.
-
-
-void mpeg2_close(mpeg2dec_t * handle)
- Cleans up the memory associated with the mpeg2 decoder handle.
-
- - does not check for NULL frees! (via mpeg2_free)
-
-
-Advanced Function Reference
----------------------------
-
-mpeg2_convert
-mpeg2_set_buf
-mpeg2_custom_fbuf
-mpeg2_init_fbuf
-mpeg2_slice
-