[Mplayerxp-cvslog] SF.net SVN: mplayerxp:[117] mplayerxp
Brought to you by:
olov
From: <nic...@us...> - 2010-01-21 18:28:03
|
Revision: 117 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=117&view=rev Author: nickols_k Date: 2010-01-21 18:27:56 +0000 (Thu, 21 Jan 2010) Log Message: ----------- minor fixes Modified Paths: -------------- mplayerxp/libmpcodecs/ad_mp3.c mplayerxp/postproc/dsp_accel.h mplayerxp/pvector/pvector.h mplayerxp/pvector/pvector_f32_x86.h Modified: mplayerxp/libmpcodecs/ad_mp3.c =================================================================== --- mplayerxp/libmpcodecs/ad_mp3.c 2010-01-21 14:58:37 UTC (rev 116) +++ mplayerxp/libmpcodecs/ad_mp3.c 2010-01-21 18:27:56 UTC (rev 117) @@ -212,8 +212,8 @@ #define mpg123_current_decoder(a) (*mpg123_current_decoder_ptr)(a) static int (*mpg123_decode_frame_ptr)(mpg123_handle *mh, off_t *num, unsigned char **audio, size_t *bytes); #define mpg123_decode_frame(a,b,c,d) (*mpg123_decode_frame_ptr)(a,b,c,d) -static off_t (*mpg123_tell_ptr)(mpg123_handle *mh); -#define mpg123_tell(a) (*mpg123_tell_ptr)(a) +static off_t (*mpg123_tell_stream_ptr)(mpg123_handle *mh); +#define mpg123_tell_stream(a) (*mpg123_tell_stream_ptr)(a) static void *dll_handle; @@ -234,13 +234,13 @@ mpg123_decode_ptr = ld_sym(dll_handle,"mpg123_decode"); mpg123_read_ptr = ld_sym(dll_handle,"mpg123_read"); mpg123_feed_ptr = ld_sym(dll_handle,"mpg123_feed"); - mpg123_tell_ptr = ld_sym(dll_handle,"mpg123_tell"); + mpg123_tell_stream_ptr = ld_sym(dll_handle,"mpg123_tell_stream"); mpg123_decode_frame_ptr = ld_sym(dll_handle,"mpg123_decode_frame"); return mpg123_decode_ptr && mpg123_init_ptr && mpg123_exit_ptr && mpg123_new_ptr && mpg123_delete_ptr && mpg123_plain_strerror_ptr && mpg123_open_feed_ptr && mpg123_close_ptr && mpg123_getformat_ptr && mpg123_param_ptr && mpg123_info_ptr && mpg123_current_decoder_ptr && - mpg123_read_ptr && mpg123_feed_ptr && mpg123_decode_frame_ptr && mpg123_tell_ptr; + mpg123_read_ptr && mpg123_feed_ptr && mpg123_decode_frame_ptr && mpg123_tell_stream_ptr; } @@ -374,7 +374,7 @@ */ MSG_DBG2("mp3_decode start: pts=%f\n",*pts); do { - cpos = mpg123_tell(priv->mh); + cpos = mpg123_tell_stream(priv->mh); *pts = priv->pts+((float)(cpos-priv->pos)/sh->i_bps); err=mpg123_decode_frame(priv->mh,&offset,&outdata,&done); if(!((err==MPG123_OK)||(err==MPG123_NEED_MORE))) { @@ -388,7 +388,7 @@ float apts=0.; indata_size=ds_get_packet_r(sh->ds,&indata,&apts); if(indata_size<0) return 0; - priv->pos = mpg123_tell(priv->mh); + priv->pos = mpg123_tell_stream(priv->mh); priv->pts = apts; mpg123_feed(priv->mh,indata,indata_size); } Modified: mplayerxp/postproc/dsp_accel.h =================================================================== --- mplayerxp/postproc/dsp_accel.h 2010-01-21 14:58:37 UTC (rev 116) +++ mplayerxp/postproc/dsp_accel.h 2010-01-21 18:27:56 UTC (rev 117) @@ -9,36 +9,34 @@ unsigned i; i = 0; #ifdef HAVE_INT_PVECTOR - for(;i<len;i++) { - ((uint16_t*)out_data)[i]=((uint16_t)((uint8_t*)in_data)[i])<<8; - if((((long)out_data)&(__IVEC_SIZE-1))==0) break; - } - if((len-i)>=__IVEC_SIZE) - for(;i<len;i+=__IVEC_SIZE){ - __ivec ind,itmp[2]; - ind = _ivec_loadu(&((uint8_t *)in_data)[i]); + for(;i<len;i++) { + ((uint16_t*)out_data)[i]=((uint16_t)((const uint8_t*)in_data)[i])<<8; + if((((long)out_data)&(__IVEC_SIZE-1))==0) break; + } + if((len-i)>=__IVEC_SIZE) + for(;i<len;i+=__IVEC_SIZE){ + __ivec ind,itmp[2]; + ind = _ivec_loadu(&((const uint8_t *)in_data)[i]); #if 0 /* slower but portable on non-x86 CPUs version */ - itmp[0]= _ivec_sll_s16_imm(_ivec_u16_from_lou8(ind),8); - itmp[1]= _ivec_sll_s16_imm(_ivec_u16_from_hiu8(ind),8); + itmp[0]= _ivec_sll_s16_imm(_ivec_u16_from_lou8(ind),8); + itmp[1]= _ivec_sll_s16_imm(_ivec_u16_from_hiu8(ind),8); #else - itmp[0]= _ivec_interleave_lo_u8(izero,ind); - itmp[1]= _ivec_interleave_hi_u8(izero,ind); + itmp[0]= _ivec_interleave_lo_u8(izero,ind); + itmp[1]= _ivec_interleave_hi_u8(izero,ind); #endif - if(final) { - _ivec_stream(&((uint16_t*)out_data)[i],itmp[0]); - _ivec_stream(&((uint16_t*)out_data)[i+__IVEC_SIZE/2],itmp[1]); - } else { - _ivec_storea(&((uint16_t*)out_data)[i],itmp[0]); - _ivec_storea(&((uint16_t*)out_data)[i+__IVEC_SIZE/2],itmp[1]); - } + if(final) { + _ivec_stream(&((uint16_t*)out_data)[i],itmp[0]); + _ivec_stream(&((uint16_t*)out_data)[i+__IVEC_SIZE/2],itmp[1]); + } else { + _ivec_storea(&((uint16_t*)out_data)[i],itmp[0]); + _ivec_storea(&((uint16_t*)out_data)[i+__IVEC_SIZE/2],itmp[1]); } -#endif - for(;i<len;i++) - ((uint16_t*)out_data)[i]=((uint16_t)((uint8_t*)in_data)[i])<<8; -#ifdef HAVE_INT_PVECTOR + } _ivec_empty(); _ivec_sfence(); #endif + for(;i<len;i++) + ((uint16_t*)out_data)[i]=((uint16_t)((const uint8_t*)in_data)[i])<<8; } static void __FASTCALL__ PVECTOR_RENAME(int16_to_int8)(const int16_t* in_data, int8_t* out_data, unsigned len, int final) @@ -47,27 +45,25 @@ i = 0; #ifdef HAVE_INT_PVECTOR for(;i<len;i++) { - ((uint8_t*)out_data)[i]=(uint8_t)((((uint16_t*)in_data)[i])>>8); + ((uint8_t*)out_data)[i]=(uint8_t)((((const uint16_t*)in_data)[i])>>8); if((((long)out_data)&(__IVEC_SIZE-1))==0) break; } if((len-i)>=__IVEC_SIZE) for(;i<len;i+=__IVEC_SIZE){ __ivec outd,itmp[2]; - itmp[0] = _ivec_sra_s16_imm(_ivec_loadu(&((uint16_t*)in_data)[i]),8); - itmp[1] = _ivec_sra_s16_imm(_ivec_loadu(&((uint16_t*)in_data)[i+__IVEC_SIZE/2]),8); + itmp[0] = _ivec_sra_s16_imm(_ivec_loadu(&((const uint16_t*)in_data)[i]),8); + itmp[1] = _ivec_sra_s16_imm(_ivec_loadu(&((const uint16_t*)in_data)[i+__IVEC_SIZE/2]),8); outd = _ivec_s8_from_s16(itmp[0],itmp[1]); if(final) _ivec_stream(&((uint8_t*)out_data)[i],outd); else _ivec_storea(&((uint8_t*)out_data)[i],outd); } -#endif - for(;i<len;i++) - ((uint8_t*)out_data)[i]=(uint8_t)((((uint16_t*)in_data)[i])>>8); -#ifdef HAVE_INT_PVECTOR _ivec_empty(); _ivec_sfence(); #endif + for(;i<len;i++) + ((uint8_t*)out_data)[i]=(uint8_t)((((const uint16_t*)in_data)[i])>>8); } static void __FASTCALL__ PVECTOR_RENAME(int16_to_int32)(const int16_t* in_data, int32_t* out_data, unsigned len, int final) @@ -82,14 +78,14 @@ j=0; len_mm=len&(~(__IVEC_SIZE-1)); for(;i<len;i++,j+=2){ - ((uint32_t*)out_data)[i]=((uint32_t)((uint16_t*)in_data)[i])<<16; + ((uint32_t*)out_data)[i]=((uint32_t)((const uint16_t*)in_data)[i])<<16; if((((long)out_data)&(__IVEC_SIZE-1))==0) break; } if((len_mm-i)>=__IVEC_SIZE) for(;i<len_mm;i+=__IVEC_SIZE/2,j+=__IVEC_SIZE) { __ivec ind,tmp[2]; - ind = _ivec_loadu(&((uint8_t *)in_data)[j]); + ind = _ivec_loadu(&((const uint8_t *)in_data)[j]); #if 0 /* slower but portable on non-x86 CPUs version */ tmp[0]= _ivec_sll_s32_imm(_ivec_u32_from_lou16(ind),16); tmp[1]= _ivec_sll_s32_imm(_ivec_u32_from_hiu16(ind),16); @@ -105,48 +101,43 @@ _ivec_storea(&((uint8_t *)out_data)[j*2+__IVEC_SIZE],tmp[1]); } } -#endif - for(;i<len;i++) - ((uint32_t*)out_data)[i]=((uint32_t)((uint16_t*)in_data)[i])<<16; -#ifdef HAVE_INT_PVECTOR _ivec_sfence(); _ivec_empty(); #endif + for(;i<len;i++) + ((uint32_t*)out_data)[i]=((uint32_t)((const uint16_t*)in_data)[i])<<16; } static void __FASTCALL__ PVECTOR_RENAME(int32_to_int16)(const int32_t* in_data, int16_t* out_data, unsigned len, int final) { #ifdef HAVE_INT_PVECTOR - unsigned len_mm,j; + unsigned j; #endif unsigned i; i=0; #ifdef HAVE_INT_PVECTOR j=0; - len_mm=len&(~(__IVEC_SIZE-1)); for(;i<len;i++,j+=2){ - ((uint16_t*)out_data)[i]=(uint16_t)((((uint32_t*)in_data)[i])>>16); + ((uint16_t*)out_data)[i]=(uint16_t)((((const uint32_t*)in_data)[i])>>16); if((((long)out_data)&(__IVEC_SIZE-1))==0) break; } if((len-i)>=__IVEC_SIZE) - for(;i<len_mm;i+=__IVEC_SIZE/2,j+=__IVEC_SIZE) + for(;i<len;i+=__IVEC_SIZE/2,j+=__IVEC_SIZE) { __ivec ind[2],tmp; - ind[0]= _ivec_sra_s32_imm(_ivec_loadu(&((uint8_t *)in_data)[j*2]),16); - ind[1]= _ivec_sra_s32_imm(_ivec_loadu(&((uint8_t *)in_data)[j*2+__IVEC_SIZE]),16); + ind[0]= _ivec_sra_s32_imm(_ivec_loadu(&((const uint8_t *)in_data)[j*2]),16); + ind[1]= _ivec_sra_s32_imm(_ivec_loadu(&((const uint8_t *)in_data)[j*2+__IVEC_SIZE]),16); tmp = _ivec_s16_from_s32(ind[0],ind[1]); if(final) _ivec_stream(&((uint8_t *)out_data)[j],tmp); else _ivec_storea(&((uint8_t *)out_data)[j],tmp); } -#endif - for(;i<len;i++) - ((uint16_t*)out_data)[i]=(uint16_t)((((uint32_t*)in_data)[i])>>16); -#ifdef HAVE_INT_PVECTOR _ivec_sfence(); _ivec_empty(); #endif + for(;i<len;i++) + ((uint16_t*)out_data)[i]=(uint16_t)((((const uint32_t*)in_data)[i])>>16); } static void __FASTCALL__ PVECTOR_RENAME(change_bps)(const void* in_data, void* out_data, unsigned len, unsigned inbps, unsigned outbps,int final) @@ -312,27 +303,35 @@ #endif } -static void __FASTCALL__ PVECTOR_RENAME(float_to_int32)(float* in, int32_t* out, unsigned len, int final) +static void __FASTCALL__ PVECTOR_RENAME(float_to_int32)(const float* in, int32_t* out, unsigned len, int final) { register unsigned i; float ftmp; #ifdef HAVE_F32_PVECTOR - __f32vec int_max; + unsigned len_mm; + __f32vec int_max,plus1,minus1; #endif i=0; #ifdef HAVE_F32_PVECTOR - int_max = _f32vec_broadcast(INT_MAX-1); + int_max = _f32vec_broadcast(INT32_MAX-1); + /* SSE engine sometime has unpredictable behaviour. So downscale volume on 1% here. */ + plus1 = _f32vec_broadcast(+0.99); + minus1= _f32vec_broadcast(-0.99); for(;i<len;i++) { - ftmp=((float*)in)[i]; + ftmp=((const float*)in)[i]; SATURATE(ftmp,-1.0,+1.0); ((int32_t*)out)[i]=(int32_t)lrintf((INT_MAX-1)*ftmp); if((((long)out)&(__F32VEC_SIZE-1))==0) break; } _ivec_empty(); - if((len-i)>=__F32VEC_SIZE) - for(;i<len;i+=__F32VEC_SIZE/sizeof(float)) { + len_mm=len&(~(__F32VEC_SIZE-1)); + if((len_mm-i)>=__F32VEC_SIZE/sizeof(float)) + for(;i<len_mm;i+=__F32VEC_SIZE/sizeof(float)) { __f32vec tmp; - tmp = _f32vec_mul(int_max,_f32vec_loadu(&((float*)in)[i])); + tmp = _f32vec_loadu(&((const float*)in)[i]); + tmp = _f32vec_min(tmp,plus1); + tmp = _f32vec_max(tmp,minus1); + tmp = _f32vec_mul(int_max,tmp); if(final) _f32vec_to_s32_stream(&((int32_t*)out)[i],tmp); else @@ -342,14 +341,10 @@ _ivec_empty(); #endif for(;i<len;i++) { - ftmp=((float*)in)[i]; - SATURATE(ftmp,-1.0,+1.0); - ((int32_t*)out)[i]=(int32_t)lrintf((INT_MAX-1)*ftmp); + ftmp=((const float*)in)[i]; + SATURATE(ftmp,-0.99,+0.99); + ((int32_t*)out)[i]=(int32_t)lrintf((INT32_MAX-1)*ftmp); } -#ifdef HAVE_INT_PVECTOR - _ivec_sfence(); - _ivec_empty(); -#endif } static void __FASTCALL__ PVECTOR_RENAME(int32_to_float)(int32_t* in, float* out, unsigned len, int final) @@ -360,14 +355,14 @@ register unsigned i=0; #ifdef HAVE_F32_PVECTOR for(;i<len;i++) { - ((float*)out)[i]=(1.0/INT_MAX)*((float)((int32_t*)in)[i]); + ((float*)out)[i]=(1.0/INT_MAX)*((float)((const int32_t*)in)[i]); if((((long)out)&(__F32VEC_SIZE-1))==0) break; } _ivec_empty(); if((len-i)>=__F32VEC_SIZE) for(;i<len;i+=__F32VEC_SIZE/sizeof(float)) { __f32vec tmp; - tmp = _f32vec_mul(rev_imax,_f32vec_from_s32u(&((int32_t*)in)[i])); + tmp = _f32vec_mul(rev_imax,_f32vec_from_s32u(&((const int32_t*)in)[i])); if(final) _f32vec_stream(&((float*)out)[i],tmp); else @@ -377,11 +372,7 @@ _ivec_empty(); #endif for(;i<len;i++) - ((float*)out)[i]=(1.0/INT_MAX)*((float)((int32_t*)in)[i]); -#ifdef HAVE_INT_PVECTOR - _ivec_sfence(); - _ivec_empty(); -#endif + ((float*)out)[i]=(1.0/INT_MAX)*((float)((const int32_t*)in)[i]); } static void __FASTCALL__ PVECTOR_RENAME(float2int)(void* in, void* out, int len, int bps,int final) Modified: mplayerxp/pvector/pvector.h =================================================================== --- mplayerxp/pvector/pvector.h 2010-01-21 14:58:37 UTC (rev 116) +++ mplayerxp/pvector/pvector.h 2010-01-21 18:27:56 UTC (rev 117) @@ -197,4 +197,9 @@ __f32vec _f32vec_sub(__f32vec f1, __f32vec f2); // sub: f1-f2 __f32vec _f32vec_mul(__f32vec f1, __f32vec f2); // mul: f1*f2 __f32vec _f32vec_div(__f32vec f1, __f32vec f2); // div: f1/f2 + + COMPARE engine: + --------------- + __f32vec _f32vec_min(__f32vec f1, __f32vec f2); // MIN(f1,f2) + __f32vec _f32vec_max(__f32vec f1, __f32vec f2); // MAX(f1,f2) */ Modified: mplayerxp/pvector/pvector_f32_x86.h =================================================================== --- mplayerxp/pvector/pvector_f32_x86.h 2010-01-21 14:58:37 UTC (rev 116) +++ mplayerxp/pvector/pvector_f32_x86.h 2010-01-21 18:27:56 UTC (rev 117) @@ -289,3 +289,31 @@ } #undef _f32vec_div #define _f32vec_div PVECTOR_RENAME(f32_div) + +extern __inline __f32vec __attribute__((__gnu_inline__, __always_inline__)) +PVECTOR_RENAME(f32_max)(__f32vec f1,__f32vec f2) +{ +#ifdef OPTIMIZE_AVX + return _mm256_max_ps(f1,f2); +#elif defined( OPTIMIZE_SSE ) + return _mm_max_ps(f1,f2); +#else + return _m_pfmax(f1,f2); +#endif +} +#undef _f32vec_max +#define _f32vec_max PVECTOR_RENAME(f32_max) + +extern __inline __f32vec __attribute__((__gnu_inline__, __always_inline__)) +PVECTOR_RENAME(f32_min)(__f32vec f1,__f32vec f2) +{ +#ifdef OPTIMIZE_AVX + return _mm256_min_ps(f1,f2); +#elif defined( OPTIMIZE_SSE ) + return _mm_min_ps(f1,f2); +#else + return _m_pfmin(f1,f2); +#endif +} +#undef _f32vec_min +#define _f32vec_min PVECTOR_RENAME(f32_min) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |