cabac.h
上传用户:hjq518
上传日期:2021-12-09
资源大小:5084k
文件大小:3k
源码类别:

Audio

开发平台:

Visual C++

  1. /*****************************************************************************
  2.  * cabac.h: h264 encoder library
  3.  *****************************************************************************
  4.  * Copyright (C) 2003 Laurent Aimar
  5.  * $Id: cabac.h,v 1.1 2004/06/03 19:27:06 fenrir Exp $
  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., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  22.  *****************************************************************************/
  23. #ifndef _CABAC_H
  24. #define _CABAC_H 1
  25. typedef struct
  26. {
  27.     /* context */
  28.     /* #436-459 are for interlacing, so are omitted for now */
  29.     uint8_t state[436];
  30.     /* state */
  31.     int i_low;
  32.     int i_range;
  33.     /* bit stream */
  34.     int i_bits_outstanding;
  35.     int f8_bits_encoded; // only if using x264_cabac_size_decision()
  36.     bs_t *s;
  37. } x264_cabac_t;
  38. /* encoder/decoder: init the contexts given i_slice_type, the quantif and the model */
  39. void x264_cabac_context_init( x264_cabac_t *cb, int i_slice_type, int i_qp, int i_model );
  40. /* decoder only: */
  41. void x264_cabac_decode_init    ( x264_cabac_t *cb, bs_t *s );
  42. int  x264_cabac_decode_decision( x264_cabac_t *cb, int i_ctx_idx );
  43. int  x264_cabac_decode_bypass  ( x264_cabac_t *cb );
  44. int  x264_cabac_decode_terminal( x264_cabac_t *cb );
  45. /* encoder only: */
  46. void x264_cabac_encode_init ( x264_cabac_t *cb, bs_t *s );
  47. void x264_cabac_encode_decision( x264_cabac_t *cb, int i_ctx_idx, int b );
  48. void x264_cabac_encode_bypass( x264_cabac_t *cb, int b );
  49. void x264_cabac_encode_terminal( x264_cabac_t *cb, int b );
  50. void x264_cabac_encode_flush( x264_cabac_t *cb );
  51. /* don't write the bitstream, just calculate cost: */
  52. void x264_cabac_size_decision( x264_cabac_t *cb, int i_ctx, int b );
  53. int  x264_cabac_size_decision2( uint8_t *state, int b );
  54. int  x264_cabac_size_decision_noup( uint8_t *state, int b );
  55. static inline int x264_cabac_pos( x264_cabac_t *cb )
  56. {
  57.     return bs_pos( cb->s ) + cb->i_bits_outstanding;
  58. }
  59. #endif