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

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * avcodec.h: decoder and encoder using libavcodec
  3.  *****************************************************************************
  4.  * Copyright (C) 2001-2008 the VideoLAN team
  5.  * $Id: 88ba3ebf99cb4444e5d37d995015f3825a878793 $
  6.  *
  7.  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  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. /* VLC <-> avcodec tables */
  24. int GetFfmpegCodec( vlc_fourcc_t i_fourcc, int *pi_cat,
  25.                     int *pi_ffmpeg_codec, const char **ppsz_name );
  26. int GetVlcFourcc( int i_ffmpeg_codec, int *pi_cat,
  27.                   vlc_fourcc_t *pi_fourcc, const char **ppsz_name );
  28. int TestFfmpegChroma( const int i_ffmpeg_id, const vlc_fourcc_t i_vlc_fourcc );
  29. int GetFfmpegChroma( int *i_ffmpeg_chroma, const video_format_t fmt );
  30. int GetVlcChroma( video_format_t *fmt, const int i_ffmpeg_chroma );
  31. picture_t * DecodeVideo    ( decoder_t *, block_t ** );
  32. aout_buffer_t * DecodeAudio( decoder_t *, block_t ** );
  33. /* Video encoder module */
  34. int  OpenEncoder ( vlc_object_t * );
  35. void CloseEncoder( vlc_object_t * );
  36. /* Audio encoder module */
  37. int  OpenAudioEncoder ( vlc_object_t * );
  38. void CloseAudioEncoder( vlc_object_t * );
  39. /* Deinterlace video filter module */
  40. int  OpenDeinterlace( vlc_object_t * );
  41. void CloseDeinterlace( vlc_object_t * );
  42. void InitLibavcodec( vlc_object_t *p_object );
  43. /* Video Decoder */
  44. int InitVideoDec( decoder_t *p_dec, AVCodecContext *p_context,
  45.                   AVCodec *p_codec, int i_codec_id, const char *psz_namecodec );
  46. void EndVideoDec( decoder_t *p_dec );
  47. /* Audio Decoder */
  48. int InitAudioDec( decoder_t *p_dec, AVCodecContext *p_context,
  49.                   AVCodec *p_codec, int i_codec_id, const char *psz_namecodec );
  50. void EndAudioDec( decoder_t *p_dec );
  51. /*****************************************************************************
  52.  * Module descriptor help strings
  53.  *****************************************************************************/
  54. #define DR_TEXT N_("Direct rendering")
  55. /* FIXME Does somebody who knows what it does, explain */
  56. #define DR_LONGTEXT N_("Direct rendering")
  57. #define ERROR_TEXT N_("Error resilience")
  58. #define ERROR_LONGTEXT N_( 
  59.     "Ffmpeg can do error resilience.n" 
  60.     "However, with a buggy encoder (such as the ISO MPEG-4 encoder from M$) " 
  61.     "this can produce a lot of errors.n" 
  62.     "Valid values range from 0 to 4 (0 disables all errors resilience).")
  63. #define BUGS_TEXT N_("Workaround bugs")
  64. #define BUGS_LONGTEXT N_( 
  65.     "Try to fix some bugs:n" 
  66.     "1  autodetectn" 
  67.     "2  old msmpeg4n" 
  68.     "4  xvid interlacedn" 
  69.     "8  ump4 n" 
  70.     "16 no paddingn" 
  71.     "32 ac vlcn" 
  72.     "64 Qpel chroma.n" 
  73.     "This must be the sum of the values. For example, to fix "ac vlc" and " 
  74.     ""ump4", enter 40.")
  75. #define HURRYUP_TEXT N_("Hurry up")
  76. #define HURRYUP_LONGTEXT N_( 
  77.     "The decoder can partially decode or skip frame(s) " 
  78.     "when there is not enough time. It's useful with low CPU power " 
  79.     "but it can produce distorted pictures.")
  80. #define FAST_TEXT N_("Allow speed tricks")
  81. #define FAST_LONGTEXT N_( 
  82.     "Allow non specification compliant speedup tricks. Faster but error-prone.")
  83. #define SKIP_FRAME_TEXT N_("Skip frame (default=0)")
  84. #define SKIP_FRAME_LONGTEXT N_( 
  85.     "Force skipping of frames to speed up decoding " 
  86.     "(-1=None, 0=Default, 1=B-frames, 2=P-frames, 3=B+P frames, 4=all frames)." )
  87. #define SKIP_IDCT_TEXT N_("Skip idct (default=0)")
  88. #define SKIP_IDCT_LONGTEXT N_( 
  89.     "Force skipping of idct to speed up decoding for frame types" 
  90.     "(-1=None, 0=Default, 1=B-frames, 2=P-frames, 3=B+P frames, 4=all frames)." )
  91. #define DEBUG_TEXT N_( "Debug mask" )
  92. #define DEBUG_LONGTEXT N_( "Set ffmpeg debug mask" )
  93. /* TODO: Use a predefined list, with 0,1,2,4,7 */
  94. #define VISMV_TEXT N_( "Visualize motion vectors" )
  95. #define VISMV_LONGTEXT N_( 
  96.     "You can overlay the motion vectors (arrows showing how the images move) "
  97.     "on the image. This value is a mask, based on these values:n"
  98.     "1 - visualize forward predicted MVs of P framesn" 
  99.     "2 - visualize forward predicted MVs of B framesn" 
  100.     "4 - visualize backward predicted MVs of B framesn" 
  101.     "To visualize all vectors, the value should be 7." )
  102. #define LOWRES_TEXT N_( "Low resolution decoding" )
  103. #define LOWRES_LONGTEXT N_( "Only decode a low resolution version of " 
  104.     "the video. This requires less processing power" )
  105. #define SKIPLOOPF_TEXT N_( "Skip the loop filter for H.264 decoding" )
  106. #define SKIPLOOPF_LONGTEXT N_( "Skipping the loop filter (aka deblocking) " 
  107.     "usually has a detrimental effect on quality. However it provides a big " 
  108.     "speedup for high definition streams." )
  109. /*
  110.  * Encoder options
  111.  */
  112. #define ENC_CFG_PREFIX "sout-ffmpeg-"
  113. #define ENC_KEYINT_TEXT N_( "Ratio of key frames" )
  114. #define ENC_KEYINT_LONGTEXT N_( "Number of frames " 
  115.   "that will be coded for one key frame." )
  116. #define ENC_BFRAMES_TEXT N_( "Ratio of B frames" )
  117. #define ENC_BFRAMES_LONGTEXT N_( "Number of " 
  118.   "B frames that will be coded between two reference frames." )
  119. #define ENC_VT_TEXT N_( "Video bitrate tolerance" )
  120. #define ENC_VT_LONGTEXT N_( "Video bitrate tolerance in kbit/s." )
  121. #define ENC_INTERLACE_TEXT N_( "Interlaced encoding" )
  122. #define ENC_INTERLACE_LONGTEXT N_( "Enable dedicated " 
  123.   "algorithms for interlaced frames." )
  124. #define ENC_INTERLACE_ME_TEXT N_( "Interlaced motion estimation" )
  125. #define ENC_INTERLACE_ME_LONGTEXT N_( "Enable interlaced " 
  126.   "motion estimation algorithms. This requires more CPU." )
  127. #define ENC_PRE_ME_TEXT N_( "Pre-motion estimation" )
  128. #define ENC_PRE_ME_LONGTEXT N_( "Enable the pre-motion " 
  129.   "estimation algorithm.")
  130. #define ENC_RC_BUF_TEXT N_( "Rate control buffer size" )
  131. #define ENC_RC_BUF_LONGTEXT N_( "Rate control " 
  132.   "buffer size (in kbytes). A bigger buffer will allow for better rate " 
  133.   "control, but will cause a delay in the stream." )
  134. #define ENC_RC_BUF_AGGR_TEXT N_( "Rate control buffer aggressiveness" )
  135. #define ENC_RC_BUF_AGGR_LONGTEXT N_( "Rate control "
  136.   "buffer aggressiveness." )
  137. #define ENC_IQUANT_FACTOR_TEXT N_( "I quantization factor" )
  138. #define ENC_IQUANT_FACTOR_LONGTEXT N_(  
  139.   "Quantization factor of I frames, compared with P frames (for instance " 
  140.   "1.0 => same qscale for I and P frames)." )
  141. #define ENC_NOISE_RED_TEXT N_( "Noise reduction" )
  142. #define ENC_NOISE_RED_LONGTEXT N_( "Enable a simple noise " 
  143.   "reduction algorithm to lower the encoding length and bitrate, at the " 
  144.   "expense of lower quality frames." )
  145. #define ENC_MPEG4_MATRIX_TEXT N_( "MPEG4 quantization matrix" )
  146. #define ENC_MPEG4_MATRIX_LONGTEXT N_( "Use the MPEG4 " 
  147.   "quantization matrix for MPEG2 encoding. This generally yields a " 
  148.   "better looking picture, while still retaining the compatibility with " 
  149.   "standard MPEG2 decoders.")
  150. #define ENC_HQ_TEXT N_( "Quality level" )
  151. #define ENC_HQ_LONGTEXT N_( "Quality level " 
  152.   "for the encoding of motions vectors (this can slow down the encoding " 
  153.   "very much)." )
  154. #define ENC_HURRYUP_TEXT N_( "Hurry up" )
  155. #define ENC_HURRYUP_LONGTEXT N_( "The encoder " 
  156.   "can make on-the-fly quality tradeoffs if your CPU can't keep up with " 
  157.   "the encoding rate. It will disable trellis quantization, then the rate " 
  158.   "distortion of motion vectors (hq), and raise the noise reduction " 
  159.   "threshold to ease the encoder's task." )
  160. #define ENC_QMIN_TEXT N_( "Minimum video quantizer scale" )
  161. #define ENC_QMIN_LONGTEXT N_( "Minimum video " 
  162.   "quantizer scale." )
  163. #define ENC_QMAX_TEXT N_( "Maximum video quantizer scale" )
  164. #define ENC_QMAX_LONGTEXT N_( "Maximum video " 
  165.   "quantizer scale." )
  166. #define ENC_TRELLIS_TEXT N_( "Trellis quantization" )
  167. #define ENC_TRELLIS_LONGTEXT N_( "Enable trellis " 
  168.   "quantization (rate distortion for block coefficients)." )
  169. #define ENC_QSCALE_TEXT N_( "Fixed quantizer scale" )
  170. #define ENC_QSCALE_LONGTEXT N_( "A fixed video " 
  171.   "quantizer scale for VBR encoding (accepted values: 0.01 to 255.0)." )
  172. #define ENC_STRICT_TEXT N_( "Strict standard compliance" )
  173. #define ENC_STRICT_LONGTEXT N_( "Force a strict standard " 
  174.   "compliance when encoding (accepted values: -1, 0, 1)." )
  175. #define ENC_LUMI_MASKING_TEXT N_( "Luminance masking" )
  176. #define ENC_LUMI_MASKING_LONGTEXT N_( "Raise the quantizer for " 
  177.   "very bright macroblocks (default: 0.0)." )
  178. #define ENC_DARK_MASKING_TEXT N_( "Darkness masking" )
  179. #define ENC_DARK_MASKING_LONGTEXT N_( "Raise the quantizer for " 
  180.   "very dark macroblocks (default: 0.0)." )
  181. #define ENC_P_MASKING_TEXT N_( "Motion masking" )
  182. #define ENC_P_MASKING_LONGTEXT N_( "Raise the quantizer for " 
  183.   "macroblocks with a high temporal complexity (default: 0.0)." )
  184. #define ENC_BORDER_MASKING_TEXT N_( "Border masking" )
  185. #define ENC_BORDER_MASKING_LONGTEXT N_( "Raise the quantizer " 
  186.   "for macroblocks at the border of the frame (default: 0.0)." )
  187. #define ENC_LUMA_ELIM_TEXT N_( "Luminance elimination" )
  188. #define ENC_LUMA_ELIM_LONGTEXT N_( "Eliminates luminance blocks when " 
  189.   "the PSNR isn't much changed (default: 0.0). The H264 specification " 
  190.   "recommends -4." )
  191. #define ENC_CHROMA_ELIM_TEXT N_( "Chrominance elimination" )
  192. #define ENC_CHROMA_ELIM_LONGTEXT N_( "Eliminates chrominance blocks when " 
  193.   "the PSNR isn't much changed (default: 0.0). The H264 specification " 
  194.   "recommends 7." )
  195. #if LIBAVCODEC_VERSION_INT >= ((51<<16)+(40<<8)+4)
  196. #define ENC_PROFILE_TEXT N_( "Specify AAC audio profile to use" )
  197. #define ENC_PROFILE_LONGTEXT N_( "Specify the AAC audio profile to use " 
  198.    "for encoding the audio bitstream. It takes the following options: " 
  199.    "main, low, ssr (not supported) and ltp (default: main)" )
  200. #endif
  201. #define FFMPEG_COMMON_MEMBERS   
  202.     int i_cat;                  
  203.     int i_codec_id;             
  204.     const char *psz_namecodec;  
  205.     AVCodecContext *p_context;  
  206.     AVCodec        *p_codec;    
  207.     bool b_delayed_open;
  208. #ifndef AV_VERSION_INT
  209. #   define AV_VERSION_INT(a, b, c) ((a)<<16 | (b)<<8 | (c))
  210. #endif