Statistics
| Branch: | Revision:

ffmpeg / libavcodec / vc1dsp.h @ 2912e87a

History | View | Annotate | Download (2.82 KB)

1
/*
2
 * VC-1 and WMV3 decoder - DSP functions
3
 * Copyright (c) 2006 Konstantin Shishkov
4
 *
5
 * This file is part of Libav.
6
 *
7
 * Libav 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
 * Libav 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 Libav; 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
 * VC-1 and WMV3 decoder
25
 *
26
 */
27

    
28
#ifndef AVCODEC_VC1DSP_H
29
#define AVCODEC_VC1DSP_H
30

    
31
#include "dsputil.h"
32

    
33
typedef void (*vc1_idct_func)(uint8_t *dest, int line_size, DCTELEM *block);
34

    
35
typedef struct VC1DSPContext {
36
    /* vc1 functions */
37
    vc1_idct_func vc1_inv_trans_8x8_add;
38
    vc1_idct_func vc1_inv_trans_8x8_put_signed[2];
39
    vc1_idct_func vc1_inv_trans_8x8_put[2];
40
    void (*vc1_inv_trans_8x4)(uint8_t *dest, int line_size, DCTELEM *block);
41
    void (*vc1_inv_trans_4x8)(uint8_t *dest, int line_size, DCTELEM *block);
42
    void (*vc1_inv_trans_4x4)(uint8_t *dest, int line_size, DCTELEM *block);
43
    void (*vc1_inv_trans_8x8_dc)(uint8_t *dest, int line_size, DCTELEM *block);
44
    void (*vc1_inv_trans_8x4_dc)(uint8_t *dest, int line_size, DCTELEM *block);
45
    void (*vc1_inv_trans_4x8_dc)(uint8_t *dest, int line_size, DCTELEM *block);
46
    void (*vc1_inv_trans_4x4_dc)(uint8_t *dest, int line_size, DCTELEM *block);
47
    void (*vc1_v_overlap)(uint8_t* src, int stride);
48
    void (*vc1_h_overlap)(uint8_t* src, int stride);
49
    void (*vc1_v_loop_filter4)(uint8_t *src, int stride, int pq);
50
    void (*vc1_h_loop_filter4)(uint8_t *src, int stride, int pq);
51
    void (*vc1_v_loop_filter8)(uint8_t *src, int stride, int pq);
52
    void (*vc1_h_loop_filter8)(uint8_t *src, int stride, int pq);
53
    void (*vc1_v_loop_filter16)(uint8_t *src, int stride, int pq);
54
    void (*vc1_h_loop_filter16)(uint8_t *src, int stride, int pq);
55

    
56
    /* put 8x8 block with bicubic interpolation and quarterpel precision
57
     * last argument is actually round value instead of height
58
     */
59
    op_pixels_func put_vc1_mspel_pixels_tab[16];
60
    op_pixels_func avg_vc1_mspel_pixels_tab[16];
61

    
62
    /* This is really one func used in VC-1 decoding */
63
    h264_chroma_mc_func put_no_rnd_vc1_chroma_pixels_tab[3];
64
    h264_chroma_mc_func avg_no_rnd_vc1_chroma_pixels_tab[3];
65
} VC1DSPContext;
66

    
67
void ff_vc1dsp_init(VC1DSPContext* c);
68
void ff_vc1dsp_init_altivec(VC1DSPContext* c);
69
void ff_vc1dsp_init_mmx(VC1DSPContext* dsp);
70

    
71
#endif /* AVCODEC_VC1DSP_H */