text: 
  /*
   * Copyright (C) Roman Arutyunyan
   */
  
  
  #ifndef _NGX_RTMP_CODEC_H_INCLUDED_
  #define _NGX_RTMP_CODEC_H_INCLUDED_
  
  
  #include <ngx_config.h>
  #include <ngx_core.h>
  #include "ngx_rtmp.h"
  
  
  /* Audio codecs */
  enum {
      /* Uncompressed codec id is actually 0,
       * but we use another value for consistency */
      NGX_RTMP_AUDIO_UNCOMPRESSED     = 16,
      NGX_RTMP_AUDIO_ADPCM            = 1,
      NGX_RTMP_AUDIO_MP3              = 2,
      NGX_RTMP_AUDIO_LINEAR_LE        = 3,
      NGX_RTMP_AUDIO_NELLY16          = 4,
      NGX_RTMP_AUDIO_NELLY8           = 5,
      NGX_RTMP_AUDIO_NELLY            = 6,
      NGX_RTMP_AUDIO_G711A            = 7,
      NGX_RTMP_AUDIO_G711U            = 8,
      NGX_RTMP_AUDIO_AAC              = 10,
      NGX_RTMP_AUDIO_SPEEX            = 11,
      NGX_RTMP_AUDIO_MP3_8            = 14,
      NGX_RTMP_AUDIO_DEVSPEC          = 15,
  };
  
  
  /* Video codecs */
  enum {
      NGX_RTMP_VIDEO_JPEG             = 1,
      NGX_RTMP_VIDEO_SORENSON_H263    = 2,
      NGX_RTMP_VIDEO_SCREEN           = 3,
      NGX_RTMP_VIDEO_ON2_VP6          = 4,
      NGX_RTMP_VIDEO_ON2_VP6_ALPHA    = 5,
      NGX_RTMP_VIDEO_SCREEN2          = 6,
      NGX_RTMP_VIDEO_H264             = 7
  };
  
  
  u_char * ngx_rtmp_get_audio_codec_name(ngx_uint_t id);
  u_char * ngx_rtmp_get_video_codec_name(ngx_uint_t id);
  ngx_int_t ngx_rtmp_codec_parse_mp3_frame_header(ngx_rtmp_session_t *s,
         ngx_chain_t *in);
  
  typedef struct {
      ngx_uint_t                  width;
      ngx_uint_t                  height;
      ngx_uint_t                  duration;
      ngx_uint_t                  frame_rate;
      double                      video_data_rate;
      ngx_uint_t                  video_codec_id;
      double                      audio_data_rate;
      ngx_uint_t                  audio_codec_id;
      ngx_uint_t                  aac_profile;
      ngx_uint_t                  aac_chan_conf;
      ngx_uint_t                  aac_sbr;
      ngx_uint_t                  aac_ps;
      ngx_uint_t                  avc_profile;
      ngx_uint_t                  avc_compat;
      ngx_uint_t                  avc_level;
      ngx_uint_t                  avc_nal_bytes;
      ngx_uint_t                  avc_ref_frames;
      ngx_uint_t                  sample_rate;    /* 5512, 11025, 22050, 44100 */
      ngx_uint_t                  sample_size;    /* 1=8bit, 2=16bit */
      ngx_uint_t                  audio_channels; /* 1, 2 */
      u_char                      profile[32];
      u_char                      level[32];
  
      ngx_chain_t                *avc_header;
      ngx_chain_t                *aac_header;
  	
      ngx_chain_t                *received_meta;
      ngx_chain_t                *meta;
      ngx_uint_t                  meta_version;
  } ngx_rtmp_codec_ctx_t;
  
  
  extern ngx_module_t  ngx_rtmp_codec_module;
  
  
  #endif /* _NGX_RTMP_LIVE_H_INCLUDED_ */
  