annotate libaf/af_mp.c @ 13729:045dbaccaccc

crash with Y8 colourspace fixed
author reimar
date Thu, 21 Oct 2004 16:47:42 +0000
parents d40a1dfbf1d9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8167
e8832e66babd New features:
anders
parents:
diff changeset
1 #include "af.h"
e8832e66babd New features:
anders
parents:
diff changeset
2
e8832e66babd New features:
anders
parents:
diff changeset
3 /* Decodes the format from mplayer format to libaf format */
e8832e66babd New features:
anders
parents:
diff changeset
4 int af_format_decode(int ifmt)
e8832e66babd New features:
anders
parents:
diff changeset
5 {
e8832e66babd New features:
anders
parents:
diff changeset
6 int ofmt = ~0;
e8832e66babd New features:
anders
parents:
diff changeset
7 // Check input ifmt
e8832e66babd New features:
anders
parents:
diff changeset
8 switch(ifmt){
e8832e66babd New features:
anders
parents:
diff changeset
9 case(AFMT_U8):
e8832e66babd New features:
anders
parents:
diff changeset
10 ofmt = AF_FORMAT_LE|AF_FORMAT_US; break;
e8832e66babd New features:
anders
parents:
diff changeset
11 case(AFMT_S8):
e8832e66babd New features:
anders
parents:
diff changeset
12 ofmt = AF_FORMAT_LE|AF_FORMAT_SI; break;
e8832e66babd New features:
anders
parents:
diff changeset
13 case(AFMT_S16_LE):
e8832e66babd New features:
anders
parents:
diff changeset
14 ofmt = AF_FORMAT_LE|AF_FORMAT_SI; break;
e8832e66babd New features:
anders
parents:
diff changeset
15 case(AFMT_S16_BE):
e8832e66babd New features:
anders
parents:
diff changeset
16 ofmt = AF_FORMAT_BE|AF_FORMAT_SI; break;
e8832e66babd New features:
anders
parents:
diff changeset
17 case(AFMT_U16_LE):
e8832e66babd New features:
anders
parents:
diff changeset
18 ofmt = AF_FORMAT_LE|AF_FORMAT_US; break;
e8832e66babd New features:
anders
parents:
diff changeset
19 case(AFMT_U16_BE):
e8832e66babd New features:
anders
parents:
diff changeset
20 ofmt = AF_FORMAT_BE|AF_FORMAT_US; break;
13552
d40a1dfbf1d9 make use of new defines: 24 and 32bit integer types
alex
parents: 12667
diff changeset
21 case(AFMT_S24_LE):
d40a1dfbf1d9 make use of new defines: 24 and 32bit integer types
alex
parents: 12667
diff changeset
22 ofmt = AF_FORMAT_LE|AF_FORMAT_SI; break;
d40a1dfbf1d9 make use of new defines: 24 and 32bit integer types
alex
parents: 12667
diff changeset
23 case(AFMT_S24_BE):
d40a1dfbf1d9 make use of new defines: 24 and 32bit integer types
alex
parents: 12667
diff changeset
24 ofmt = AF_FORMAT_BE|AF_FORMAT_SI; break;
d40a1dfbf1d9 make use of new defines: 24 and 32bit integer types
alex
parents: 12667
diff changeset
25 case(AFMT_U24_LE):
d40a1dfbf1d9 make use of new defines: 24 and 32bit integer types
alex
parents: 12667
diff changeset
26 ofmt = AF_FORMAT_LE|AF_FORMAT_US; break;
d40a1dfbf1d9 make use of new defines: 24 and 32bit integer types
alex
parents: 12667
diff changeset
27 case(AFMT_U24_BE):
d40a1dfbf1d9 make use of new defines: 24 and 32bit integer types
alex
parents: 12667
diff changeset
28 ofmt = AF_FORMAT_BE|AF_FORMAT_US; break;
8167
e8832e66babd New features:
anders
parents:
diff changeset
29 case(AFMT_S32_LE):
e8832e66babd New features:
anders
parents:
diff changeset
30 ofmt = AF_FORMAT_LE|AF_FORMAT_SI; break;
e8832e66babd New features:
anders
parents:
diff changeset
31 case(AFMT_S32_BE):
e8832e66babd New features:
anders
parents:
diff changeset
32 ofmt = AF_FORMAT_BE|AF_FORMAT_SI; break;
13552
d40a1dfbf1d9 make use of new defines: 24 and 32bit integer types
alex
parents: 12667
diff changeset
33 case(AFMT_U32_LE):
d40a1dfbf1d9 make use of new defines: 24 and 32bit integer types
alex
parents: 12667
diff changeset
34 ofmt = AF_FORMAT_LE|AF_FORMAT_US; break;
d40a1dfbf1d9 make use of new defines: 24 and 32bit integer types
alex
parents: 12667
diff changeset
35 case(AFMT_U32_BE):
d40a1dfbf1d9 make use of new defines: 24 and 32bit integer types
alex
parents: 12667
diff changeset
36 ofmt = AF_FORMAT_BE|AF_FORMAT_US; break;
8167
e8832e66babd New features:
anders
parents:
diff changeset
37 case(AFMT_IMA_ADPCM):
e8832e66babd New features:
anders
parents:
diff changeset
38 ofmt = AF_FORMAT_IMA_ADPCM; break;
e8832e66babd New features:
anders
parents:
diff changeset
39 case(AFMT_MU_LAW):
e8832e66babd New features:
anders
parents:
diff changeset
40 ofmt = AF_FORMAT_MU_LAW; break;
e8832e66babd New features:
anders
parents:
diff changeset
41 case(AFMT_A_LAW):
e8832e66babd New features:
anders
parents:
diff changeset
42 ofmt = AF_FORMAT_A_LAW; break;
e8832e66babd New features:
anders
parents:
diff changeset
43 case(AFMT_MPEG):
e8832e66babd New features:
anders
parents:
diff changeset
44 ofmt = AF_FORMAT_MPEG2; break;
e8832e66babd New features:
anders
parents:
diff changeset
45 case(AFMT_AC3):
e8832e66babd New features:
anders
parents:
diff changeset
46 ofmt = AF_FORMAT_AC3; break;
8233
1205e37a3ab2 Adding support for AFMT_FLOAT
anders
parents: 8167
diff changeset
47 case(AFMT_FLOAT):
8952
2369087bb777 Fix for endianess conversion if input to libaf is float
anders
parents: 8233
diff changeset
48 ofmt = AF_FORMAT_F | AF_FORMAT_NE; break;
8167
e8832e66babd New features:
anders
parents:
diff changeset
49 default:
12667
alex
parents: 12478
diff changeset
50 if ((ifmt & AFMT_AF_FLAGS) == AFMT_AF_FLAGS) {
12478
7f8eb5f6814a support for 24 bit pcm/wav files
reimar
parents: 8993
diff changeset
51 ofmt = ifmt & ~AFMT_AF_FLAGS;
7f8eb5f6814a support for 24 bit pcm/wav files
reimar
parents: 8993
diff changeset
52 break;
7f8eb5f6814a support for 24 bit pcm/wav files
reimar
parents: 8993
diff changeset
53 }
8167
e8832e66babd New features:
anders
parents:
diff changeset
54 //This can not happen ....
e8832e66babd New features:
anders
parents:
diff changeset
55 af_msg(AF_MSG_FATAL,"Unrecognized input audio format %i\n",ifmt);
e8832e66babd New features:
anders
parents:
diff changeset
56 break;
e8832e66babd New features:
anders
parents:
diff changeset
57 }
e8832e66babd New features:
anders
parents:
diff changeset
58 return ofmt;
e8832e66babd New features:
anders
parents:
diff changeset
59 }
8993
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
60
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
61 /* Encodes the format from libaf format to mplayer (OSS) format */
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
62 int af_format_encode(void* fmtp)
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
63 {
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
64 af_data_t* fmt=(af_data_t*) fmtp;
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
65 switch(fmt->format&AF_FORMAT_SPECIAL_MASK){
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
66 case 0: // PCM:
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
67 if((fmt->format&AF_FORMAT_POINT_MASK)==AF_FORMAT_I){
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
68 if((fmt->format&AF_FORMAT_SIGN_MASK)==AF_FORMAT_SI){
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
69 // signed int PCM:
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
70 switch(fmt->bps){
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
71 case 1: return AFMT_S8;
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
72 case 2: return (fmt->format&AF_FORMAT_LE) ? AFMT_S16_LE : AFMT_S16_BE;
13552
d40a1dfbf1d9 make use of new defines: 24 and 32bit integer types
alex
parents: 12667
diff changeset
73 case 3: return (fmt->format&AF_FORMAT_LE) ? AFMT_S24_LE : AFMT_S24_BE;
8993
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
74 case 4: return (fmt->format&AF_FORMAT_LE) ? AFMT_S32_LE : AFMT_S32_BE;
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
75 }
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
76 } else {
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
77 // unsigned int PCM:
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
78 switch(fmt->bps){
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
79 case 1: return AFMT_U8;
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
80 case 2: return (fmt->format&AF_FORMAT_LE) ? AFMT_U16_LE : AFMT_U16_BE;
13552
d40a1dfbf1d9 make use of new defines: 24 and 32bit integer types
alex
parents: 12667
diff changeset
81 case 3: return (fmt->format&AF_FORMAT_LE) ? AFMT_U24_LE : AFMT_U24_BE;
d40a1dfbf1d9 make use of new defines: 24 and 32bit integer types
alex
parents: 12667
diff changeset
82 case 4: return (fmt->format&AF_FORMAT_LE) ? AFMT_U32_LE : AFMT_U32_BE;
8993
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
83 }
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
84 }
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
85 } else {
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
86 // float PCM:
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
87 return AFMT_FLOAT; // FIXME?
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
88 }
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
89 break;
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
90 case AF_FORMAT_MU_LAW: return AFMT_MU_LAW;
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
91 case AF_FORMAT_A_LAW: return AFMT_A_LAW;
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
92 case AF_FORMAT_MPEG2: return AFMT_MPEG;
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
93 case AF_FORMAT_AC3: return AFMT_AC3;
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
94 case AF_FORMAT_IMA_ADPCM: return AFMT_IMA_ADPCM;
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
95 }
12478
7f8eb5f6814a support for 24 bit pcm/wav files
reimar
parents: 8993
diff changeset
96 return (fmt->format | AFMT_AF_FLAGS);
8993
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
97 }
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
98