Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4349 Serge 1
/*
2
 * audio conversion
3
 * Copyright (c) 2006 Michael Niedermayer 
4
 * Copyright (c) 2008 Peter Ross
5
 *
6
 * This file is part of FFmpeg.
7
 *
8
 * FFmpeg 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
 * FFmpeg 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 FFmpeg; if not, write to the Free Software
20
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
 */
22
 
23
#ifndef SWR_AUDIOCONVERT_H
24
#define SWR_AUDIOCONVERT_H
25
 
26
/**
27
 * @file
28
 * Audio format conversion routines
29
 */
30
 
31
 
32
#include "swresample_internal.h"
33
#include "libavutil/cpu.h"
34
 
35
 
36
typedef void (conv_func_type)(uint8_t *po, const uint8_t *pi, int is, int os, uint8_t *end);
37
typedef void (simd_func_type)(uint8_t **dst, const uint8_t **src, int len);
38
 
39
typedef struct AudioConvert {
40
    int channels;
41
    int  in_simd_align_mask;
42
    int out_simd_align_mask;
43
    conv_func_type *conv_f;
44
    simd_func_type *simd_f;
45
    const int *ch_map;
46
    uint8_t silence[8]; ///< silence input sample
47
}AudioConvert;
48
 
49
/**
50
 * Create an audio sample format converter context
51
 * @param out_fmt Output sample format
52
 * @param in_fmt Input sample format
53
 * @param channels Number of channels
54
 * @param flags See AV_CPU_FLAG_xx
55
 * @param ch_map list of the channels id to pick from the source stream, NULL
56
 *               if all channels must be selected
57
 * @return NULL on error
58
 */
59
AudioConvert *swri_audio_convert_alloc(enum AVSampleFormat out_fmt,
60
                                       enum AVSampleFormat in_fmt,
61
                                       int channels, const int *ch_map,
62
                                       int flags);
63
 
64
/**
65
 * Free audio sample format converter context.
66
 * and set the pointer to NULL
67
 */
68
void swri_audio_convert_free(AudioConvert **ctx);
69
 
70
/**
71
 * Convert between audio sample formats
72
 * @param[in] out array of output buffers for each channel. set to NULL to ignore processing of the given channel.
73
 * @param[in] in array of input buffers for each channel
74
 * @param len length of audio frame size (measured in samples)
75
 */
76
int swri_audio_convert(AudioConvert *ctx, AudioData *out, AudioData *in, int len);
77
 
78
#endif /* AUDIOCONVERT_H */