home *** CD-ROM | disk | FTP | other *** search
/ mail.altrad.com / 2015.02.mail.altrad.com.tar / mail.altrad.com / TEST / vlc-2-0-5-win32.exe / sdk / include / vlc / plugins / vlc_codec.h < prev    next >
C/C++ Source or Header  |  2012-12-12  |  8KB  |  247 lines

  1. /*****************************************************************************
  2.  * vlc_codec.h: Definition of the decoder and encoder structures
  3.  *****************************************************************************
  4.  * Copyright (C) 1999-2003 VLC authors and VideoLAN
  5.  * $Id: beac8fd83d01576098e0fde46deb093ef75ba63d $
  6.  *
  7.  * Authors: Gildas Bazin <gbazin@netcourrier.com>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify it
  10.  * under the terms of the GNU Lesser General Public License as published by
  11.  * the Free Software Foundation; either version 2.1 of the License, or
  12.  * (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17.  * GNU Lesser General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU Lesser General Public License
  20.  * along with this program; if not, write to the Free Software Foundation,
  21.  * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  22.  *****************************************************************************/
  23.  
  24. #ifndef VLC_CODEC_H
  25. #define VLC_CODEC_H 1
  26.  
  27. #include <vlc_block.h>
  28. #include <vlc_es.h>
  29. #include <vlc_picture.h>
  30. #include <vlc_subpicture.h>
  31.  
  32. /**
  33.  * \file
  34.  * This file defines the structure and types used by decoders and encoders
  35.  */
  36.  
  37. typedef struct decoder_owner_sys_t decoder_owner_sys_t;
  38.  
  39. /**
  40.  * \defgroup decoder Decoder
  41.  *
  42.  * The structure describing a decoder
  43.  *
  44.  * @{
  45.  */
  46.  
  47. /*
  48.  * BIG FAT WARNING : the code relies in the first 4 members of filter_t
  49.  * and decoder_t to be the same, so if you have anything to add, do it
  50.  * at the end of the structure.
  51.  */
  52. struct decoder_t
  53. {
  54.     VLC_COMMON_MEMBERS
  55.  
  56.     /* Module properties */
  57.     module_t *          p_module;
  58.     decoder_sys_t *     p_sys;
  59.  
  60.     /* Input format ie from demuxer (XXX: a lot of field could be invalid) */
  61.     es_format_t         fmt_in;
  62.  
  63.     /* Output format of decoder/packetizer */
  64.     es_format_t         fmt_out;
  65.  
  66.     /* Some decoders only accept packetized data (ie. not truncated) */
  67.     bool                b_need_packetized;
  68.  
  69.     /* Tell the decoder if it is allowed to drop frames */
  70.     bool                b_pace_control;
  71.  
  72.     /* */
  73.     picture_t *         ( * pf_decode_video )( decoder_t *, block_t ** );
  74.     aout_buffer_t *     ( * pf_decode_audio )( decoder_t *, block_t ** );
  75.     subpicture_t *      ( * pf_decode_sub)   ( decoder_t *, block_t ** );
  76.     block_t *           ( * pf_packetize )   ( decoder_t *, block_t ** );
  77.  
  78.     /* Closed Caption (CEA 608/708) extraction.
  79.      * If set, it *may* be called after pf_decode_video/pf_packetize
  80.      * returned data. It should return CC for the pictures returned by the
  81.      * last pf_packetize/pf_decode_video call only,
  82.      * pb_present will be used to known which cc channel are present (but
  83.      * globaly, not necessary for the current packet */
  84.     block_t *           ( * pf_get_cc )      ( decoder_t *, bool pb_present[4] );
  85.  
  86.     /* Meta data at codec level
  87.      *  The decoder owner set it back to NULL once it has retreived what it needs.
  88.      *  The decoder owner is responsible of its release except when you overwrite it.
  89.      */
  90.     vlc_meta_t          *p_description;
  91.  
  92.     /*
  93.      * Owner fields
  94.      * XXX You MUST not use them directly.
  95.      */
  96.  
  97.     /* Video output callbacks
  98.      * XXX use decoder_NewPicture/decoder_DeletePicture
  99.      * and decoder_LinkPicture/decoder_UnlinkPicture */
  100.     picture_t      *(*pf_vout_buffer_new)( decoder_t * );
  101.     void            (*pf_vout_buffer_del)( decoder_t *, picture_t * );
  102.     void            (*pf_picture_link)   ( decoder_t *, picture_t * );
  103.     void            (*pf_picture_unlink) ( decoder_t *, picture_t * );
  104.  
  105.     /**
  106.      * Number of extra (ie in addition to the DPB) picture buffers
  107.      * needed for decoding.
  108.      */
  109.     int             i_extra_picture_buffers;
  110.  
  111.     /* Audio output callbacks
  112.      * XXX use decoder_NewAudioBuffer/decoder_DeleteAudioBuffer */
  113.     aout_buffer_t  *(*pf_aout_buffer_new)( decoder_t *, int );
  114.  
  115.     /* SPU output callbacks
  116.      * XXX use decoder_NewSubpicture and decoder_DeleteSubpicture */
  117.     subpicture_t   *(*pf_spu_buffer_new)( decoder_t *, const subpicture_updater_t * );
  118.     void            (*pf_spu_buffer_del)( decoder_t *, subpicture_t * );
  119.  
  120.     /* Input attachments
  121.      * XXX use decoder_GetInputAttachments */
  122.     int             (*pf_get_attachments)( decoder_t *p_dec, input_attachment_t ***ppp_attachment, int *pi_attachment );
  123.  
  124.     /* Display date
  125.      * XXX use decoder_GetDisplayDate */
  126.     mtime_t         (*pf_get_display_date)( decoder_t *, mtime_t );
  127.  
  128.     /* Display rate
  129.      * XXX use decoder_GetDisplayRate */
  130.     int             (*pf_get_display_rate)( decoder_t * );
  131.  
  132.     /* Private structure for the owner of the decoder */
  133.     decoder_owner_sys_t *p_owner;
  134.  
  135.     bool                b_error;
  136. };
  137.  
  138. /**
  139.  * @}
  140.  */
  141.  
  142. /**
  143.  * \defgroup encoder Encoder
  144.  *
  145.  * The structure describing a Encoder
  146.  *
  147.  * @{
  148.  */
  149.  
  150. struct encoder_t
  151. {
  152.     VLC_COMMON_MEMBERS
  153.  
  154.     /* Module properties */
  155.     module_t *          p_module;
  156.     encoder_sys_t *     p_sys;
  157.  
  158.     /* Properties of the input data fed to the encoder */
  159.     es_format_t         fmt_in;
  160.  
  161.     /* Properties of the output of the encoder */
  162.     es_format_t         fmt_out;
  163.  
  164.     block_t *           ( * pf_encode_video )( encoder_t *, picture_t * );
  165.     block_t *           ( * pf_encode_audio )( encoder_t *, aout_buffer_t * );
  166.     block_t *           ( * pf_encode_sub )( encoder_t *, subpicture_t * );
  167.  
  168.     /* Common encoder options */
  169.     int i_threads;               /* Number of threads to use during encoding */
  170.     int i_iframes;               /* One I frame per i_iframes */
  171.     int i_bframes;               /* One B frame per i_bframes */
  172.     int i_tolerance;             /* Bitrate tolerance */
  173.  
  174.     /* Encoder config */
  175.     config_chain_t *p_cfg;
  176. };
  177.  
  178. /**
  179.  * @}
  180.  */
  181.  
  182.  
  183. /**
  184.  * This function will return a new picture usable by a decoder as an output
  185.  * buffer. You have to release it using decoder_DeletePicture or by returning
  186.  * it to the caller as a pf_decode_video return value.
  187.  */
  188. VLC_API picture_t * decoder_NewPicture( decoder_t * ) VLC_USED;
  189.  
  190. /**
  191.  * This function will release a picture create by decoder_NewPicture.
  192.  */
  193. VLC_API void decoder_DeletePicture( decoder_t *, picture_t *p_picture );
  194.  
  195. /**
  196.  * This function will increase the picture reference count.
  197.  * (picture_Hold is not usable.)
  198.  */
  199. VLC_API void decoder_LinkPicture( decoder_t *, picture_t * );
  200.  
  201. /**
  202.  * This function will decrease the picture reference count.
  203.  * (picture_Release is not usable.)
  204.  */
  205. VLC_API void decoder_UnlinkPicture( decoder_t *, picture_t * );
  206.  
  207. /**
  208.  * This function will return a new audio buffer usable by a decoder as an
  209.  * output buffer. You have to release it using decoder_DeleteAudioBuffer
  210.  * or by returning it to the caller as a pf_decode_audio return value.
  211.  */
  212. VLC_API aout_buffer_t * decoder_NewAudioBuffer( decoder_t *, int i_size ) VLC_USED;
  213.  
  214. /**
  215.  * This function will return a new subpicture usable by a decoder as an output
  216.  * buffer. You have to release it using decoder_DeleteSubpicture or by returning
  217.  * it to the caller as a pf_decode_sub return value.
  218.  */
  219. VLC_API subpicture_t * decoder_NewSubpicture( decoder_t *, const subpicture_updater_t * ) VLC_USED;
  220.  
  221. /**
  222.  * This function will release a subpicture created by decoder_NewSubicture.
  223.  */
  224. VLC_API void decoder_DeleteSubpicture( decoder_t *, subpicture_t *p_subpicture );
  225.  
  226. /**
  227.  * This function gives all input attachments at once.
  228.  *
  229.  * You MUST release the returned values
  230.  */
  231. VLC_API int decoder_GetInputAttachments( decoder_t *, input_attachment_t ***ppp_attachment, int *pi_attachment );
  232.  
  233. /**
  234.  * This function converts a decoder timestamp into a display date comparable
  235.  * to mdate().
  236.  * You MUST use it *only* for gathering statistics about speed.
  237.  */
  238. VLC_API mtime_t decoder_GetDisplayDate( decoder_t *, mtime_t ) VLC_USED;
  239.  
  240. /**
  241.  * This function returns the current input rate.
  242.  * You MUST use it *only* for gathering statistics about speed.
  243.  */
  244. VLC_API int decoder_GetDisplayRate( decoder_t * ) VLC_USED;
  245.  
  246. #endif /* _VLC_CODEC_H */
  247.