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