vlc_codec.h
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:8k
源码类别:

midi

开发平台:

Unix_Linux

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