FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavcodec
vp9dsp.h
Go to the documentation of this file.
1
/*
2
* VP9 compatible video decoder
3
*
4
* Copyright (C) 2013 Ronald S. Bultje <rsbultje gmail com>
5
* Copyright (C) 2013 Clément Bœsch <u pkh me>
6
*
7
* This file is part of FFmpeg.
8
*
9
* FFmpeg is free software; you can redistribute it and/or
10
* modify it under the terms of the GNU Lesser General Public
11
* License as published by the Free Software Foundation; either
12
* version 2.1 of the License, or (at your option) any later version.
13
*
14
* FFmpeg is distributed in the hope that it will be useful,
15
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
* Lesser General Public License for more details.
18
*
19
* You should have received a copy of the GNU Lesser General Public
20
* License along with FFmpeg; if not, write to the Free Software
21
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22
*/
23
24
#ifndef AVCODEC_VP9DSP_H
25
#define AVCODEC_VP9DSP_H
26
27
#include <stddef.h>
28
#include <stdint.h>
29
30
#include "
vp9.h
"
31
32
typedef
void
(*
vp9_mc_func
)(
uint8_t
*dst, ptrdiff_t dst_stride,
33
const
uint8_t
*ref, ptrdiff_t ref_stride,
34
int
h,
int
mx,
int
my);
35
36
typedef
struct
VP9DSPContext
{
37
/*
38
* dimension 1: 0=4x4, 1=8x8, 2=16x16, 3=32x32
39
* dimension 2: intra prediction modes
40
*
41
* dst/left/top is aligned by transform-size (i.e. 4, 8, 16 or 32 pixels)
42
* stride is aligned by 16 pixels
43
* top[-1] is top/left; top[4,7] is top-right for 4x4
44
*/
45
// FIXME(rbultje) maybe replace left/top pointers with HAVE_TOP/
46
// HAVE_LEFT/HAVE_TOPRIGHT flags instead, and then handle it in-place?
47
// also needs to fit in with what h264/vp8/etc do
48
void
(*
intra_pred
[
N_TXFM_SIZES
][
N_INTRA_PRED_MODES
])(
uint8_t
*dst,
49
ptrdiff_t
stride
,
50
const
uint8_t
*left,
51
const
uint8_t
*top);
52
53
/*
54
* dimension 1: 0=4x4, 1=8x8, 2=16x16, 3=32x32, 4=lossless (3-4=dct only)
55
* dimension 2: 0=dct/dct, 1=dct/adst, 2=adst/dct, 3=adst/adst
56
*
57
* dst is aligned by transform-size (i.e. 4, 8, 16 or 32 pixels)
58
* stride is aligned by 16 pixels
59
* block is 16-byte aligned
60
* eob indicates the position (+1) of the last non-zero coefficient,
61
* in scan-order. This can be used to write faster versions, e.g. a
62
* dc-only 4x4/8x8/16x16/32x32, or a 4x4-only (eob<10) 8x8/16x16/32x32,
63
* etc.
64
*/
65
// FIXME also write idct_add_block() versions for whole (inter) pred
66
// blocks, so we can do 2 4x4s at once
67
void
(*
itxfm_add
[
N_TXFM_SIZES
+ 1][
N_TXFM_TYPES
])(
uint8_t
*dst,
68
ptrdiff_t
stride
,
69
int16_t *
block
,
int
eob);
70
71
/*
72
* dimension 1: width of filter (0=4, 1=8, 2=16)
73
* dimension 2: 0=col-edge filter (h), 1=row-edge filter (v)
74
*
75
* dst/stride are aligned by 8
76
*/
77
void
(*
loop_filter_8
[3][2])(
uint8_t
*dst, ptrdiff_t
stride
,
78
int
mb_lim,
int
lim,
int
hev_thr);
79
80
/*
81
* dimension 1: 0=col-edge filter (h), 1=row-edge filter (v)
82
*
83
* The width of filter is assumed to be 16; dst/stride are aligned by 16
84
*/
85
void
(*
loop_filter_16
[2])(
uint8_t
*dst, ptrdiff_t
stride
,
86
int
mb_lim,
int
lim,
int
hev_thr);
87
88
/*
89
* dimension 1/2: width of filter (0=4, 1=8) for each filter half
90
* dimension 3: 0=col-edge filter (h), 1=row-edge filter (v)
91
*
92
* dst/stride are aligned by operation size
93
* this basically calls loop_filter[d1][d3][0](), followed by
94
* loop_filter[d2][d3][0]() on the next 8 pixels
95
* mb_lim/lim/hev_thr contain two values in the lowest two bytes of the
96
* integer.
97
*/
98
// FIXME perhaps a mix4 that operates on 32px (for AVX2)
99
void
(*
loop_filter_mix2
[2][2][2])(
uint8_t
*dst, ptrdiff_t
stride
,
100
int
mb_lim,
int
lim,
int
hev_thr);
101
102
/*
103
* dimension 1: hsize (0: 64, 1: 32, 2: 16, 3: 8, 4: 4)
104
* dimension 2: filter type (0: smooth, 1: regular, 2: sharp, 3: bilin)
105
* dimension 3: averaging type (0: put, 1: avg)
106
* dimension 4: x subpel interpolation (0: none, 1: 8tap/bilin)
107
* dimension 5: y subpel interpolation (1: none, 1: 8tap/bilin)
108
*
109
* dst/stride are aligned by hsize
110
*/
111
vp9_mc_func
mc
[5][4][2][2][2];
112
}
VP9DSPContext
;
113
114
void
ff_vp9dsp_init
(
VP9DSPContext
*dsp);
115
116
void
ff_vp9dsp_init_x86
(
VP9DSPContext
*dsp);
117
118
#endif
/* AVCODEC_VP9DSP_H */
Generated on Sun Mar 23 2014 23:50:05 for FFmpeg by
1.8.2