ffmpeg / libavcodec / fmtconvert.h @ 2912e87a
History  View  Annotate  Download (2.98 KB)
1 
/*


2 
* Format Conversion Utils

3 
* Copyright (c) 2000, 2001 Fabrice Bellard

4 
* Copyright (c) 20022004 Michael Niedermayer <michaelni@gmx.at>

5 
*

6 
* This file is part of Libav.

7 
*

8 
* Libav 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 
* Libav 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 Libav; if not, write to the Free Software

20 
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 021101301 USA

21 
*/

22  
23 
#ifndef AVCODEC_FMTCONVERT_H

24 
#define AVCODEC_FMTCONVERT_H

25  
26 
#include "avcodec.h" 
27  
28 
typedef struct FmtConvertContext { 
29 
/**

30 
* Convert an array of int32_t to float and multiply by a float value.

31 
* @param dst destination array of float.

32 
* constraints: 16byte aligned

33 
* @param src source array of int32_t.

34 
* constraints: 16byte aligned

35 
* @param len number of elements to convert.

36 
* constraints: multiple of 8

37 
*/

38 
void (*int32_to_float_fmul_scalar)(float *dst, const int *src, float mul, int len); 
39  
40 
/**

41 
* Convert an array of float to an array of int16_t.

42 
*

43 
* Convert floats from in the range [32768.0,32767.0] to ints

44 
* without rescaling

45 
*

46 
* @param dst destination array of int16_t.

47 
* constraints: 16byte aligned

48 
* @param src source array of float.

49 
* constraints: 16byte aligned

50 
* @param len number of elements to convert.

51 
* constraints: multiple of 8

52 
*/

53 
void (*float_to_int16)(int16_t *dst, const float *src, long len); 
54  
55 
/**

56 
* Convert multiple arrays of float to an interleaved array of int16_t.

57 
*

58 
* Convert floats from in the range [32768.0,32767.0] to ints

59 
* without rescaling

60 
*

61 
* @param dst destination array of interleaved int16_t.

62 
* constraints: 16byte aligned

63 
* @param src source array of float arrays, one for each channel.

64 
* constraints: 16byte aligned

65 
* @param len number of elements to convert.

66 
* constraints: multiple of 8

67 
* @param channels number of channels

68 
*/

69 
void (*float_to_int16_interleave)(int16_t *dst, const float **src, 
70 
long len, int channels); 
71 
} FmtConvertContext; 
72  
73 
void ff_fmt_convert_init(FmtConvertContext *c, AVCodecContext *avctx);

74  
75 
void ff_fmt_convert_init_arm(FmtConvertContext *c, AVCodecContext *avctx);

76 
void ff_fmt_convert_init_altivec(FmtConvertContext *c, AVCodecContext *avctx);

77 
void ff_fmt_convert_init_x86(FmtConvertContext *c, AVCodecContext *avctx);

78  
79 
#endif /* AVCODEC_FMTCONVERT_H */ 