FFmpeg
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavcodec
huffyuv.c
Go to the documentation of this file.
1
/*
2
* huffyuv codec for libavcodec
3
*
4
* Copyright (c) 2002-2003 Michael Niedermayer <michaelni@gmx.at>
5
*
6
* see http://www.pcisys.net/~melanson/codecs/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 <stdint.h>
32
33
#include "
libavutil/mem.h
"
34
35
#include "
avcodec.h
"
36
#include "
dsputil.h
"
37
#include "
huffyuv.h
"
38
39
int
ff_huffyuv_generate_bits_table
(uint32_t *
dst
,
const
uint8_t
*len_table)
40
{
41
int
len
,
index
;
42
uint32_t
bits
= 0;
43
44
for
(len = 32; len > 0; len--) {
45
for
(index = 0; index < 256; index++) {
46
if
(len_table[index] == len)
47
dst[
index
] = bits++;
48
}
49
if
(bits & 1) {
50
av_log
(
NULL
,
AV_LOG_ERROR
,
"Error generating huffman table\n"
);
51
return
-1;
52
}
53
bits >>= 1;
54
}
55
return
0;
56
}
57
58
av_cold
int
ff_huffyuv_alloc_temp
(
HYuvContext
*s)
59
{
60
int
i;
61
62
if
(s->
bitstream_bpp
<24) {
63
for
(i=0; i<3; i++) {
64
s->
temp
[i]=
av_malloc
(s->
width
+ 16);
65
if
(!s->
temp
[i])
66
return
AVERROR
(ENOMEM);
67
}
68
}
else
{
69
s->
temp
[0]=
av_mallocz
(4*s->
width
+ 16);
70
if
(!s->
temp
[0])
71
return
AVERROR
(ENOMEM);
72
}
73
return
0;
74
}
75
76
av_cold
void
ff_huffyuv_common_init
(
AVCodecContext
*avctx)
77
{
78
HYuvContext
*s = avctx->
priv_data
;
79
80
s->
avctx
= avctx;
81
s->
flags
= avctx->
flags
;
82
83
ff_dsputil_init
(&s->
dsp
, avctx);
84
85
s->
width
= avctx->
width
;
86
s->
height
= avctx->
height
;
87
88
av_assert1
(s->
width
> 0 && s->
height
> 0);
89
}
90
91
av_cold
void
ff_huffyuv_common_end
(
HYuvContext
*s)
92
{
93
int
i;
94
95
for
(i = 0; i < 3; i++) {
96
av_freep
(&s->
temp
[i]);
97
}
98
}
Generated on Sat May 25 2013 03:58:35 for FFmpeg by
1.8.2