annotate libaf/af_mp.c @ 12877:e427e3cc26c1

skip ecc only if present, patch by Alexis Durelle <alexis.durelle@cen.cnamts.fr> (needed for the Aiptek DV3500 camera)
author alex
date Wed, 21 Jul 2004 08:54:39 +0000
parents 265925e642e2
children d40a1dfbf1d9
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;
e8832e66babd New features:
anders
parents:
diff changeset
21 case(AFMT_S32_LE):
e8832e66babd New features:
anders
parents:
diff changeset
22 ofmt = AF_FORMAT_LE|AF_FORMAT_SI; break;
e8832e66babd New features:
anders
parents:
diff changeset
23 case(AFMT_S32_BE):
e8832e66babd New features:
anders
parents:
diff changeset
24 ofmt = AF_FORMAT_BE|AF_FORMAT_SI; break;
e8832e66babd New features:
anders
parents:
diff changeset
25 case(AFMT_IMA_ADPCM):
e8832e66babd New features:
anders
parents:
diff changeset
26 ofmt = AF_FORMAT_IMA_ADPCM; break;
e8832e66babd New features:
anders
parents:
diff changeset
27 case(AFMT_MU_LAW):
e8832e66babd New features:
anders
parents:
diff changeset
28 ofmt = AF_FORMAT_MU_LAW; break;
e8832e66babd New features:
anders
parents:
diff changeset
29 case(AFMT_A_LAW):
e8832e66babd New features:
anders
parents:
diff changeset
30 ofmt = AF_FORMAT_A_LAW; break;
e8832e66babd New features:
anders
parents:
diff changeset
31 case(AFMT_MPEG):
e8832e66babd New features:
anders
parents:
diff changeset
32 ofmt = AF_FORMAT_MPEG2; break;
e8832e66babd New features:
anders
parents:
diff changeset
33 case(AFMT_AC3):
e8832e66babd New features:
anders
parents:
diff changeset
34 ofmt = AF_FORMAT_AC3; break;
8233
1205e37a3ab2 Adding support for AFMT_FLOAT
anders
parents: 8167
diff changeset
35 case(AFMT_FLOAT):
8952
2369087bb777 Fix for endianess conversion if input to libaf is float
anders
parents: 8233
diff changeset
36 ofmt = AF_FORMAT_F | AF_FORMAT_NE; break;
8167
e8832e66babd New features:
anders
parents:
diff changeset
37 default:
12667
alex
parents: 12478
diff changeset
38 if ((ifmt & AFMT_AF_FLAGS) == AFMT_AF_FLAGS) {
12478
7f8eb5f6814a support for 24 bit pcm/wav files
reimar
parents: 8993
diff changeset
39 ofmt = ifmt & ~AFMT_AF_FLAGS;
7f8eb5f6814a support for 24 bit pcm/wav files
reimar
parents: 8993
diff changeset
40 break;
7f8eb5f6814a support for 24 bit pcm/wav files
reimar
parents: 8993
diff changeset
41 }
8167
e8832e66babd New features:
anders
parents:
diff changeset
42 //This can not happen ....
e8832e66babd New features:
anders
parents:
diff changeset
43 af_msg(AF_MSG_FATAL,"Unrecognized input audio format %i\n",ifmt);
e8832e66babd New features:
anders
parents:
diff changeset
44 break;
e8832e66babd New features:
anders
parents:
diff changeset
45 }
e8832e66babd New features:
anders
parents:
diff changeset
46 return ofmt;
e8832e66babd New features:
anders
parents:
diff changeset
47 }
8993
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
48
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
49 /* 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
50 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
51 {
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
52 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
53 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
54 case 0: // PCM:
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
55 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
56 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
57 // signed int PCM:
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
58 switch(fmt->bps){
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
59 case 1: return AFMT_S8;
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
60 case 2: return (fmt->format&AF_FORMAT_LE) ? AFMT_S16_LE : AFMT_S16_BE;
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
61 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
62 }
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
63 } else {
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
64 // unsigned int PCM:
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
65 switch(fmt->bps){
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
66 case 1: return AFMT_U8;
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
67 case 2: return (fmt->format&AF_FORMAT_LE) ? AFMT_U16_LE : AFMT_U16_BE;
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
68 // case 4: return (fmt->format&AF_FORMAT_LE) ? AFMT_U32_LE : AFMT_U32_BE;
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
69 }
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
70 }
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
71 } else {
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
72 // float PCM:
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
73 return AFMT_FLOAT; // FIXME?
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
74 }
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
75 break;
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
76 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
77 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
78 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
79 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
80 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
81 }
12478
7f8eb5f6814a support for 24 bit pcm/wav files
reimar
parents: 8993
diff changeset
82 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
83 }
a6615e7bc710 added af_format_encode() to convert sample format from libaf to mplayer (OSS)
arpi
parents: 8952
diff changeset
84