Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/openal-0.0.8/src/audioconvert/ac_bits.c @ 17

Last change on this file since 17 was 17, checked in by landauf, 16 years ago

added openal

File size: 1.6 KB
Line 
1/* -*- mode: C; tab-width:8; c-basic-offset:8 -*-
2 * vi:set ts=8:
3 *
4 * ac_bits.c
5 *
6 * audioconvert functions related to bit depth.
7 */
8#include "al_siteconfig.h"
9
10#include <AL/al.h>
11#include <stdio.h>
12
13#include "audioconvert/audioconvert.h"
14
15/* Convert 8-bit to 16-bit - LSB */
16void acConvert16LSB( acAudioCVT *cvt, ALushort format ) {
17        int i;
18        ALubyte *src, *dst;
19
20        src = (ALubyte *) cvt->buf + cvt->len_cvt;
21        dst = (ALubyte *) cvt->buf + cvt->len_cvt * 2;
22        for(i = cvt->len_cvt; i; i-- ) {
23                src -= 1;
24                dst -= 2;
25                dst[0] = 0;
26                dst[1] = *src;
27        }
28
29        format = ((format & ~0x0008) | AUDIO_U16LSB);
30        cvt->len_cvt *= 2;
31
32        if ( cvt->filters[++cvt->filter_index] ) {
33                cvt->filters[cvt->filter_index](cvt, format);
34        }
35}
36
37/* Convert 8-bit to 16-bit - MSB */
38void acConvert16MSB(acAudioCVT *cvt, ALushort format) {
39        int i;
40        ALubyte *src, *dst;
41
42        src = (ALubyte *) cvt->buf + cvt->len_cvt;
43        dst = (ALubyte *) cvt->buf + cvt->len_cvt * 2;
44        for(i = cvt->len_cvt; i; i--) {
45                src -= 1;
46                dst -= 2;
47                dst[1] = 0;
48                dst[0] = *src;
49        }
50
51        format = ((format & ~0x0008) | AUDIO_U16MSB);
52        cvt->len_cvt *= 2;
53
54        if ( cvt->filters[++cvt->filter_index] ) {
55                cvt->filters[cvt->filter_index](cvt, format);
56        }
57}
58
59/* Convert 16-bit to 8-bit */
60void acConvert8(acAudioCVT *cvt, ALushort format) {
61        int i;
62        ALubyte *src, *dst;
63
64        src = cvt->buf;
65        dst = cvt->buf;
66
67        if((format & 0x1000) != 0x1000) { /* Little endian */
68                ++src;
69        }
70
71        for(i = cvt->len_cvt/2; i; i--) {
72                *dst = *src;
73                src += 2;
74                dst += 1;
75        }
76        format = ((format & ~0x9010) | AUDIO_U8);
77
78        cvt->len_cvt /= 2;
79
80        if ( cvt->filters[++cvt->filter_index] ) {
81                cvt->filters[cvt->filter_index](cvt, format);
82        }
83}
Note: See TracBrowser for help on using the repository browser.