FFmpeg
libavcodec
rl.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2000-2002 Fabrice Bellard
3
* Copyright (c) 2002-2004 Michael Niedermayer
4
*
5
* This file is part of FFmpeg.
6
*
7
* FFmpeg is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU Lesser General Public
9
* License as published by the Free Software Foundation; either
10
* version 2.1 of the License, or (at your option) any later version.
11
*
12
* FFmpeg is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
* Lesser General Public License for more details.
16
*
17
* You should have received a copy of the GNU Lesser General Public
18
* License along with FFmpeg; if not, write to the Free Software
19
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
*/
21
22
/**
23
* @file
24
* rl header.
25
*/
26
27
#ifndef AVCODEC_RL_H
28
#define AVCODEC_RL_H
29
30
#include <stdint.h>
31
32
#include "
vlc.h
"
33
34
/* run length table */
35
#define MAX_RUN 64
36
#define MAX_LEVEL 64
37
38
/** RLTable. */
39
typedef
struct
RLTable
{
40
int
n
;
///< number of entries of table_vlc minus 1
41
int
last
;
///< number of values for last = 0
42
const
uint16_t (*
table_vlc
)[2];
43
const
int8_t *
table_run
;
44
const
int8_t *
table_level
;
45
uint8_t
*
index_run
[2];
///< encoding only
46
int8_t *
max_level
[2];
///< encoding & decoding
47
int8_t *
max_run
[2];
///< encoding & decoding
48
RL_VLC_ELEM
*
rl_vlc
[32];
///< decoding only
49
}
RLTable
;
50
51
/**
52
* @param static_store static uint8_t array[2][2*MAX_RUN + MAX_LEVEL + 3]
53
* to hold the level and run tables.
54
*/
55
void
ff_rl_init
(
RLTable
*rl,
uint8_t
static_store[2][2*
MAX_RUN
+
MAX_LEVEL
+ 3]);
56
void
ff_rl_init_vlc
(
RLTable
*rl,
unsigned
static_size);
57
58
#define INIT_VLC_RL(rl, static_size)\
59
{\
60
int q;\
61
static RL_VLC_ELEM rl_vlc_table[32][static_size];\
62
\
63
if(!rl.rl_vlc[0]){\
64
for(q=0; q<32; q++)\
65
rl.rl_vlc[q]= rl_vlc_table[q];\
66
\
67
ff_rl_init_vlc(&rl, static_size);\
68
}\
69
}
70
71
#define INIT_FIRST_VLC_RL(rl, static_size) \
72
do { \
73
static RL_VLC_ELEM rl_vlc_table[static_size]; \
74
\
75
rl.rl_vlc[0] = rl_vlc_table; \
76
ff_rl_init_vlc(&rl, static_size); \
77
} while (0)
78
79
static
inline
int
get_rl_index
(
const
RLTable
*rl,
int
last,
int
run
,
int
level
)
80
{
81
int
index
;
82
index
= rl->
index_run
[last][
run
];
83
if
(
index
>= rl->
n
)
84
return
rl->
n
;
85
if
(
level
> rl->
max_level
[last][
run
])
86
return
rl->
n
;
87
return
index
+
level
- 1;
88
}
89
90
#endif
/* AVCODEC_RL_H */
level
uint8_t level
Definition:
svq3.c:206
RLTable::index_run
uint8_t * index_run[2]
encoding only
Definition:
rl.h:45
MAX_RUN
#define MAX_RUN
Definition:
rl.h:35
RLTable
RLTable.
Definition:
rl.h:39
RLTable::n
int n
number of entries of table_vlc minus 1
Definition:
rl.h:40
RLTable::max_level
int8_t * max_level[2]
encoding & decoding
Definition:
rl.h:46
get_rl_index
static int get_rl_index(const RLTable *rl, int last, int run, int level)
Definition:
rl.h:79
run
uint8_t run
Definition:
svq3.c:205
RLTable::table_vlc
const uint16_t(* table_vlc)[2]
Definition:
rl.h:42
index
int index
Definition:
gxfenc.c:89
MAX_LEVEL
#define MAX_LEVEL
Definition:
rl.h:36
RLTable::table_level
const int8_t * table_level
Definition:
rl.h:44
RL_VLC_ELEM
Definition:
vlc.h:32
ff_rl_init_vlc
void ff_rl_init_vlc(RLTable *rl, unsigned static_size)
Definition:
rl.c:71
RLTable::max_run
int8_t * max_run[2]
encoding & decoding
Definition:
rl.h:47
uint8_t
uint8_t
Definition:
audio_convert.c:194
RLTable::last
int last
number of values for last = 0
Definition:
rl.h:41
ff_rl_init
void ff_rl_init(RLTable *rl, uint8_t static_store[2][2 *MAX_RUN+MAX_LEVEL+3])
Definition:
rl.c:28
vlc.h
RLTable::table_run
const int8_t * table_run
Definition:
rl.h:43
RLTable::rl_vlc
RL_VLC_ELEM * rl_vlc[32]
decoding only
Definition:
rl.h:48
Generated on Wed Aug 24 2022 21:34:13 for FFmpeg by
1.8.17