Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
libavcodec
proresdsp.c
Go to the documentation of this file.
1
/*
2
* Apple ProRes compatible decoder
3
*
4
* Copyright (c) 2010-2011 Maxim Poliakovski
5
*
6
* This file is part of Libav.
7
*
8
* Libav is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU Lesser General Public
10
* License as published by the Free Software Foundation; either
11
* version 2.1 of the License, or (at your option) any later version.
12
*
13
* Libav is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
* Lesser General Public License for more details.
17
*
18
* You should have received a copy of the GNU Lesser General Public
19
* License along with Libav; if not, write to the Free Software
20
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
*/
22
23
#include "
proresdsp.h
"
24
#include "
simple_idct.h
"
25
26
#define BIAS (1 << (PRORES_BITS_PER_SAMPLE - 1))
27
#define CLIP_MIN (1 << (PRORES_BITS_PER_SAMPLE - 8))
28
#define CLIP_MAX (1 << PRORES_BITS_PER_SAMPLE) - CLIP_MIN - 1
29
30
#define CLIP_AND_BIAS(x) (av_clip((x) + BIAS, CLIP_MIN, CLIP_MAX))
31
35
static
void
put_pixels
(uint16_t *dst,
int
stride
,
const
DCTELEM
*in)
36
{
37
int
x, y, src_offset, dst_offset;
38
39
for
(y = 0, dst_offset = 0; y < 8; y++, dst_offset +=
stride
) {
40
for
(x = 0; x < 8; x++) {
41
src_offset = (y << 3) + x;
42
43
dst[dst_offset + x] =
CLIP_AND_BIAS
(in[src_offset]);
44
}
45
}
46
}
47
48
static
void
prores_idct_put_c
(uint16_t *out,
int
linesize,
DCTELEM
*
block
,
const
int16_t *qmat)
49
{
50
ff_prores_idct
(block, qmat);
51
put_pixels
(out, linesize >> 1, block);
52
}
53
54
void
ff_proresdsp_init
(
ProresDSPContext
*
dsp
)
55
{
56
dsp->
idct_put
=
prores_idct_put_c
;
57
dsp->
idct_permutation_type
=
FF_NO_IDCT_PERM
;
58
59
if
(
HAVE_MMX
)
ff_proresdsp_x86_init
(dsp);
60
61
ff_init_scantable_permutation
(dsp->
idct_permutation
,
62
dsp->
idct_permutation_type
);
63
}