X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Frl.h;h=367cc986afa25550b707cded4f7505ff17935409;hb=9e6b5e61a0c91e25e298d0a21b189c4c95443795;hp=1c2aae25ae4110f15c5e76531d5107bd69f944e2;hpb=3502a54f597a678a39679d2699a02c9fbba534f8;p=ffmpeg diff --git a/libavcodec/rl.h b/libavcodec/rl.h index 1c2aae25ae4..367cc986afa 100644 --- a/libavcodec/rl.h +++ b/libavcodec/rl.h @@ -1,11 +1,39 @@ +/* + * Copyright (c) 2000-2002 Fabrice Bellard + * Copyright (c) 2002-2004 Michael Niedermayer + * + * This file is part of Libav. + * + * Libav is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * Libav is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with Libav; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + /** - * @file rl.h + * @file * rl header. */ #ifndef AVCODEC_RL_H #define AVCODEC_RL_H +#include +#include "get_bits.h" + +/* run length table */ +#define MAX_RUN 64 +#define MAX_LEVEL 64 + /** RLTable. */ typedef struct RLTable { int n; ///< number of entries of table_vlc minus 1 @@ -16,7 +44,7 @@ typedef struct RLTable { uint8_t *index_run[2]; ///< encoding only int8_t *max_level[2]; ///< encoding & decoding int8_t *max_run[2]; ///< encoding & decoding - VLC vlc; ///< decoding only deprected FIXME remove + VLC vlc; ///< decoding only deprecated FIXME remove RL_VLC_ELEM *rl_vlc[32]; ///< decoding only } RLTable; @@ -25,8 +53,24 @@ typedef struct RLTable { * @param static_store static uint8_t array[2][2*MAX_RUN + MAX_LEVEL + 3] which will hold * the level and run tables, if this is NULL av_malloc() will be used */ -void init_rl(RLTable *rl, uint8_t static_store[2][2*MAX_RUN + MAX_LEVEL + 3]); -void init_vlc_rl(RLTable *rl, int use_static); +void ff_init_rl(RLTable *rl, uint8_t static_store[2][2*MAX_RUN + MAX_LEVEL + 3]); +void ff_init_vlc_rl(RLTable *rl); + +#define INIT_VLC_RL(rl, static_size)\ +{\ + int q;\ + static RL_VLC_ELEM rl_vlc_table[32][static_size];\ + INIT_VLC_STATIC(&rl.vlc, 9, rl.n + 1,\ + &rl.table_vlc[0][1], 4, 2,\ + &rl.table_vlc[0][0], 4, 2, static_size);\ +\ + if(!rl.rl_vlc[0]){\ + for(q=0; q<32; q++)\ + rl.rl_vlc[q]= rl_vlc_table[q];\ +\ + ff_init_vlc_rl(&rl);\ + }\ +} static inline int get_rl_index(const RLTable *rl, int last, int run, int level) { @@ -39,4 +83,4 @@ static inline int get_rl_index(const RLTable *rl, int last, int run, int level) return index + level - 1; } -#endif +#endif /* AVCODEC_RL_H */