Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
6148 serge 1
/*
2
 * Copyright (c) 2012 Justin Ruggles 
3
 *
4
 * This file is part of FFmpeg.
5
 *
6
 * FFmpeg is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU Lesser General Public
8
 * License as published by the Free Software Foundation; either
9
 * version 2.1 of the License, or (at your option) any later version.
10
 *
11
 * FFmpeg is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
 * Lesser General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU Lesser General Public
17
 * License along with FFmpeg; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
 */
20
 
21
#ifndef AVRESAMPLE_DITHER_H
22
#define AVRESAMPLE_DITHER_H
23
 
24
#include "avresample.h"
25
#include "audio_data.h"
26
 
27
typedef struct DitherContext DitherContext;
28
 
29
typedef struct DitherDSPContext {
30
    /**
31
     * Convert samples from flt to s16 with added dither noise.
32
     *
33
     * @param dst    destination float array, range -0.5 to 0.5
34
     * @param src    source int array, range INT_MIN to INT_MAX.
35
     * @param dither float dither noise array
36
     * @param len    number of samples
37
     */
38
    void (*quantize)(int16_t *dst, const float *src, float *dither, int len);
39
 
40
    int ptr_align;      ///< src and dst constraits for quantize()
41
    int samples_align;  ///< len constraits for quantize()
42
 
43
    /**
44
     * Convert dither noise from int to float with triangular distribution.
45
     *
46
     * @param dst  destination float array, range -0.5 to 0.5
47
     *             constraints: 32-byte aligned
48
     * @param src0 source int array, range INT_MIN to INT_MAX.
49
     *             the array size is len * 2
50
     *             constraints: 32-byte aligned
51
     * @param len  number of output noise samples
52
     *             constraints: multiple of 16
53
     */
54
    void (*dither_int_to_float)(float *dst, int *src0, int len);
55
} DitherDSPContext;
56
 
57
/**
58
 * Allocate and initialize a DitherContext.
59
 *
60
 * The parameters in the AVAudioResampleContext are used to initialize the
61
 * DitherContext.
62
 *
63
 * @param avr  AVAudioResampleContext
64
 * @return     newly-allocated DitherContext
65
 */
66
DitherContext *ff_dither_alloc(AVAudioResampleContext *avr,
67
                               enum AVSampleFormat out_fmt,
68
                               enum AVSampleFormat in_fmt,
69
                               int channels, int sample_rate, int apply_map);
70
 
71
/**
72
 * Free a DitherContext.
73
 *
74
 * @param c  DitherContext
75
 */
76
void ff_dither_free(DitherContext **c);
77
 
78
/**
79
 * Convert audio sample format with dithering.
80
 *
81
 * @param c    DitherContext
82
 * @param dst  destination audio data
83
 * @param src  source audio data
84
 * @return     0 if ok, negative AVERROR code on failure
85
 */
86
int ff_convert_dither(DitherContext *c, AudioData *dst, AudioData *src);
87
 
88
/* arch-specific initialization functions */
89
 
90
void ff_dither_init_x86(DitherDSPContext *ddsp,
91
                        enum AVResampleDitherMethod method);
92
 
93
#endif /* AVRESAMPLE_DITHER_H */