--- MPlayer-cvs/libaf/af_format.c 2003-01-18 18:31:58.000000000 +0100 +++ MPlayer-test/libaf/af_format.c 2004-04-29 18:39:48.000000000 +0200 @@ -131,9 +131,9 @@ // Sanity check for bytes per sample int check_bps(int bps) { - if(bps != 4 && bps != 2 && bps != 1){ + if(bps != 4 && bps != 3 && bps != 2 && bps != 1){ af_msg(AF_MSG_ERROR,"[format] The number of bytes per sample" - " must be 1, 2 or 4. Current value is %i \n",bps); + " must be 1, 2, 3 or 4. Current value is %i \n",bps); return AF_ERROR; } return AF_OK; @@ -349,6 +349,30 @@ open }; +static inline uint32_t load24bit(void* data, int pos) { +#if WORDS_BIGENDIAN + return (((uint32_t)((uint8_t*)data)[3*pos])<<24) | + (((uint32_t)((uint8_t*)data)[3*pos+1])<<16) | + (((uint32_t)((uint8_t*)data)[3*pos+2])<<8); +#else + return (((uint32_t)((uint8_t*)data)[3*pos])<<8) | + (((uint32_t)((uint8_t*)data)[3*pos+1])<<16) | + (((uint32_t)((uint8_t*)data)[3*pos+2])<<24); +#endif +} + +static inline void store24bit(void* data, int pos, uint32_t expanded_value) { +#if WORDS_BIGENDIAN + ((uint8_t*)data)[3*pos]=expanded_value>>24; + ((uint8_t*)data)[3*pos+1]=expanded_value>>16; + ((uint8_t*)data)[3*pos+2]=expanded_value>>8; +#else + ((uint8_t*)data)[3*pos]=expanded_value>>8; + ((uint8_t*)data)[3*pos+1]=expanded_value>>16; + ((uint8_t*)data)[3*pos+2]=expanded_value>>24; +#endif +} + // Function implementations used by play static void endian(void* in, void* out, int len, int bps) { @@ -362,6 +386,15 @@ } break; } + case(3):{ + register uint8_t s; + for(i=0;i>8); break; + case(3): + for(i=0;i>24); + break; + case(2): + for(i=0;i>16); + break; + case(4): + for(i=0;i>16); break; + case(3): + for(i=0;i