summaryrefslogtreecommitdiffstats
path: root/libaf/af_mp.c
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-01-18 17:31:22 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-01-18 17:31:22 +0000
commit8fd2c262e41a39672c4af9c1836d8d1399e072d3 (patch)
treed9df026d7819bdc02adbbb77e5a30d7482343f68 /libaf/af_mp.c
parent97688e35055fe696f23f95f6865a270f66e2bb0f (diff)
downloadmpv-8fd2c262e41a39672c4af9c1836d8d1399e072d3.tar.bz2
mpv-8fd2c262e41a39672c4af9c1836d8d1399e072d3.tar.xz
added af_format_encode() to convert sample format from libaf to mplayer (OSS)
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@8994 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libaf/af_mp.c')
-rw-r--r--libaf/af_mp.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/libaf/af_mp.c b/libaf/af_mp.c
index 0ad0f6570e..835cba73a8 100644
--- a/libaf/af_mp.c
+++ b/libaf/af_mp.c
@@ -41,3 +41,40 @@ int af_format_decode(int ifmt)
}
return ofmt;
}
+
+/* Encodes the format from libaf format to mplayer (OSS) format */
+int af_format_encode(void* fmtp)
+{
+ af_data_t* fmt=(af_data_t*) fmtp;
+ switch(fmt->format&AF_FORMAT_SPECIAL_MASK){
+ case 0: // PCM:
+ if((fmt->format&AF_FORMAT_POINT_MASK)==AF_FORMAT_I){
+ if((fmt->format&AF_FORMAT_SIGN_MASK)==AF_FORMAT_SI){
+ // signed int PCM:
+ switch(fmt->bps){
+ case 1: return AFMT_S8;
+ case 2: return (fmt->format&AF_FORMAT_LE) ? AFMT_S16_LE : AFMT_S16_BE;
+ case 4: return (fmt->format&AF_FORMAT_LE) ? AFMT_S32_LE : AFMT_S32_BE;
+ }
+ } else {
+ // unsigned int PCM:
+ switch(fmt->bps){
+ case 1: return AFMT_U8;
+ case 2: return (fmt->format&AF_FORMAT_LE) ? AFMT_U16_LE : AFMT_U16_BE;
+// case 4: return (fmt->format&AF_FORMAT_LE) ? AFMT_U32_LE : AFMT_U32_BE;
+ }
+ }
+ } else {
+ // float PCM:
+ return AFMT_FLOAT; // FIXME?
+ }
+ break;
+ case AF_FORMAT_MU_LAW: return AFMT_MU_LAW;
+ case AF_FORMAT_A_LAW: return AFMT_A_LAW;
+ case AF_FORMAT_MPEG2: return AFMT_MPEG;
+ case AF_FORMAT_AC3: return AFMT_AC3;
+ case AF_FORMAT_IMA_ADPCM: return AFMT_IMA_ADPCM;
+ }
+ return AFMT_S16_LE; // shouldn't happen
+}
+