Difference between revisions of "Hacker Guide/Demux"
Line 1: | Line 1: | ||
== Description == | == Description == | ||
− | The modules of ''''demux'''' capability are designed to handle the different "file" formats. They usually come after the access in the modules chain. | + | The modules of ''''demux'''' capability are designed to handle the different "file" formats. They usually come after the access in the modules chain. |
− | The '''demuxer''' modules are working on the stream that is provided by the core input to them. | + | The '''demuxer''' modules are working on the stream that is provided by the core input to them. |
− | Technically, the demuxers are '''pulling data''' from the stream; data is not pushed by the access to the demux. | + | Technically, the demuxers are '''pulling data''' from the stream; data is not pushed by the access to the demux. |
− | Examples of demuxers are [[ASF|WMV/ASF]], [[Ogg]] or [[Mkv]]. | + | Examples of demuxers are [[ASF|WMV/ASF]], [[Ogg]] or [[Mkv]]. |
== Write an demuxer module == | == Write an demuxer module == | ||
Line 18: | Line 18: | ||
set_category( CAT_INPUT ) | set_category( CAT_INPUT ) | ||
set_subcategory( SUBCAT_INPUT_DEMUX ) | set_subcategory( SUBCAT_INPUT_DEMUX ) | ||
+ | |||
Line 26: | Line 27: | ||
As you can see {{VLCSourceFile|name=include/vlc_demux.h}}, you should define: | As you can see {{VLCSourceFile|name=include/vlc_demux.h}}, you should define: | ||
− | *Demux, as in pf_demux | + | *Demux, as in pf_demux |
− | *Control, as in pf_control | + | *Control, as in pf_control |
− | |||
− | |||
− | |||
+ | After implementing those functions, you should assign them to the corresponding pf_ function.<br> | ||
== Control == | == Control == | ||
Line 41: | Line 40: | ||
Control function is quite easy, the input core will query the module using this function with: | Control function is quite easy, the input core will query the module using this function with: | ||
− | *A pointer to the module structure. | + | *A pointer to the module structure. |
*An '''i_query''' parameter that can be of several type. We will cover afterward the most important on. | *An '''i_query''' parameter that can be of several type. We will cover afterward the most important on. | ||
*A list of arguments, that depends on the '''i_query''' type. | *A list of arguments, that depends on the '''i_query''' type. | ||
− | + | <br> ''Return'': | |
− | ''Return'': | ||
If the query has succeeded, it should return VLC_SUCCESS. Else it should return VLC_EGENERIC (''fail''). | If the query has succeeded, it should return VLC_SUCCESS. Else it should return VLC_EGENERIC (''fail''). | ||
Line 52: | Line 50: | ||
=== Control Query types === | === Control Query types === | ||
− | See {{VLCSourceFile|name=include/vlc_demux.h}} | + | See {{VLCSourceFile|name=include/vlc_demux.h}}<br> |
− | |||
== Demux == | == Demux == | ||
Line 63: | Line 60: | ||
Demux function is quite easy, it pulls data from '''s*''' the pointer to the stream_t. | Demux function is quite easy, it pulls data from '''s*''' the pointer to the stream_t. | ||
+ | <br> ''Return'': | ||
+ | |||
+ | It should return 0 for EOF, something positive when success and something negative when fail to demux.<br> | ||
+ | |||
+ | == Useful primitives == | ||
− | '' | + | When implementing a demux, you will need to work on a '''stream''', but also to create and control '''tracks''' (ES). |
− | + | === Tracks / ES manipulation === | |
+ | Tracks in VLC are named '''ES''', as ''Elementary Streams'' | ||
− | + | You will probably need | |
− | + | *es_out_Add | |
+ | *es_out_Send | ||
+ | *es_out_Control | ||
− | == | + | See {{VLCSourceFile|name=include/vlc_es_out.h}} and {{VLCSourceFile|name=include/vlc_es.h}} |
− | |||
− | + | === Stream manipulation === | |
− | |||
− | |||
− | |||
− | |||
− | + | *stream_Read | |
+ | *stream_Peek | ||
+ | *stream_Control | ||
− | + | See {{VLCSourceFile|name=include/vlc_stream.h}} | |
− | |||
− | |||
− | See {{VLCSourceFile|name=include/vlc_stream.h}} | ||
+ | <br> {{Documentation}}{{Container}} | ||
− | |||
[[Category:Coding]] | [[Category:Coding]] |
Revision as of 00:30, 12 November 2010
Contents
Description
The modules of 'demux' capability are designed to handle the different "file" formats. They usually come after the access in the modules chain.
The demuxer modules are working on the stream that is provided by the core input to them.
Technically, the demuxers are pulling data from the stream; data is not pushed by the access to the demux.
Examples of demuxers are WMV/ASF, Ogg or Mkv.
Write an demuxer module
To write an demuxer module, read the introduction to module writing.
Then, you should specify your module of being of demux type:
set_capability( "demux", 60 ) set_category( CAT_INPUT ) set_subcategory( SUBCAT_INPUT_DEMUX )
Functions to implement
After implementing Open() and Close() functions, you will need to implement a few majors features that will be implemented by your functions.
As you can see include/vlc_demux.h, you should define:
- Demux, as in pf_demux
- Control, as in pf_control
After implementing those functions, you should assign them to the corresponding pf_ function.
Control
Prototype:
int (*pf_control)( access_t *, int i_query, va_list args);
Control function is quite easy, the input core will query the module using this function with:
- A pointer to the module structure.
- An i_query parameter that can be of several type. We will cover afterward the most important on.
- A list of arguments, that depends on the i_query type.
Return:
If the query has succeeded, it should return VLC_SUCCESS. Else it should return VLC_EGENERIC (fail).
Control Query types
Demux
Prototype:
int (*pf_demux) ( demux_t * );
Demux function is quite easy, it pulls data from s* the pointer to the stream_t.
Return:
It should return 0 for EOF, something positive when success and something negative when fail to demux.
Useful primitives
When implementing a demux, you will need to work on a stream, but also to create and control tracks (ES).
Tracks / ES manipulation
Tracks in VLC are named ES, as Elementary Streams
You will probably need
- es_out_Add
- es_out_Send
- es_out_Control
See include/vlc_es_out.h and include/vlc_es.h
Stream manipulation
- stream_Read
- stream_Peek
- stream_Control
Please read the Documentation Editing Guidelines before you edit the documentation
??
|
VLC can decode this container. The module name to use at the command line is unknown. |