xref: /third_party/ffmpeg/libavcodec/mlpdsp.h (revision cabdff1a)
1cabdff1aSopenharmony_ci/*
2cabdff1aSopenharmony_ci * MLP codec common header file
3cabdff1aSopenharmony_ci * Copyright (c) 2007-2008 Ian Caulfield
4cabdff1aSopenharmony_ci *
5cabdff1aSopenharmony_ci * This file is part of FFmpeg.
6cabdff1aSopenharmony_ci *
7cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or
8cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public
9cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either
10cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version.
11cabdff1aSopenharmony_ci *
12cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful,
13cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
14cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15cabdff1aSopenharmony_ci * Lesser General Public License for more details.
16cabdff1aSopenharmony_ci *
17cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public
18cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software
19cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20cabdff1aSopenharmony_ci */
21cabdff1aSopenharmony_ci
22cabdff1aSopenharmony_ci#ifndef AVCODEC_MLPDSP_H
23cabdff1aSopenharmony_ci#define AVCODEC_MLPDSP_H
24cabdff1aSopenharmony_ci
25cabdff1aSopenharmony_ci#include <stdint.h>
26cabdff1aSopenharmony_ci#include "mlp.h"
27cabdff1aSopenharmony_ci
28cabdff1aSopenharmony_civoid ff_mlp_rematrix_channel(int32_t *samples,
29cabdff1aSopenharmony_ci                             const int32_t *coeffs,
30cabdff1aSopenharmony_ci                             const uint8_t *bypassed_lsbs,
31cabdff1aSopenharmony_ci                             const int8_t *noise_buffer,
32cabdff1aSopenharmony_ci                             int index,
33cabdff1aSopenharmony_ci                             unsigned int dest_ch,
34cabdff1aSopenharmony_ci                             uint16_t blockpos,
35cabdff1aSopenharmony_ci                             unsigned int maxchan,
36cabdff1aSopenharmony_ci                             int matrix_noise_shift,
37cabdff1aSopenharmony_ci                             int access_unit_size_pow2,
38cabdff1aSopenharmony_ci                             int32_t mask);
39cabdff1aSopenharmony_ci
40cabdff1aSopenharmony_ciint32_t ff_mlp_pack_output(int32_t lossless_check_data,
41cabdff1aSopenharmony_ci                           uint16_t blockpos,
42cabdff1aSopenharmony_ci                           int32_t (*sample_buffer)[MAX_CHANNELS],
43cabdff1aSopenharmony_ci                           void *data,
44cabdff1aSopenharmony_ci                           uint8_t *ch_assign,
45cabdff1aSopenharmony_ci                           int8_t *output_shift,
46cabdff1aSopenharmony_ci                           uint8_t max_matrix_channel,
47cabdff1aSopenharmony_ci                           int is32);
48cabdff1aSopenharmony_ci
49cabdff1aSopenharmony_citypedef struct MLPDSPContext {
50cabdff1aSopenharmony_ci    void (*mlp_filter_channel)(int32_t *state, const int32_t *coeff,
51cabdff1aSopenharmony_ci                               int firorder, int iirorder,
52cabdff1aSopenharmony_ci                               unsigned int filter_shift, int32_t mask,
53cabdff1aSopenharmony_ci                               int blocksize, int32_t *sample_buffer);
54cabdff1aSopenharmony_ci    void (*mlp_rematrix_channel)(int32_t *samples,
55cabdff1aSopenharmony_ci                                 const int32_t *coeffs,
56cabdff1aSopenharmony_ci                                 const uint8_t *bypassed_lsbs,
57cabdff1aSopenharmony_ci                                 const int8_t *noise_buffer,
58cabdff1aSopenharmony_ci                                 int index,
59cabdff1aSopenharmony_ci                                 unsigned int dest_ch,
60cabdff1aSopenharmony_ci                                 uint16_t blockpos,
61cabdff1aSopenharmony_ci                                 unsigned int maxchan,
62cabdff1aSopenharmony_ci                                 int matrix_noise_shift,
63cabdff1aSopenharmony_ci                                 int access_unit_size_pow2,
64cabdff1aSopenharmony_ci                                 int32_t mask);
65cabdff1aSopenharmony_ci    int32_t (*(*mlp_select_pack_output)(uint8_t *ch_assign,
66cabdff1aSopenharmony_ci                                        int8_t *output_shift,
67cabdff1aSopenharmony_ci                                        uint8_t max_matrix_channel,
68cabdff1aSopenharmony_ci                                        int is32))(int32_t, uint16_t, int32_t (*)[], void *, uint8_t*, int8_t *, uint8_t, int);
69cabdff1aSopenharmony_ci    int32_t (*mlp_pack_output)(int32_t lossless_check_data,
70cabdff1aSopenharmony_ci                               uint16_t blockpos,
71cabdff1aSopenharmony_ci                               int32_t (*sample_buffer)[MAX_CHANNELS],
72cabdff1aSopenharmony_ci                               void *data,
73cabdff1aSopenharmony_ci                               uint8_t *ch_assign,
74cabdff1aSopenharmony_ci                               int8_t *output_shift,
75cabdff1aSopenharmony_ci                               uint8_t max_matrix_channel,
76cabdff1aSopenharmony_ci                               int is32);
77cabdff1aSopenharmony_ci} MLPDSPContext;
78cabdff1aSopenharmony_ci
79cabdff1aSopenharmony_civoid ff_mlpdsp_init(MLPDSPContext *c);
80cabdff1aSopenharmony_civoid ff_mlpdsp_init_arm(MLPDSPContext *c);
81cabdff1aSopenharmony_civoid ff_mlpdsp_init_x86(MLPDSPContext *c);
82cabdff1aSopenharmony_ci
83cabdff1aSopenharmony_ci#endif /* AVCODEC_MLPDSP_H */
84