1 /* 2 * ELS (Entropy Logarithmic-Scale) decoder 3 * 4 * Copyright (c) 2013 Maxim Poliakovski 5 * 6 * This file is part of FFmpeg. 7 * 8 * FFmpeg is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU Lesser General Public 10 * License as published by the Free Software Foundation; either 11 * version 2.1 of the License, or (at your option) any later version. 12 * 13 * FFmpeg is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * Lesser General Public License for more details. 17 * 18 * You should have received a copy of the GNU Lesser General Public 19 * License along with FFmpeg; if not, write to the Free Software 20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 */ 22 23 /** 24 * @file 25 * Entropy Logarithmic-Scale binary arithmetic coder 26 */ 27 28 #ifndef AVCODEC_ELSDEC_H 29 #define AVCODEC_ELSDEC_H 30 31 #include <stdint.h> 32 #include <sys/types.h> 33 34 #define ELS_EXPGOLOMB_LEN 10 35 36 typedef struct ElsDecCtx { 37 const uint8_t *in_buf; 38 unsigned x; 39 size_t data_size; 40 int j, t, diff, err; 41 } ElsDecCtx; 42 43 typedef struct ElsRungNode { 44 uint8_t rung; 45 uint16_t next_index; 46 } ElsRungNode; 47 48 typedef struct ElsUnsignedRung { 49 uint8_t prefix_rung[ELS_EXPGOLOMB_LEN + 1]; 50 ElsRungNode *rem_rung_list; 51 size_t rung_list_size; 52 uint16_t avail_index; 53 } ElsUnsignedRung; 54 55 void ff_els_decoder_init(ElsDecCtx *ctx, const uint8_t *in, size_t data_size); 56 void ff_els_decoder_uninit(ElsUnsignedRung *rung); 57 int ff_els_decode_bit(ElsDecCtx *ctx, unsigned char *rung); 58 unsigned ff_els_decode_unsigned(ElsDecCtx *ctx, ElsUnsignedRung *ur); 59 60 #endif /* AVCODEC_ELSDEC_H */ 61