FFmpeg
Main Page
Related Pages
Modules
Namespaces
Namespace List
Namespace Members
All
Functions
Variables
Data Structures
Data Structures
Data Structure Index
Class Hierarchy
Data Fields
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Functions
_
a
c
d
g
h
i
o
q
r
s
v
~
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Enumerations
Enumerator
a
d
e
f
h
i
j
l
m
n
p
r
s
v
Files
File List
Globals
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
a
b
c
d
e
f
g
h
i
l
m
o
p
q
r
s
t
u
v
w
x
y
Enumerations
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Enumerator
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Macros
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Examples
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Modules
Pages
libavcodec
huffyuv.c
Go to the documentation of this file.
1
/*
2
* huffyuv codec for libavcodec
3
*
4
* Copyright (c) 2002-2014 Michael Niedermayer <michaelni@gmx.at>
5
*
6
* see https://multimedia.cx/huffyuv.txt for a description of
7
* the algorithm used
8
*
9
* This file is part of FFmpeg.
10
*
11
* FFmpeg is free software; you can redistribute it and/or
12
* modify it under the terms of the GNU Lesser General Public
13
* License as published by the Free Software Foundation; either
14
* version 2.1 of the License, or (at your option) any later version.
15
*
16
* FFmpeg is distributed in the hope that it will be useful,
17
* but WITHOUT ANY WARRANTY; without even the implied warranty of
18
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19
* Lesser General Public License for more details.
20
*
21
* You should have received a copy of the GNU Lesser General Public
22
* License along with FFmpeg; if not, write to the Free Software
23
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24
*/
25
26
/**
27
* @file
28
* huffyuv codec for libavcodec.
29
*/
30
31
#include <stddef.h>
32
#include <stdint.h>
33
34
#include "
libavutil/error.h
"
35
#include "
libavutil/log.h
"
36
#include "
libavutil/macros.h
"
37
38
#include "
huffyuv.h
"
39
40
int
ff_huffyuv_generate_bits_table
(uint32_t *
dst
,
const
uint8_t *len_table,
int
n)
41
{
42
int
lens[33] = { 0 };
43
uint32_t codes[33];
44
45
for
(
int
i
= 0;
i
< n;
i
++)
46
lens[len_table[
i
]]++;
47
48
codes[32] = 0;
49
for
(
int
i
=
FF_ARRAY_ELEMS
(lens) - 1;
i
> 0;
i
--) {
50
if
((lens[
i
] + codes[
i
]) & 1) {
51
av_log
(
NULL
,
AV_LOG_ERROR
,
"Error generating huffman table\n"
);
52
return
AVERROR_INVALIDDATA
;
53
}
54
codes[
i
- 1] = (lens[
i
] + codes[
i
]) >> 1;
55
}
56
for
(
int
i
= 0;
i
< n;
i
++) {
57
if
(len_table[
i
])
58
dst
[
i
] = codes[len_table[
i
]]++;
59
}
60
return
0;
61
}
macros.h
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition:
log.h:210
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition:
sinewin_tablegen.c:29
NULL
#define NULL
Definition:
coverity.c:32
ff_huffyuv_generate_bits_table
int ff_huffyuv_generate_bits_table(uint32_t *dst, const uint8_t *len_table, int n)
Definition:
huffyuv.c:40
error.h
dst
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition:
dsp.h:83
log.h
i
#define i(width, name, range_min, range_max)
Definition:
cbs_h2645.c:256
av_log
#define av_log(a,...)
Definition:
tableprint_vlc.h:27
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition:
error.h:61
huffyuv.h
Generated on Wed Apr 23 2025 19:21:49 for FFmpeg by
1.8.17