[Mplayerxp-cvslog] SF.net SVN: mplayerxp:[310] mplayerxp
Brought to you by:
olov
From: <nic...@us...> - 2012-11-09 11:44:00
|
Revision: 310 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=310&view=rev Author: nickols_k Date: 2012-11-09 11:43:47 +0000 (Fri, 09 Nov 2012) Log Message: ----------- use MPXP_Rc in libmpcodecs Modified Paths: -------------- mplayerxp/libmpcodecs/ad.c mplayerxp/libmpcodecs/ad.h mplayerxp/libmpcodecs/ad_a52.c mplayerxp/libmpcodecs/ad_acm.c mplayerxp/libmpcodecs/ad_dca.c mplayerxp/libmpcodecs/ad_dmo.c mplayerxp/libmpcodecs/ad_dshow.c mplayerxp/libmpcodecs/ad_dvdpcm.c mplayerxp/libmpcodecs/ad_faad.c mplayerxp/libmpcodecs/ad_ffmpeg.c mplayerxp/libmpcodecs/ad_hwac3.c mplayerxp/libmpcodecs/ad_libdv.c mplayerxp/libmpcodecs/ad_mp3.c mplayerxp/libmpcodecs/ad_null.c mplayerxp/libmpcodecs/ad_pcm.c mplayerxp/libmpcodecs/ad_qtaudio.c mplayerxp/libmpcodecs/ad_real.c mplayerxp/libmpcodecs/ad_twin.c mplayerxp/libmpcodecs/ad_vorbis.c mplayerxp/libmpcodecs/dec_audio.c mplayerxp/libmpcodecs/dec_video.c mplayerxp/libmpcodecs/dec_video.h mplayerxp/libmpcodecs/vd.c mplayerxp/libmpcodecs/vd.h mplayerxp/libmpcodecs/vd_divx4.c mplayerxp/libmpcodecs/vd_dmo.c mplayerxp/libmpcodecs/vd_dshow.c mplayerxp/libmpcodecs/vd_ffmpeg.c mplayerxp/libmpcodecs/vd_huffyuv.c mplayerxp/libmpcodecs/vd_libdv.c mplayerxp/libmpcodecs/vd_libmpeg2.c mplayerxp/libmpcodecs/vd_mpegpes.c mplayerxp/libmpcodecs/vd_null.c mplayerxp/libmpcodecs/vd_nuv.c mplayerxp/libmpcodecs/vd_qtvideo.c mplayerxp/libmpcodecs/vd_raw.c mplayerxp/libmpcodecs/vd_real.c mplayerxp/libmpcodecs/vd_theora.c mplayerxp/libmpcodecs/vd_vfw.c mplayerxp/libmpcodecs/vd_xanim.c mplayerxp/libmpcodecs/vd_xvid.c mplayerxp/mplayerxp.c Modified: mplayerxp/libmpcodecs/ad.c =================================================================== --- mplayerxp/libmpcodecs/ad.c 2012-11-09 08:44:54 UTC (rev 309) +++ mplayerxp/libmpcodecs/ad.c 2012-11-09 11:43:47 UTC (rev 310) @@ -34,32 +34,31 @@ extern const ad_functions_t mpcodecs_ad_dmo; extern const ad_functions_t mpcodecs_ad_qtaudio; -const ad_functions_t* mpcodecs_ad_drivers[] = -{ - &mpcodecs_ad_null, - &mpcodecs_ad_mp3, - &mpcodecs_ad_a52, - &mpcodecs_ad_dca, - &mpcodecs_ad_hwac3, - &mpcodecs_ad_ffmpeg, - &mpcodecs_ad_pcm, - &mpcodecs_ad_dvdpcm, - &mpcodecs_ad_faad, +const ad_functions_t* mpcodecs_ad_drivers[] = { + &mpcodecs_ad_null, + &mpcodecs_ad_mp3, + &mpcodecs_ad_a52, + &mpcodecs_ad_dca, + &mpcodecs_ad_hwac3, + &mpcodecs_ad_ffmpeg, + &mpcodecs_ad_pcm, + &mpcodecs_ad_dvdpcm, + &mpcodecs_ad_faad, #ifdef HAVE_LIBVORBIS - &mpcodecs_ad_vorbis, + &mpcodecs_ad_vorbis, #endif #ifdef HAVE_LIBDV - &mpcodecs_ad_libdv, + &mpcodecs_ad_libdv, #endif - &mpcodecs_ad_real, + &mpcodecs_ad_real, #ifdef HAVE_WIN32LOADER - &mpcodecs_ad_dshow, - &mpcodecs_ad_twin, - &mpcodecs_ad_msacm, - &mpcodecs_ad_dmo, - &mpcodecs_ad_qtaudio, + &mpcodecs_ad_dshow, + &mpcodecs_ad_twin, + &mpcodecs_ad_msacm, + &mpcodecs_ad_dmo, + &mpcodecs_ad_qtaudio, #endif - NULL + NULL }; static unsigned int nddrivers=sizeof(mpcodecs_ad_drivers)/sizeof(ad_functions_t*); Modified: mplayerxp/libmpcodecs/ad.h =================================================================== --- mplayerxp/libmpcodecs/ad.h 2012-11-09 08:44:54 UTC (rev 309) +++ mplayerxp/libmpcodecs/ad.h 2012-11-09 11:43:47 UTC (rev 310) @@ -23,13 +23,13 @@ /* interface of video decoder drivers */ typedef struct ad_functions_s { - const ad_info_t *info; - const config_t* options;/**< Optional: MPlayerXP's option related */ - int (* __FASTCALL__ preinit)(sh_audio_t *); - int (* __FASTCALL__ init)(sh_audio_t *sh); - void (* __FASTCALL__ uninit)(sh_audio_t *sh); - MPXP_Rc (* control)(sh_audio_t *sh,int cmd,any_t* arg, ...); - unsigned (* __FASTCALL__ decode)(sh_audio_t *sh_audio,unsigned char *buf,unsigned minlen,unsigned maxlen,float *pts); + const ad_info_t* info; + const config_t* options;/**< Optional: MPlayerXP's option related */ + MPXP_Rc (* __FASTCALL__ preinit)(sh_audio_t *); + MPXP_Rc (* __FASTCALL__ init)(sh_audio_t *sh); + void (* __FASTCALL__ uninit)(sh_audio_t *sh); + MPXP_Rc (* control)(sh_audio_t *sh,int cmd,any_t* arg, ...); + unsigned (* __FASTCALL__ decode)(sh_audio_t *sh_audio,unsigned char *buf,unsigned minlen,unsigned maxlen,float *pts); } ad_functions_t; extern const ad_functions_t* mpcodecs_ad_drivers[]; Modified: mplayerxp/libmpcodecs/ad_a52.c =================================================================== --- mplayerxp/libmpcodecs/ad_a52.c 2012-11-09 08:44:54 UTC (rev 309) +++ mplayerxp/libmpcodecs/ad_a52.c 2012-11-09 11:43:47 UTC (rev 310) @@ -45,31 +45,32 @@ }; LIBAD_EXTERN(a52) + int a52_fillbuff(sh_audio_t *sh_audio,float *pts){ -int length=0; -int flags=0; -int sample_rate=0; -int bit_rate=0; -float apts=0.,null_pts; -priv_t *priv=sh_audio->context; + int length=0; + int flags=0; + int sample_rate=0; + int bit_rate=0; + float apts=0.,null_pts; + priv_t *priv=sh_audio->context; sh_audio->a_in_buffer_len=0; /* sync frame:*/ -while(1){ - while(sh_audio->a_in_buffer_len<8){ - int c=demux_getc_r(sh_audio->ds,apts?&null_pts:&apts); - if(c<0) { priv->last_pts=*pts=apts; return -1; } /* EOF*/ - sh_audio->a_in_buffer[sh_audio->a_in_buffer_len++]=c; + while(1){ + while(sh_audio->a_in_buffer_len<8){ + int c=demux_getc_r(sh_audio->ds,apts?&null_pts:&apts); + if(c<0) { priv->last_pts=*pts=apts; return -1; } /* EOF*/ + sh_audio->a_in_buffer[sh_audio->a_in_buffer_len++]=c; + } + if(sh_audio->wtag!=0x2000) swab(sh_audio->a_in_buffer,sh_audio->a_in_buffer,8); + length = a52_syncinfo (sh_audio->a_in_buffer, &flags, &sample_rate, &bit_rate); + if(length>=7 && length<=MAX_AC3_FRAME) break; /* we're done.*/ + /* bad file => resync*/ + if(sh_audio->wtag!=0x2000) swab(sh_audio->a_in_buffer,sh_audio->a_in_buffer,8); + memmove(sh_audio->a_in_buffer,sh_audio->a_in_buffer+1,7); + --sh_audio->a_in_buffer_len; + apts=0; } - if(sh_audio->wtag!=0x2000) swab(sh_audio->a_in_buffer,sh_audio->a_in_buffer,8); - length = a52_syncinfo (sh_audio->a_in_buffer, &flags, &sample_rate, &bit_rate); - if(length>=7 && length<=MAX_AC3_FRAME) break; /* we're done.*/ - /* bad file => resync*/ - if(sh_audio->wtag!=0x2000) swab(sh_audio->a_in_buffer,sh_audio->a_in_buffer,8); - memmove(sh_audio->a_in_buffer,sh_audio->a_in_buffer+1,7); - --sh_audio->a_in_buffer_len; - apts=0; -} MSG_DBG2("a52: len=%d flags=0x%X %d Hz %d bit/s\n",length,flags,sample_rate,bit_rate); sh_audio->rate=sample_rate; sh_audio->i_bps=bit_rate/8; @@ -83,24 +84,24 @@ /* returns: number of available channels*/ static int a52_printinfo(sh_audio_t *sh_audio){ -int flags, sample_rate, bit_rate; -char* mode="unknown"; -int channels=0; - a52_syncinfo (sh_audio->a_in_buffer, &flags, &sample_rate, &bit_rate); - switch(flags&A52_CHANNEL_MASK){ - case A52_CHANNEL: mode="channel"; channels=2; break; - case A52_MONO: mode="mono"; channels=1; break; - case A52_STEREO: mode="stereo"; channels=2; break; - case A52_3F: mode="3f";channels=3;break; - case A52_2F1R: mode="2f+1r";channels=3;break; - case A52_3F1R: mode="3f+1r";channels=4;break; - case A52_2F2R: mode="2f+2r";channels=4;break; - case A52_3F2R: mode="3f+2r";channels=5;break; - case A52_CHANNEL1: mode="channel1"; channels=2; break; - case A52_CHANNEL2: mode="channel2"; channels=2; break; - case A52_DOLBY: mode="dolby"; channels=2; break; - } - MSG_INFO("AC3: %d.%d (%s%s) %d Hz %3.1f kbit/s Out: %u-bit\n", + int flags, sample_rate, bit_rate; + char* mode="unknown"; + int channels=0; + a52_syncinfo (sh_audio->a_in_buffer, &flags, &sample_rate, &bit_rate); + switch(flags&A52_CHANNEL_MASK){ + case A52_CHANNEL: mode="channel"; channels=2; break; + case A52_MONO: mode="mono"; channels=1; break; + case A52_STEREO: mode="stereo"; channels=2; break; + case A52_3F: mode="3f";channels=3;break; + case A52_2F1R: mode="2f+1r";channels=3;break; + case A52_3F1R: mode="3f+1r";channels=4;break; + case A52_2F2R: mode="2f+2r";channels=4;break; + case A52_3F2R: mode="3f+2r";channels=5;break; + case A52_CHANNEL1: mode="channel1"; channels=2; break; + case A52_CHANNEL2: mode="channel2"; channels=2; break; + case A52_DOLBY: mode="dolby"; channels=2; break; + } + MSG_INFO("AC3: %d.%d (%s%s) %d Hz %3.1f kbit/s Out: %u-bit\n", channels, (flags&A52_LFE)?1:0, mode, (flags&A52_LFE)?"+lfe":"", sample_rate, bit_rate*0.001f, @@ -108,8 +109,7 @@ return (flags&A52_LFE) ? (channels+1) : channels; } - -int preinit(sh_audio_t *sh) +MPXP_Rc preinit(sh_audio_t *sh) { /* Dolby AC3 audio: */ /* however many channels, 2 bytes in a word, 256 samples in a block, 6 blocks in a frame */ @@ -123,37 +123,36 @@ sh->afmt=bps2afmt(2); if(af_query_fmt(sh->afilter,AFMT_FLOAT32) == MPXP_Ok|| af_query_fmt(sh->afilter,A52_FMT32) == MPXP_Ok || - af_query_fmt(sh->afilter,A52_FMT24) == MPXP_Ok) - { + af_query_fmt(sh->afilter,A52_FMT24) == MPXP_Ok) { sh->afmt=AFMT_FLOAT32; } sh->audio_out_minsize=mp_conf.ao_channels*afmt2bps(sh->afmt)*256*6; sh->audio_in_minsize=MAX_AC3_FRAME; sh->context=mp_malloc(sizeof(priv_t)); - return 1; + return MPXP_Ok; } -int init(sh_audio_t *sh_audio) +MPXP_Rc init(sh_audio_t *sh_audio) { - sample_t level=1, bias=384; - float pts; - int flags=0; - /* Dolby AC3 audio:*/ - mpxp_a52_accel = mp_data->mplayer_accel; - mpxp_a52_state=a52_init (mpxp_a52_accel); - if (mpxp_a52_state == NULL) { + sample_t level=1, bias=384; + float pts; + int flags=0; + /* Dolby AC3 audio:*/ + mpxp_a52_accel = mp_data->mplayer_accel; + mpxp_a52_state=a52_init (mpxp_a52_accel); + if (mpxp_a52_state == NULL) { MSG_ERR("A52 init failed\n"); - return 0; - } - if(a52_fillbuff(sh_audio,&pts)<0){ + return MPXP_False; + } + if(a52_fillbuff(sh_audio,&pts)<0){ MSG_ERR("A52 sync failed\n"); - return 0; - } - /* 'a52 cannot upmix' hotfix:*/ - a52_printinfo(sh_audio); - sh_audio->nch=mp_conf.ao_channels; -while(sh_audio->nch>0){ - switch(sh_audio->nch){ + return MPXP_False; + } + /* 'a52 cannot upmix' hotfix:*/ + a52_printinfo(sh_audio); + sh_audio->nch=mp_conf.ao_channels; + while(sh_audio->nch>0){ + switch(sh_audio->nch){ case 1: mpxp_a52_flags=A52_MONO; break; /* case 2: mpxp_a52_flags=A52_STEREO; break; */ case 2: mpxp_a52_flags=A52_DOLBY; break; @@ -162,53 +161,51 @@ case 4: mpxp_a52_flags=A52_2F2R; break; /* 2+2*/ case 5: mpxp_a52_flags=A52_3F2R; break; case 6: mpxp_a52_flags=A52_3F2R|A52_LFE; break; /* 5.1*/ - } - /* test:*/ - flags=mpxp_a52_flags|A52_ADJUST_LEVEL; - MSG_V("A52 flags before a52_frame: 0x%X\n",flags); - if (a52_frame (mpxp_a52_state, sh_audio->a_in_buffer, &flags, &level, bias)){ - MSG_ERR("a52: error decoding frame -> nosound\n"); - return 0; - } - MSG_V("A52 flags after a52_frame: 0x%X\n",flags); - /* frame decoded, let's init resampler:*/ - if(afmt2bps(sh_audio->afmt)==4) { - if(a52_resample_init_float(mpxp_a52_state,mpxp_a52_accel,flags,sh_audio->nch)) break; - } else { - if(a52_resample_init(mpxp_a52_state,mpxp_a52_accel,flags,sh_audio->nch)) break; - } - --sh_audio->nch; /* try to decrease no. of channels*/ + } + /* test:*/ + flags=mpxp_a52_flags|A52_ADJUST_LEVEL; + MSG_V("A52 flags before a52_frame: 0x%X\n",flags); + if (a52_frame (mpxp_a52_state, sh_audio->a_in_buffer, &flags, &level, bias)){ + MSG_ERR("a52: error decoding frame -> nosound\n"); + return MPXP_False; + } + MSG_V("A52 flags after a52_frame: 0x%X\n",flags); + /* frame decoded, let's init resampler:*/ + if(afmt2bps(sh_audio->afmt)==4) { + if(a52_resample_init_float(mpxp_a52_state,mpxp_a52_accel,flags,sh_audio->nch)) break; + } else { + if(a52_resample_init(mpxp_a52_state,mpxp_a52_accel,flags,sh_audio->nch)) break; + } + --sh_audio->nch; /* try to decrease no. of channels*/ + } + if(sh_audio->nch<=0){ + MSG_ERR("a52: no resampler. try different channel setup!\n"); + return MPXP_False; + } + return MPXP_Ok; } - if(sh_audio->nch<=0){ - MSG_ERR("a52: no resampler. try different channel setup!\n"); - return 0; - } - return 1; -} void uninit(sh_audio_t *sh) { - mp_free(sh->context); + mp_free(sh->context); } MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) { UNUSED(arg); - switch(cmd) - { - case ADCTRL_RESYNC_STREAM: - sh->a_in_buffer_len=0; // reset ACM/DShow audio buffer - return MPXP_True; - case ADCTRL_SKIP_FRAME: - { - float pts; - a52_fillbuff(sh,&pts); // skip AC3 frame - return MPXP_True; + switch(cmd) { + case ADCTRL_RESYNC_STREAM: + sh->a_in_buffer_len=0; // reset ACM/DShow audio buffer + return MPXP_True; + case ADCTRL_SKIP_FRAME: { + float pts; + a52_fillbuff(sh,&pts); // skip AC3 frame + return MPXP_True; } - default: - return MPXP_Unknown; + default: + return MPXP_Unknown; } - return MPXP_Unknown; + return MPXP_Unknown; } unsigned decode(sh_audio_t *sh_audio,unsigned char *buf,unsigned minlen,unsigned maxlen,float *pts) @@ -220,27 +217,25 @@ UNUSED(minlen); UNUSED(maxlen); priv_t *priv=sh_audio->context; - if(!sh_audio->a_in_buffer_len) - { - if(a52_fillbuff(sh_audio,pts)<0) return len; /* EOF */ - } - else *pts=priv->last_pts; - sh_audio->a_in_buffer_len=0; - if (a52_frame (mpxp_a52_state, sh_audio->a_in_buffer, &flags, &level, bias)){ - MSG_WARN("a52: error decoding frame\n"); - return len; - } + if(!sh_audio->a_in_buffer_len) { + if(a52_fillbuff(sh_audio,pts)<0) return len; /* EOF */ + } else *pts=priv->last_pts; + sh_audio->a_in_buffer_len=0; + if (a52_frame (mpxp_a52_state, sh_audio->a_in_buffer, &flags, &level, bias)){ + MSG_WARN("a52: error decoding frame\n"); + return len; + } // a52_dynrng(&mpxp_a52_state, NULL, NULL); - len=0; - for (i = 0; i < 6; i++) { - if (a52_block (mpxp_a52_state)){ - MSG_WARN("a52: error at resampling\n"); - break; - } - if(afmt2bps(sh_audio->afmt)==4) - len+=4*a52_resample32(a52_samples(mpxp_a52_state),(float *)&buf[len]); - else - len+=2*a52_resample(a52_samples(mpxp_a52_state),(int16_t *)&buf[len]); + len=0; + for (i = 0; i < 6; i++) { + if (a52_block (mpxp_a52_state)){ + MSG_WARN("a52: error at resampling\n"); + break; } - return len; + if(afmt2bps(sh_audio->afmt)==4) + len+=4*a52_resample32(a52_samples(mpxp_a52_state),(float *)&buf[len]); + else + len+=2*a52_resample(a52_samples(mpxp_a52_state),(int16_t *)&buf[len]); + } + return len; } Modified: mplayerxp/libmpcodecs/ad_acm.c =================================================================== --- mplayerxp/libmpcodecs/ad_acm.c 2012-11-09 08:44:54 UTC (rev 309) +++ mplayerxp/libmpcodecs/ad_acm.c 2012-11-09 11:43:47 UTC (rev 310) @@ -12,12 +12,11 @@ #include "libao2/afmt.h" #include "help_mp.h" -static const ad_info_t info = -{ - "Win32/ACM decoders", - "acm", - "Nickols_K", - "build-in" +static const ad_info_t info = { + "Win32/ACM decoders", + "acm", + "Nickols_K", + "build-in" }; static const config_t options[] = { @@ -26,8 +25,7 @@ LIBAD_EXTERN(msacm) -typedef struct priv_s -{ +typedef struct priv_s { float pts; WAVEFORMATEX o_wf; // out format HACMSTREAM srcstream; // handle @@ -50,15 +48,13 @@ priv->o_wf.nBlockAlign=2*sh_audio->nch; priv->o_wf.wBitsPerSample=sh_audio->afmt?afmt2bps(sh_audio->afmt)*8:16; priv->o_wf.cbSize=0; - if(!in_fmt) - { + if(!in_fmt) { in_fmt=sh_audio->wf=mp_malloc(sizeof(WAVEFORMATEX)); memcpy(in_fmt,&priv->o_wf,sizeof(WAVEFORMATEX)); in_fmt->wFormatTag=sh_audio->wtag; } - if(mp_conf.verbose) - { + if(mp_conf.verbose) { MSG_V("Output fmt:\n"); print_wave_header(&priv->o_wf,sizeof(WAVEFORMATEX)); } @@ -128,19 +124,19 @@ return(1); } -int init(sh_audio_t *sh_audio) +MPXP_Rc init(sh_audio_t *sh_audio) { float pts; int ret=decode(sh_audio,sh_audio->a_buffer,4096,sh_audio->a_buffer_size,&pts); if(ret<0){ MSG_INFO("ACM decoding error: %d\n",ret); - return 0; + return MPXP_False; } sh_audio->a_buffer_len=ret; - return 1; + return MPXP_Ok; } -int preinit(sh_audio_t *sh_audio) +MPXP_Rc preinit(sh_audio_t *sh_audio) { /* Win32 ACM audio codec: */ priv_t *priv; @@ -148,10 +144,10 @@ priv=sh_audio->context; if(!init_acm_audio_codec(sh_audio)){ MSG_ERR(MSGTR_ACMiniterror); - return 0; + return MPXP_False; } MSG_V("INFO: Win32/ACM init OK!\n"); - return 1; + return MPXP_Ok; } void uninit(sh_audio_t *sh) @@ -163,26 +159,24 @@ MPXP_Rc control(sh_audio_t *sh_audio,int cmd,any_t* arg, ...) { int skip; - switch(cmd) - { -// case ADCTRL_RESYNC_STREAM: -// sh_audio->a_in_buffer_len=0;/* reset ACM/DShow audio buffer */ + switch(cmd) { +// case ADCTRL_RESYNC_STREAM: +// sh_audio->a_in_buffer_len=0;/* reset ACM/DShow audio buffer */ // return MPXP_True; - case ADCTRL_SKIP_FRAME: - { - float pts; - skip=sh_audio->wf->nBlockAlign; - if(skip<16){ - skip=(sh_audio->wf->nAvgBytesPerSec/16)&(~7); - if(skip<16) skip=16; - } - demux_read_data_r(sh_audio->ds,NULL,skip,&pts); - return MPXP_True; + case ADCTRL_SKIP_FRAME: { + float pts; + skip=sh_audio->wf->nBlockAlign; + if(skip<16){ + skip=(sh_audio->wf->nAvgBytesPerSec/16)&(~7); + if(skip<16) skip=16; + } + demux_read_data_r(sh_audio->ds,NULL,skip,&pts); + return MPXP_True; } - default: - return MPXP_Unknown; + default: + return MPXP_Unknown; } - return MPXP_Unknown; + return MPXP_Unknown; } unsigned decode(sh_audio_t *sh_audio,unsigned char *buf,unsigned minlen,unsigned maxlen,float *pts) Modified: mplayerxp/libmpcodecs/ad_dca.c =================================================================== --- mplayerxp/libmpcodecs/ad_dca.c 2012-11-09 08:44:54 UTC (rev 309) +++ mplayerxp/libmpcodecs/ad_dca.c 2012-11-09 11:43:47 UTC (rev 310) @@ -27,18 +27,16 @@ uint32_t mpxp_dca_accel=0; uint32_t mpxp_dca_flags=0; -typedef struct priv_s -{ +typedef struct priv_s { float last_pts; }priv_t; -static const ad_info_t info = -{ - "DTS Coherent Acoustics", - "libdca", - "Nickols_K", - "build-in" +static const ad_info_t info = { + "DTS Coherent Acoustics", + "libdca", + "Nickols_K", + "build-in" }; static const config_t options[] = { @@ -48,28 +46,28 @@ LIBAD_EXTERN(dca) int dca_fillbuff(sh_audio_t *sh_audio,float *pts){ -int length=0,flen=0; -int flags=0; -int sample_rate=0; -int bit_rate=0; -float apts=0.,null_pts; -priv_t *priv=sh_audio->context; + int length=0,flen=0; + int flags=0; + int sample_rate=0; + int bit_rate=0; + float apts=0.,null_pts; + priv_t *priv=sh_audio->context; sh_audio->a_in_buffer_len=0; /* sync frame:*/ -while(1){ - while(sh_audio->a_in_buffer_len<16){ - int c=demux_getc_r(sh_audio->ds,apts?&null_pts:&apts); - if(c<0) { priv->last_pts=*pts=apts; return -1; } /* EOF*/ - sh_audio->a_in_buffer[sh_audio->a_in_buffer_len++]=c; + while(1){ + while(sh_audio->a_in_buffer_len<16){ + int c=demux_getc_r(sh_audio->ds,apts?&null_pts:&apts); + if(c<0) { priv->last_pts=*pts=apts; return -1; } /* EOF*/ + sh_audio->a_in_buffer[sh_audio->a_in_buffer_len++]=c; + } + length = dca_syncinfo (mpxp_dca_state,sh_audio->a_in_buffer, &flags, &sample_rate, &bit_rate, &flen); + if(length>=16 && length<=MAX_AC5_FRAME) break; /* we're done.*/ + /* bad file => resync*/ + memmove(sh_audio->a_in_buffer,sh_audio->a_in_buffer+1,15); + --sh_audio->a_in_buffer_len; + apts=0; } - length = dca_syncinfo (mpxp_dca_state,sh_audio->a_in_buffer, &flags, &sample_rate, &bit_rate, &flen); - if(length>=16 && length<=MAX_AC5_FRAME) break; /* we're done.*/ - /* bad file => resync*/ - memmove(sh_audio->a_in_buffer,sh_audio->a_in_buffer+1,15); - --sh_audio->a_in_buffer_len; - apts=0; -} MSG_DBG2("dca[%08X]: len=%d flags=0x%X %d Hz %d bit/s frame=%u\n",*((long *)sh_audio->a_in_buffer),length,flags,sample_rate,bit_rate,flen); sh_audio->rate=sample_rate; sh_audio->i_bps=bit_rate/8; @@ -81,33 +79,33 @@ /* returns: number of available channels*/ static int dca_printinfo(sh_audio_t *sh_audio){ -int flags, sample_rate, bit_rate,flen,length; -char* mode="unknown"; -int channels=0; - length=dca_syncinfo (mpxp_dca_state,sh_audio->a_in_buffer, &flags, &sample_rate, &bit_rate,&flen); - switch(flags&DCA_CHANNEL_MASK){ - case DCA_CHANNEL: mode="channel"; channels=2; break; - case DCA_MONO: mode="mono"; channels=1; break; - case DCA_STEREO: mode="stereo"; channels=2; break; - case DCA_3F: mode="3f"; channels=3;break; - case DCA_2F1R: mode="2f+1r"; channels=3;break; - case DCA_3F1R: mode="3f+1r"; channels=4;break; - case DCA_2F2R: mode="2f+2r"; channels=4;break; - case DCA_3F2R: mode="3f+2r"; channels=5;break; - case DCA_4F2R: mode="4f+2r"; channels=6;break; - case DCA_DOLBY: mode="dolby"; channels=2; break; - default: channels=0; break; - } - MSG_INFO("DCA: %d.%d (%s%s) %d Hz %3.1f kbit/s Out: %u-bit\n", + int flags, sample_rate, bit_rate,flen,length; + char* mode="unknown"; + int channels=0; + length=dca_syncinfo (mpxp_dca_state,sh_audio->a_in_buffer, &flags, &sample_rate, &bit_rate,&flen); + switch(flags&DCA_CHANNEL_MASK){ + case DCA_CHANNEL: mode="channel"; channels=2; break; + case DCA_MONO: mode="mono"; channels=1; break; + case DCA_STEREO: mode="stereo"; channels=2; break; + case DCA_3F: mode="3f"; channels=3;break; + case DCA_2F1R: mode="2f+1r"; channels=3;break; + case DCA_3F1R: mode="3f+1r"; channels=4;break; + case DCA_2F2R: mode="2f+2r"; channels=4;break; + case DCA_3F2R: mode="3f+2r"; channels=5;break; + case DCA_4F2R: mode="4f+2r"; channels=6;break; + case DCA_DOLBY: mode="dolby"; channels=2; break; + default: channels=0; break; + } + MSG_INFO("DCA: %d.%d (%s%s) %d Hz %3.1f kbit/s Out: %u-bit\n", channels, (flags&DCA_LFE)?1:0, mode, (flags&DCA_LFE)?"+lfe":"", sample_rate, bit_rate*0.001f, afmt2bps(sh_audio->afmt)*8); - return (flags&DCA_LFE) ? (channels+1) : channels; + return (flags&DCA_LFE) ? (channels+1) : channels; } -int preinit(sh_audio_t *sh) +MPXP_Rc preinit(sh_audio_t *sh) { /* DTS audio: however many channels, 2 bytes in a word, 256 samples in a block, 6 blocks in a frame */ @@ -128,84 +126,82 @@ sh->audio_out_minsize=mp_conf.ao_channels*afmt2bps(sh->afmt)*256*8; sh->audio_in_minsize=MAX_AC5_FRAME; sh->context=mp_malloc(sizeof(priv_t)); - return 1; + return MPXP_Ok; } -int init(sh_audio_t *sh_audio) +MPXP_Rc init(sh_audio_t *sh_audio) { - sample_t level=1, bias=384; - float pts; - int flags=0; - /* Dolby AC3 audio:*/ - mpxp_dca_accel = mp_data->mplayer_accel; - mpxp_dca_state = dca_init(mpxp_dca_accel); - if (mpxp_dca_state == NULL) { + sample_t level=1, bias=384; + float pts; + int flags=0; + /* Dolby AC3 audio:*/ + mpxp_dca_accel = mp_data->mplayer_accel; + mpxp_dca_state = dca_init(mpxp_dca_accel); + if (mpxp_dca_state == NULL) { MSG_ERR("dca init failed\n"); - return 0; - } - if(dca_fillbuff(sh_audio,&pts)<0){ + return MPXP_False; + } + if(dca_fillbuff(sh_audio,&pts)<0){ MSG_ERR("dca sync failed\n"); - return 0; - } - /* 'dca cannot upmix' hotfix:*/ - dca_printinfo(sh_audio); - sh_audio->nch=mp_conf.ao_channels; -while(sh_audio->nch>0){ - switch(sh_audio->nch){ - case 1: mpxp_dca_flags=DCA_MONO; break; - case 2: mpxp_dca_flags=DCA_STEREO; break; -/* case 2: mpxp_dca_flags=DCA_DOLBY; break; */ -/* case 3: mpxp_dca_flags=DCA_3F; break; */ - case 3: mpxp_dca_flags=DCA_2F1R; break; - case 4: mpxp_dca_flags=DCA_2F2R; break; /* 2+2*/ - case 5: mpxp_dca_flags=DCA_3F2R; break; - case 6: mpxp_dca_flags=DCA_3F2R|DCA_LFE; break; /* 5.1*/ - } - /* test:*/ - flags=mpxp_dca_flags|DCA_ADJUST_LEVEL; - MSG_V("dca flags before dca_frame: 0x%X\n",flags); - if (dca_frame (mpxp_dca_state, sh_audio->a_in_buffer, &flags, &level, bias)){ - MSG_ERR("dca: error decoding frame -> nosound\n"); - return 0; - } - MSG_V("dca flags after dca_frame: 0x%X\n",flags); - if(afmt2bps(sh_audio->afmt)==4) { - if(dca_resample_init_float(mpxp_dca_state,mpxp_dca_accel,flags,sh_audio->nch)) break; - } else { - if(dca_resample_init(mpxp_dca_state,mpxp_dca_accel,flags,sh_audio->nch)) break; - } - --sh_audio->nch; /* try to decrease no. of channels*/ + return MPXP_False; + } + /* 'dca cannot upmix' hotfix:*/ + dca_printinfo(sh_audio); + sh_audio->nch=mp_conf.ao_channels; + while(sh_audio->nch>0){ + switch(sh_audio->nch){ + case 1: mpxp_dca_flags=DCA_MONO; break; + case 2: mpxp_dca_flags=DCA_STEREO; break; +/* case 2: mpxp_dca_flags=DCA_DOLBY; break; */ +/* case 3: mpxp_dca_flags=DCA_3F; break; */ + case 3: mpxp_dca_flags=DCA_2F1R; break; + case 4: mpxp_dca_flags=DCA_2F2R; break; /* 2+2*/ + case 5: mpxp_dca_flags=DCA_3F2R; break; + case 6: mpxp_dca_flags=DCA_3F2R|DCA_LFE; break; /* 5.1*/ + } + /* test:*/ + flags=mpxp_dca_flags|DCA_ADJUST_LEVEL; + MSG_V("dca flags before dca_frame: 0x%X\n",flags); + if (dca_frame (mpxp_dca_state, sh_audio->a_in_buffer, &flags, &level, bias)){ + MSG_ERR("dca: error decoding frame -> nosound\n"); + return MPXP_False; + } + MSG_V("dca flags after dca_frame: 0x%X\n",flags); + if(afmt2bps(sh_audio->afmt)==4) { + if(dca_resample_init_float(mpxp_dca_state,mpxp_dca_accel,flags,sh_audio->nch)) break; + } else { + if(dca_resample_init(mpxp_dca_state,mpxp_dca_accel,flags,sh_audio->nch)) break; + } + --sh_audio->nch; /* try to decrease no. of channels*/ + } + if(sh_audio->nch<=0){ + MSG_ERR("dca: no resampler. try different channel setup!\n"); + return MPXP_False; + } + return MPXP_Ok; } - if(sh_audio->nch<=0){ - MSG_ERR("dca: no resampler. try different channel setup!\n"); - return 0; - } - return 1; -} void uninit(sh_audio_t *sh) { - mp_free(sh->context); + mp_free(sh->context); } MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) { UNUSED(arg); - switch(cmd) - { - case ADCTRL_RESYNC_STREAM: - sh->a_in_buffer_len=0; // reset ACM/DShow audio buffer - return MPXP_True; - case ADCTRL_SKIP_FRAME: - { - float pts; - dca_fillbuff(sh,&pts); // skip AC3 frame - return MPXP_True; + switch(cmd) { + case ADCTRL_RESYNC_STREAM: + sh->a_in_buffer_len=0; // reset ACM/DShow audio buffer + return MPXP_True; + case ADCTRL_SKIP_FRAME: { + float pts; + dca_fillbuff(sh,&pts); // skip AC3 frame + return MPXP_True; } - default: - return MPXP_Unknown; + default: + return MPXP_Unknown; } - return MPXP_Unknown; + return MPXP_Unknown; } unsigned decode(sh_audio_t *sh_audio,unsigned char *buf,unsigned minlen,unsigned maxlen,float *pts) Modified: mplayerxp/libmpcodecs/ad_dmo.c =================================================================== --- mplayerxp/libmpcodecs/ad_dmo.c 2012-11-09 08:44:54 UTC (rev 309) +++ mplayerxp/libmpcodecs/ad_dmo.c 2012-11-09 11:43:47 UTC (rev 310) @@ -12,12 +12,11 @@ #include "ad_internal.h" #include "ad_msg.h" -static const ad_info_t info = -{ - "Win32/DMO decoders", - "dmo", - "A'rpi", - "build-in" +static const ad_info_t info = { + "Win32/DMO decoders", + "dmo", + "A'rpi", + "build-in" }; static const config_t options[] = { @@ -26,42 +25,39 @@ LIBAD_EXTERN(dmo) - #include "loader/dmo/DMO_AudioDecoder.h" -typedef struct dmo_priv_s -{ - float pts; - DMO_AudioDecoder* ds_adec; +typedef struct dmo_priv_s { + float pts; + DMO_AudioDecoder* ds_adec; }priv_t; -static int init(sh_audio_t *sh) +static MPXP_Rc init(sh_audio_t *sh) { - UNUSED(sh); - return 1; + UNUSED(sh); + return MPXP_Ok; } -static int preinit(sh_audio_t *sh_audio) +static MPXP_Rc preinit(sh_audio_t *sh_audio) { - priv_t*priv; - int chans=(mp_conf.ao_channels==sh_audio->wf->nChannels) ? - mp_conf.ao_channels : (sh_audio->wf->nChannels>=2 ? 2 : 1); - if(!(sh_audio->context=mp_malloc(sizeof(priv_t)))) return 0; - priv=sh_audio->context; - if(!(priv->ds_adec=DMO_AudioDecoder_Open(sh_audio->codec->dll_name,&sh_audio->codec->guid,sh_audio->wf,chans))) - { - MSG_ERR(MSGTR_MissingDLLcodec,sh_audio->codec->dll_name); - mp_free(sh_audio->context); - return 0; - } + priv_t*priv; + int chans=(mp_conf.ao_channels==sh_audio->wf->nChannels) ? + mp_conf.ao_channels : (sh_audio->wf->nChannels>=2 ? 2 : 1); + if(!(sh_audio->context=mp_malloc(sizeof(priv_t)))) return MPXP_False; + priv=sh_audio->context; + if(!(priv->ds_adec=DMO_AudioDecoder_Open(sh_audio->codec->dll_name,&sh_audio->codec->guid,sh_audio->wf,chans))) { + MSG_ERR(MSGTR_MissingDLLcodec,sh_audio->codec->dll_name); + mp_free(sh_audio->context); + return MPXP_False; + } sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec; sh_audio->nch=chans; sh_audio->rate=sh_audio->wf->nSamplesPerSec; sh_audio->audio_in_minsize=4*sh_audio->wf->nBlockAlign; if(sh_audio->audio_in_minsize<8192) sh_audio->audio_in_minsize=8192; sh_audio->audio_out_minsize=4*16384; - MSG_V("INFO: Win32/DMO audio codec init OK!\n"); - return 1; + MSG_V("INFO: Win32/DMO audio codec init OK!\n"); + return MPXP_Ok; } static void uninit(sh_audio_t *sh) @@ -73,23 +69,21 @@ static MPXP_Rc control(sh_audio_t *sh_audio,int cmd,any_t* arg, ...) { - int skip; - UNUSED(arg); - switch(cmd) - { - case ADCTRL_SKIP_FRAME: - { + int skip; + UNUSED(arg); + switch(cmd) { + case ADCTRL_SKIP_FRAME: { float pts; - skip=sh_audio->wf->nBlockAlign; - if(skip<16){ - skip=(sh_audio->wf->nAvgBytesPerSec/16)&(~7); - if(skip<16) skip=16; - } - demux_read_data_r(sh_audio->ds,NULL,skip,&pts); - return MPXP_True; + skip=sh_audio->wf->nBlockAlign; + if(skip<16){ + skip=(sh_audio->wf->nAvgBytesPerSec/16)&(~7); + if(skip<16) skip=16; + } + demux_read_data_r(sh_audio->ds,NULL,skip,&pts); + return MPXP_True; } } - return MPXP_Unknown; + return MPXP_Unknown; } static unsigned decode(sh_audio_t *sh_audio,unsigned char *buf,unsigned minlen,unsigned maxlen,float *pts) Modified: mplayerxp/libmpcodecs/ad_dshow.c =================================================================== --- mplayerxp/libmpcodecs/ad_dshow.c 2012-11-09 08:44:54 UTC (rev 309) +++ mplayerxp/libmpcodecs/ad_dshow.c 2012-11-09 11:43:47 UTC (rev 310) @@ -9,12 +9,11 @@ #include "loader/dshow/DS_AudioDecoder.h" #include "codecs_ld.h" -static const ad_info_t info = -{ - "Win32/DirectShow decoders", - "dshow", - "Nickols_K", - "build-in" +static const ad_info_t info = { + "Win32/DirectShow decoders", + "dshow", + "Nickols_K", + "build-in" }; static const config_t options[] = { @@ -23,70 +22,66 @@ LIBAD_EXTERN(dshow) -typedef struct dshow_priv_s -{ - float pts; - DS_AudioDecoder* ds_adec; +typedef struct dshow_priv_s { + float pts; + DS_AudioDecoder* ds_adec; }priv_t; -int init(sh_audio_t *sh) +MPXP_Rc init(sh_audio_t *sh) { UNUSED(sh); - return 1; + return MPXP_Ok; } -int preinit(sh_audio_t *sh_audio) +MPXP_Rc preinit(sh_audio_t *sh_audio) { - priv_t *priv; - if(!(sh_audio->context=mp_malloc(sizeof(priv_t)))) return 0; - priv=sh_audio->context; - if(!(priv->ds_adec=DS_AudioDecoder_Open(sh_audio->codec->dll_name,&sh_audio->codec->guid,sh_audio->wf))) - { - MSG_ERR(MSGTR_MissingDLLcodec,sh_audio->codec->dll_name); - mp_free(sh_audio->context); - return 0; - } - sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec; - sh_audio->nch=sh_audio->wf->nChannels; - sh_audio->rate=sh_audio->wf->nSamplesPerSec; - sh_audio->audio_in_minsize=2*sh_audio->wf->nBlockAlign; - if(sh_audio->audio_in_minsize<8192) sh_audio->audio_in_minsize=8192; - sh_audio->audio_out_minsize=16384; - MSG_V("INFO: Win32/DShow init OK!\n"); - return 1; + priv_t *priv; + if(!(sh_audio->context=mp_malloc(sizeof(priv_t)))) return 0; + priv=sh_audio->context; + if(!(priv->ds_adec=DS_AudioDecoder_Open(sh_audio->codec->dll_name,&sh_audio->codec->guid,sh_audio->wf))) { + MSG_ERR(MSGTR_MissingDLLcodec,sh_audio->codec->dll_name); + mp_free(sh_audio->context); + return MPXP_False; + } + sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec; + sh_audio->nch=sh_audio->wf->nChannels; + sh_audio->rate=sh_audio->wf->nSamplesPerSec; + sh_audio->audio_in_minsize=2*sh_audio->wf->nBlockAlign; + if(sh_audio->audio_in_minsize<8192) sh_audio->audio_in_minsize=8192; + sh_audio->audio_out_minsize=16384; + MSG_V("INFO: Win32/DShow init OK!\n"); + return MPXP_Ok; } void uninit(sh_audio_t *sh) { - priv_t* priv = sh->context; - DS_AudioDecoder_Destroy(priv->ds_adec); - mp_free(priv); + priv_t* priv = sh->context; + DS_AudioDecoder_Destroy(priv->ds_adec); + mp_free(priv); } MPXP_Rc control(sh_audio_t *sh_audio,int cmd,any_t* arg, ...) { - int skip; + int skip; UNUSED(arg); - switch(cmd) - { - case ADCTRL_RESYNC_STREAM: - sh_audio->a_in_buffer_len=0; // reset ACM/DShow audio buffer - return MPXP_True; - case ADCTRL_SKIP_FRAME: - { - float pts; - skip=sh_audio->wf->nBlockAlign; - if(skip<16){ - skip=(sh_audio->wf->nAvgBytesPerSec/16)&(~7); - if(skip<16) skip=16; - } - demux_read_data_r(sh_audio->ds,NULL,skip,&pts); + switch(cmd) { + case ADCTRL_RESYNC_STREAM: + sh_audio->a_in_buffer_len=0; // reset ACM/DShow audio buffer + return MPXP_True; + case ADCTRL_SKIP_FRAME: { + float pts; + skip=sh_audio->wf->nBlockAlign; + if(skip<16){ + skip=(sh_audio->wf->nAvgBytesPerSec/16)&(~7); + if(skip<16) skip=16; + } + demux_read_data_r(sh_audio->ds,NULL,skip,&pts); } return MPXP_True; - default: - return MPXP_Unknown; + default: + return MPXP_Unknown; } - return MPXP_Unknown; + return MPXP_Unknown; } unsigned decode(sh_audio_t *sh_audio,unsigned char *buf,unsigned minlen,unsigned maxlen,float *pts) Modified: mplayerxp/libmpcodecs/ad_dvdpcm.c =================================================================== --- mplayerxp/libmpcodecs/ad_dvdpcm.c 2012-11-09 08:44:54 UTC (rev 309) +++ mplayerxp/libmpcodecs/ad_dvdpcm.c 2012-11-09 11:43:47 UTC (rev 310) @@ -5,12 +5,11 @@ #include "osdep/bswap.h" #include "libao2/afmt.h" -static const ad_info_t info = -{ - "Uncompressed DVD/VOB LPCM audio decoder", - "dvdpcm", - "Nickols_K", - "build-in" +static const ad_info_t info = { + "Uncompressed DVD/VOB LPCM audio decoder", + "dvdpcm", + "Nickols_K", + "build-in" }; static const config_t options[] = { @@ -19,7 +18,7 @@ LIBAD_EXTERN(dvdpcm) -int init(sh_audio_t *sh) +MPXP_Rc init(sh_audio_t *sh) { /* DVD PCM Audio:*/ sh->i_bps = 0; @@ -28,23 +27,23 @@ unsigned char h=sh->codecdata[1]; sh->nch=1+(h&7); switch((h>>4)&3){ - case 0: sh->rate=48000;break; - case 1: sh->rate=96000;break; - case 2: sh->rate=44100;break; - case 3: sh->rate=32000;break; + case 0: sh->rate=48000;break; + case 1: sh->rate=96000;break; + case 2: sh->rate=44100;break; + case 3: sh->rate=32000;break; } switch ((h >> 6) & 3) { - case 0: - sh->afmt = AFMT_S16_BE; - break; - case 1: - //sh->afmt = AFMT_S20_BE; - sh->i_bps = sh->nch * sh->rate * 5 / 2; - case 2: - sh->afmt = AFMT_S24_BE; - break; - default: - sh->afmt = AFMT_S16_BE; + case 0: + sh->afmt = AFMT_S16_BE; + break; + case 1: + //sh->afmt = AFMT_S20_BE; + sh->i_bps = sh->nch * sh->rate * 5 / 2; + case 2: + sh->afmt = AFMT_S24_BE; + break; + default: + sh->afmt = AFMT_S16_BE; } } else { // use defaults: @@ -54,13 +53,13 @@ } if (!sh->i_bps) sh->i_bps = afmt2bps(sh->afmt) * sh->nch * sh->rate; - return 1; + return MPXP_Ok; } -int preinit(sh_audio_t *sh) +MPXP_Rc preinit(sh_audio_t *sh) { - sh->audio_out_minsize=2048; - return 1; + sh->audio_out_minsize=2048; + return MPXP_Ok; } void uninit(sh_audio_t *sh) @@ -70,22 +69,20 @@ MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) { - int skip; - UNUSED(arg); - switch(cmd) - { - case ADCTRL_SKIP_FRAME: - { - float pts; - skip=sh->i_bps/16; - skip=skip&(~3); - demux_read_data_r(sh->ds,NULL,skip,&pts); - return MPXP_True; - } - default: - return MPXP_Unknown; + int skip; + UNUSED(arg); + switch(cmd) { + case ADCTRL_SKIP_FRAME: { + float pts; + skip=sh->i_bps/16; + skip=skip&(~3); + demux_read_data_r(sh->ds,NULL,skip,&pts); + return MPXP_True; + } + default: + return MPXP_Unknown; } - return MPXP_Unknown; + return MPXP_Unknown; } unsigned decode(sh_audio_t *sh_audio,unsigned char *buf,unsigned minlen,unsigned maxlen,float *pts) Modified: mplayerxp/libmpcodecs/ad_faad.c =================================================================== --- mplayerxp/libmpcodecs/ad_faad.c 2012-11-09 08:44:54 UTC (rev 309) +++ mplayerxp/libmpcodecs/ad_faad.c 2012-11-09 11:43:47 UTC (rev 310) @@ -23,12 +23,11 @@ #include "libao2/audio_out.h" #include "postproc/af.h" -static const ad_info_t info = -{ - "AAC (MPEG2/4 Advanced Audio Coding)", - "faad", - "Felix Buenemann", - "http://www.audiocoding.com/faad2.html" +static const ad_info_t info = { + "AAC (MPEG2/4 Advanced Audio Coding)", + "faad", + "Felix Buenemann", + "http://www.audiocoding.com/faad2.html" }; static const config_t options[] = { @@ -37,14 +36,12 @@ LIBAD_EXTERN(faad) -typedef struct faad_priv_s -{ +typedef struct faad_priv_s { float pts; }priv_t; typedef any_t*NeAACDecHandle; -typedef struct NeAACDecConfiguration -{ +typedef struct NeAACDecConfiguration { unsigned char defObjectType; unsigned long defSampleRate; unsigned char outputFormat; @@ -53,8 +50,8 @@ unsigned char dontUpSampleImplicitSBR; } NeAACDecConfiguration, *NeAACDecConfigurationPtr; struct NeAACDecFrameInfo; -typedef struct NeAACDecFrameInfo -{ + +typedef struct NeAACDecFrameInfo { unsigned long bytesconsumed; unsigned long samples; unsigned char channels; @@ -109,25 +106,25 @@ static NeAACDecConfigurationPtr (*NEAACDECAPI NeAACDecGetCurrentConfiguration_ptr)(NeAACDecHandle hDecoder); #define NeAACDecGetCurrentConfiguration(a) (*NeAACDecGetCurrentConfiguration_ptr)(a) static unsigned char NEAACDECAPI (*NeAACDecSetConfiguration_ptr)(NeAACDecHandle hDecoder, - NeAACDecConfigurationPtr config); + NeAACDecConfigurationPtr config); #define NeAACDecSetConfiguration(a,b) (*NeAACDecSetConfiguration_ptr)(a,b) static long (*NEAACDECAPI NeAACDecInit_ptr)(NeAACDecHandle hDecoder, - unsigned char *buffer, - unsigned long buffer_size, - unsigned long *samplerate, - unsigned char *channels); + unsigned char *buffer, + unsigned long buffer_size, + unsigned long *samplerate, + unsigned char *channels); #define NeAACDecInit(a,b,c,d,e) (*NeAACDecInit_ptr)(a,b,c,d,e) static char (*NEAACDECAPI NeAACDecInit2_ptr)(NeAACDecHandle hDecoder, unsigned char *pBuffer, - unsigned long SizeOfDecoderSpecificInfo, - unsigned long *samplerate, unsigned char *channels); + unsigned long SizeOfDecoderSpecificInfo, + unsigned long *samplerate, unsigned char *channels); #define NeAACDecInit2(a,b,c,d,e) (*NeAACDecInit2_ptr)(a,b,c,d,e) static void (*NEAACDECAPI NeAACDecClose_ptr)(NeAACDecHandle hDecoder); #define NeAACDecClose(a) (*NeAACDecClose_ptr)(a) static any_t* (*NEAACDECAPI NeAACDecDecode_ptr)(NeAACDecHandle hDecoder, - NeAACDecFrameInfo *hInfo, - unsigned char *buffer, - unsigned long buffer_size); + NeAACDecFrameInfo *hInfo, + unsigned char *buffer, + unsigned long buffer_size); #define NeAACDecDecode(a,b,c,d) (*NeAACDecDecode_ptr)(a,b,c,d) static char* (*NEAACDECAPI NeAACDecGetErrorMessage_ptr)(unsigned char errcode); #define NeAACDecGetErrorMessage(a) (*NeAACDecGetErrorMessage_ptr)(a) @@ -138,52 +135,51 @@ static NeAACDecFrameInfo NeAAC_finfo; static any_t*dll_handle; -static int load_dll(const char *libname) +static MPXP_Rc load_dll(const char *libname) { - if(!(dll_handle=ld_codec(libname,mpcodecs_ad_faad.info->url))) return 0; - NeAACDecOpen_ptr = ld_sym(dll_handle,"NeAACDecOpen"); - NeAACDecGetCurrentConfiguration_ptr = ld_sym(dll_handle,"NeAACDecGetCurrentConfiguration"); - NeAACDecSetConfiguration_ptr = ld_sym(dll_handle,"NeAACDecSetConfiguration"); - NeAACDecInit_ptr = ld_sym(dll_handle,"NeAACDecInit"); - NeAACDecInit2_ptr = ld_sym(dll_handle,"NeAACDecInit2"); - NeAACDecClose_ptr = ld_sym(dll_handle,"NeAACDecClose"); - NeAACDecDecode_ptr = ld_sym(dll_handle,"NeAACDecDecode"); - NeAACDecGetErrorMessage_ptr = ld_sym(dll_handle,"NeAACDecGetErrorMessage"); - return NeAACDecOpen_ptr && NeAACDecGetCurrentConfiguration_ptr && + if(!(dll_handle=ld_codec(libname,mpcodecs_ad_faad.info->url))) return 0; + NeAACDecOpen_ptr = ld_sym(dll_handle,"NeAACDecOpen"); + NeAACDecGetCurrentConfiguration_ptr = ld_sym(dll_handle,"NeAACDecGetCurrentConfiguration"); + NeAACDecSetConfiguration_ptr = ld_sym(dll_handle,"NeAACDecSetConfiguration"); + NeAACDecInit_ptr = ld_sym(dll_handle,"NeAACDecInit"); + NeAACDecInit2_ptr = ld_sym(dll_handle,"NeAACDecInit2"); + NeAACDecClose_ptr = ld_sym(dll_handle,"NeAACDecClose"); + NeAACDecDecode_ptr = ld_sym(dll_handle,"NeAACDecDecode"); + NeAACDecGetErrorMessage_ptr = ld_sym(dll_handle,"NeAACDecGetErrorMessage"); + return (NeAACDecOpen_ptr && NeAACDecGetCurrentConfiguration_ptr && NeAACDecInit_ptr && NeAACDecInit2_ptr && NeAACDecGetCurrentConfiguration_ptr && - NeAACDecClose_ptr && NeAACDecDecode_ptr && NeAACDecGetErrorMessage_ptr; + NeAACDecClose_ptr && NeAACDecDecode_ptr && NeAACDecGetErrorMessage_ptr)? + MPXP_Ok:MPXP_False; } - -static int preinit(sh_audio_t *sh) +static MPXP_Rc preinit(sh_audio_t *sh) { - sh->audio_out_minsize=8192*FAAD_MAX_CHANNELS; - sh->audio_in_minsize=FAAD_BUFFLEN; - if(!(sh->context=mp_malloc(sizeof(priv_t)))) return 0; - return load_dll("libfaad"SLIBSUFFIX); + sh->audio_out_minsize=8192*FAAD_MAX_CHANNELS; + sh->audio_in_minsize=FAAD_BUFFLEN; + if(!(sh->context=mp_malloc(sizeof(priv_t)))) return MPXP_False; + return load_dll("libfaad"SLIBSUFFIX); } -static int init(sh_audio_t *sh) +static MPXP_Rc init(sh_audio_t *sh) { - unsigned long NeAAC_samplerate; - unsigned char NeAAC_channels; - float pts; - int NeAAC_init; - NeAACDecConfigurationPtr NeAAC_conf; - if(!(NeAAC_hdec = NeAACDecOpen(mp_data->mplayer_accel))) - { - MSG_WARN("FAAD: Failed to open the decoder!\n"); // XXX: deal with cleanup! - return 0; - } - // If we don't get the ES descriptor, try manual config - if(!sh->codecdata_len && sh->wf) { - sh->codecdata_len = sh->wf->cbSize; - sh->codecdata = (char*)(sh->wf+1); - MSG_DBG2("FAAD: codecdata extracted from WAVEFORMATEX\n"); - } - NeAAC_conf = NeAACDecGetCurrentConfiguration(NeAAC_hdec); - if(sh->rate) NeAAC_conf->defSampleRate = sh->rate; + unsigned long NeAAC_samplerate; + unsigned char NeAAC_channels; + float pts; + int NeAAC_init; + NeAACDecConfigurationPtr NeAAC_conf; + if(!(NeAAC_hdec = NeAACDecOpen(mp_data->mplayer_accel))) { + MSG_WARN("FAAD: Failed to open the decoder!\n"); // XXX: deal with cleanup! + return MPXP_False; + } + // If we don't get the ES descriptor, try manual config + if(!sh->codecdata_len && sh->wf) { + sh->codecdata_len = sh->wf->cbSize; + sh->codecdata = (char*)(sh->wf+1); + MSG_DBG2("FAAD: codecdata extracted from WAVEFORMATEX\n"); + } + NeAAC_conf = NeAACDecGetCurrentConfiguration(NeAAC_hdec); + if(sh->rate) NeAAC_conf->defSampleRate = sh->rate; #ifdef WORDS_BIGENDIAN #define NeAAC_FMT32 AFMT_S32_BE #define NeAAC_FMT24 AFMT_S24_BE @@ -193,78 +189,73 @@ #define NeAAC_FMT24 AFMT_S24_LE #define NeAAC_FMT16 AFMT_S16_LE #endif - /* Set the maximal quality */ - /* This is useful for expesive audio cards */ - if(af_query_fmt(sh->afilter,AFMT_FLOAT32) == MPXP_Ok || - af_query_fmt(sh->afilter,NeAAC_FMT32) == MPXP_Ok || - af_query_fmt(sh->afilter,NeAAC_FMT24) == MPXP_Ok) - { - sh->afmt=AFMT_FLOAT32; - NeAAC_conf->outputFormat=FAAD_FMT_FLOAT; - } - else - { - sh->afmt=NeAAC_FMT16; - NeAAC_conf->outputFormat=FAAD_FMT_16BIT; - } - /* Set the default object type and samplerate */ - NeAACDecSetConfiguration(NeAAC_hdec, NeAAC_conf); - if(!sh->codecdata_len) { - - sh->a_in_buffer_len = demux_read_data_r(sh->ds, sh->a_in_buffer, sh->a_in_buffer_size,&pts); - - /* init the codec */ - NeAAC_init = NeAACDecInit(NeAAC_hdec, sh->a_in_buffer, - sh->a_in_buffer_len, &NeAAC_samplerate, &NeAAC_channels); - - sh->a_in_buffer_len -= (NeAAC_init > 0)?NeAAC_init:0; // how many bytes init consumed - // XXX FIXME: shouldn't we memcpy() here in a_in_buffer ?? --A'rpi - - } else { // We have ES DS in codecdata - NeAAC_init = NeAACDecInit2(NeAAC_hdec, sh->codecdata, - sh->codecdata_len, &NeAAC_samplerate, &NeAAC_channels); - } - if(NeAAC_init < 0) { - MSG_WARN("FAAD: Failed to initialize the decoder!\n"); // XXX: deal with cleanup! - NeAACDecClose(NeAAC_hdec); - // XXX: mp_free a_in_buffer here or in uninit? - return 0; - } else { - NeAAC_conf = NeAACDecGetCurrentConfiguration(NeAAC_hdec); - sh->nch = NeAAC_channels; - sh->rate = NeAAC_samplerate; - switch(NeAAC_conf->outputFormat){ - default: - case FAAD_FMT_16BIT: sh->afmt=bps2afmt(2); break; - case FAAD_FMT_24BIT: sh->afmt=bps2afmt(3); break; - case FAAD_FMT_FLOAT: - case FAAD_FMT_32BIT: sh->afmt=bps2afmt(4); break; + /* Set the maximal quality */ + /* This is useful for expesive audio cards */ + if(af_query_fmt(sh->afilter,AFMT_FLOAT32) == MPXP_Ok || + af_query_fmt(sh->afilter,NeAAC_FMT32) == MPXP_Ok || + af_query_fmt(sh->afilter,NeAAC_FMT24) == MPXP_Ok) { + sh->afmt=AFMT_FLOAT32; + NeAAC_conf->outputFormat=FAAD_FMT_FLOAT; + } else { + sh->afmt=NeAAC_FMT16; + NeAAC_conf->outputFormat=FAAD_FMT_16BIT; } - MSG_V("FAAD: Decoder init done (%dBytes)!\n", sh->a_in_buffer_len); // XXX: remove or move to debug! - MSG_V("FAAD: Negotiated samplerate: %dHz channels: %d bps: %d\n", NeAAC_samplerate, NeAAC_channels,afmt2bps(sh->afmt)); - //sh->o_bps = sh->samplesize*NeAAC_channels*NeAAC_samplerate; - if(!sh->i_bps) { - MSG_WARN("FAAD: compressed input bitrate missing, assuming 128kbit/s!\n"); - sh->i_bps = 128*1000/8; // XXX: HACK!!! ::atmos - } else - MSG_V("FAAD: got %dkbit/s bitrate from MP4 header!\n",sh->i_bps*8/1000); - } - return 1; + /* Set the default object type and samplerate */ + NeAACDecSetConfiguration(NeAAC_hdec, NeAAC_conf); + if(!sh->codecdata_len) { + sh->a_in_buffer_len = demux_read_data_r(sh->ds, sh->a_in_buffer, sh->a_in_buffer_size,&pts); + /* init the codec */ + NeAAC_init = NeAACDecInit(NeAAC_hdec, sh->a_in_buffer, + sh->a_in_buffer_len, &NeAAC_samplerate, + &NeAAC_channels); + sh->a_in_buffer_len -= (NeAAC_init > 0)?NeAAC_init:0; // how many bytes init consumed + // XXX FIXME: shouldn't we memcpy() here in a_in_buffer ?? --A'rpi + } else { // We have ES DS in codecdata + NeAAC_init = NeAACDecInit2(NeAAC_hdec, sh->codecdata, + sh->codecdata_len, + &NeAAC_samplerate, + &NeAAC_channels); + } + if(NeAAC_init < 0) { + MSG_WARN("FAAD: Failed to initialize the decoder!\n"); // XXX: deal with cleanup! + NeAACDecClose(NeAAC_hdec); + // XXX: mp_free a_in_buffer here or in uninit? + return MPXP_False; + } else { + NeAAC_conf = NeAACDecGetCurrentConfiguration(NeAAC_hdec); + sh->nch = NeAAC_channels; + sh->rate = NeAAC_samplerate; + switch(NeAAC_conf->outputFormat){ + default: + case FAAD_FMT_16BIT: sh->afmt=bps2afmt(2); break; + case FAAD_FMT_24BIT: sh->afmt=bps2afmt(3); break; + case FAAD_FMT_FLOAT: + case FAAD_FMT_32BIT: sh->afmt=bps2afmt(4); break; + } + MSG_V("FAAD: Decoder init done (%dBytes)!\n", sh->a_in_buffer_len); // XXX: remove or move to debug! + MSG_V("FAAD: Negotiated samplerate: %dHz channels: %d bps: %d\n", NeAAC_samplerate, NeAAC_channels,afmt2bps(sh->afmt)); + //sh->o_bps = sh->samplesize*NeAAC_channels*NeAAC_samplerate; + if(!sh->i_bps) { + MSG_WARN("FAAD: compressed input bitrate missing, assuming 128kbit/s!\n"); + sh->i_bps = 128*1000/8; // XXX: HACK!!! ::atmos + } else MSG_V("FAAD: got %dkbit/s bitrate from MP4 header!\n",sh->i_bps*8/1000); + } + return MPXP_Ok; } static void uninit(sh_audio_t *sh) { - MSG_V("FAAD: Closing decoder!\n"); - NeAACDecClose(NeAAC_hdec); - mp_free(sh->context); + MSG_V("FAAD: Closing decoder!\n"); + NeAACDecClose(NeAAC_hdec); + mp_free(sh->context); } static MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) { - UNUSED(sh); - UNUSED(cmd); - UNUSED(arg); - return MPXP_Unknown; + UNUSED(sh); + UNUSED(cmd); + UNUSED(arg); + return MPXP_Unknown; } static unsigned decode(sh_audio_t *sh,unsigned char *buf,unsigned minlen,unsigned maxlen,float *pts) Modified: mplayerxp/libmpcodecs/ad_ffmpeg.c =================================================================== --- mplayerxp/libmpcodecs/ad_ffmpeg.c 2012-11-09 08:44:54 UTC (rev 309) +++ mplayerxp/libmpcodecs/ad_ffmpeg.c 2012-11-09 11:43:47 UTC (rev 310) @@ -19,12 +19,15 @@ #include "libavformat/riff.h" #include "codecs_ld.h" -static int acodec_inited; +typedef struct priv_s { + AVCodecContext *lavc_ctx; +}priv_t; struct codecs_st* __FASTCALL__ find_ffmpeg_audio(sh_audio_t* sh) { unsigned i; struct codecs_st* acodec = NULL; const char *what="AVCodecID"; + priv_t* priv=sh->context; enum AVCodecID id = ff_codec_get_id(ff_codec_wav_tags,sh->wtag); if (id <= 0) { prn_err: @@ -33,10 +36,11 @@ ,sh->wtag); return 0; } - if(!acodec_inited){ + if(!priv){ + priv=mp_mallocz(sizeof(priv_t)); + sh->context=priv; // avcodec_init(); avcodec_register_all(); - acodec_inited=1; } AVCodec *codec=avcodec_find_decoder(id); if(!codec) { what="AVCodec"; goto prn_err; } @@ -57,12 +61,11 @@ #define FF_INPUT_BUFFER_PADDING_SIZE 8 #endif -static const ad_info_t info = -{ - "FFmpeg/libavcodec audio decoders", - "ffmpeg", - "Nickols_K", - "build-in" +static const ad_info_t info = { + "FFmpeg/libavcodec audio decoders", + "ffmpeg", + "Nickols_K", + "build-in" }; static const config_t options[] = { @@ -71,105 +74,104 @@ LIBAD_EXTERN(ffmpeg) -int preinit(sh_audio_t *sh) +MPXP_Rc preinit(sh_audio_t *sh) { - sh->audio_out_minsize=AVCODEC_MAX_AUDIO_FRAME_SIZE; - return 1; + sh->audio_out_minsize=AVCODEC_MAX_AUDIO_FRAME_SIZE; + return MPXP_Ok; } -int init(sh_audio_t *sh_audio) +MPXP_Rc init(sh_audio_t *sh_audio) { - int x; - float pts; - AVCodec *lavc_codec=NULL; - AVCodecContext *lavc_context; - MSG_V("FFmpeg's libavcodec audio codec\n"); - if(!acodec_inited){ + int x; + float pts; + AVCodec *lavc_codec=NULL; + priv_t* priv=sh_audio->context; + MSG_V("FFmpeg's libavcodec audio codec\n"); + if(!priv){ + priv=mp_mallocz(sizeof(priv_t)); + sh_audio->context=priv; // avcodec_init(); avcodec_register_all(); - acodec_inited=1; } lavc_codec = (AVCodec *)avcodec_find_decoder_by_name(sh_audio->codec->dll_name); - if(!lavc_codec){ + if(!lavc_codec) { MSG_ERR(MSGTR_MissingLAVCcodec,sh_audio->codec->dll_name); - return 0; + return MPXP_False; } - lavc_context = avcodec_alloc_context3(lavc_codec); - sh_audio->context = lavc_context; - if(sh_audio->wf) - { - lavc_context->channels = sh_audio->wf->nChannels; - lavc_context->sample_rate = sh_audio->wf->nSamplesPerSec; - lavc_context->bit_rate = sh_audio->wf->nAvgBytesPerSec * 8; - lavc_context->block_align = sh_audio->wf->nBlockAlign; - lavc_context->bits_per_coded_sample = sh_audio->wf->wBitsPerSample; + priv->lavc_ctx = avcodec_alloc_context3(lavc_codec); + if(sh_audio->wf) { + priv->lavc_ctx->channels = sh_audio->wf->nChannels; + priv->lavc_ctx->sample_rate = sh_audio->wf->nSamplesPerSec; + priv->lavc_ctx->bit_rate = sh_audio->wf->nAvgBytesPerSec * 8; + priv->lavc_ctx->block_align = sh_audio->wf->nBlockAlign; + priv->lavc_ctx->bits_per_coded_sample = sh_audio->wf->wBitsPerSample; /* alloc extra data */ if (sh_audio->wf->cbSize > 0) { - lavc_context->extradata = mp_malloc(sh_audio->wf->cbSize+FF_INPUT_BUFFER_PADDING_SIZE); - lavc_context->extradata_size = sh_audio->wf->cbSize; - memcpy(lavc_context->extradata, (char *)sh_audio->wf + sizeof(WAVEFORMATEX), - lavc_context->extradata_size); + priv->lavc_ctx->extradata = mp_malloc(sh_audio->wf->cbSize+FF_INPUT_BUFFER_PADDING_SIZE); + priv->lavc_ctx->extradata_size = sh_audio->wf->cbSize; + memcpy(priv->lavc_ctx->extradata, (char *)sh_audio->wf + sizeof(WAVEFORMATEX), + priv->lavc_ctx->extradata_size); } } // for QDM2 - if (sh_audio->codecdata_len && sh_audio->codecdata && !lavc_context->extradata) - { - lavc_context->extradata = mp_malloc(sh_audio->codecdata_len); - lavc_context->extradata_size = sh_audio->codecdata_len; - memcpy(lavc_context->extradata, (char *)sh_audio->codecdata, - lavc_context->extradata_size); + if (sh_audio->codecdata_len && sh_audio->codecdata && !priv->lavc_ctx->extradata) { + priv->lavc_ctx->extradata = mp_malloc(sh_audio->codecdata_len); + priv->lavc_ctx->extradata_size = sh_audio->codecdata_len; + memcpy(priv->lavc_ctx->extradata, (char *)sh_audio->codecdata, + priv->lavc_ctx->extradata_size); } - lavc_context->codec_tag = sh_audio->wtag; - lavc_context->codec_type = lavc_codec->type; - lavc_context->codec_id = lavc_codec->id; + priv->lavc_ctx->codec_tag = sh_audio->wtag; + priv->lavc_ctx->codec_type = lavc_codec->type; + priv->lavc_ctx->codec_id = lavc_codec->id; /* open it */ - if (avcodec_open2(lavc_context, lavc_codec, NULL) < 0) { - MSG_ERR( MSGTR_CantOpenCodec); - return 0; + if (avcodec_open2(priv->lavc_ctx, lavc_codec, NULL) < 0) { + MSG_ERR( MSGTR_CantOpenCodec); + return MPXP_False; } - MSG_V("INFO: libavcodec init OK!\n"); + MSG_V("INFO: libavcodec init OK!\n"); - // Decode at least 1 byte: (to get header filled) - x=decode(sh_audio,sh_audio->a_buffer,1,sh_audio->a_buffer_size,&pts); - if(x>0) sh_audio->a_buffer_len=x; + // Decode at least 1 byte: (to get header filled) + x=decode(sh_audio,sh_audio->a_buffer,1,sh_audio->a_buffer_size,&pts); + if(x>0) sh_audio->a_buffer_len=x; - sh_audio->nch=lavc_context->channels; - sh_audio->rate=lavc_context->sample_rate; - switch(lavc_context->sample_fmt) { - case AV_SAMPLE_FMT_U8: ///< unsigned 8 bits - sh_audio->afmt=AFMT_U8; - break; - default: - case AV_SAMPLE_FMT_S16: ///< signed 16 bits - sh_audio->afmt=AFMT_S16_LE; - break; - case AV_SAMPLE_FMT_S32: ///< signed 32 bits - sh_audio->afmt=AFMT_S32_LE; - break; - case AV_SAMPLE_FMT_FLT: ///< float - sh_audio->afmt=AFMT_FLOAT32; - break; - } - sh_audio->i_bps=lavc_context->bit_rate/8; - return 1; + sh_audio->nch=priv->lavc_ctx->channels; + sh_audio->rate=priv->lavc_ctx->sample_rate; + switch(priv->lavc_ctx->sample_fmt) { + case AV_SAMPLE_FMT_U8: ///< unsigned 8 bits + sh_audio->afmt=AFMT_U8; + break; + default: + case AV_SAMPLE_FMT_S16: ///< signed 16 bits + sh_audio->afmt=AFMT_S16_LE; + break; + case AV_SAMPLE_FMT_S32: ///< signed 32 bits + sh_audio->afmt=AFMT_S32_LE; + break; + case AV_SAMPLE_FMT_FLT: ///< float + sh_audio->afmt=AFMT_FLOAT32; + break; + } + sh_audio->i_bps=priv->lavc_ctx->bit_rate/8; + return MPXP_Ok; } void uninit(sh_audio_t *sh) { - AVCodecContext *lavc_context=sh->context; - avcodec_close(sh->context); - if (lavc_context->extradata) mp_free(lavc_context->extradata); - mp_free(lavc_context); - acodec_inited=0; + priv_t* priv=sh->context; + avcodec_close(priv->lavc_ctx); + if (priv->lavc_ctx->extradata) mp_free(priv->lavc_ctx->extradata); + mp_free(priv->lavc_ctx); + mp_free(priv); + sh->context=NULL; } MPXP_Rc control(sh_audio_t *sh,int cmd,any_t* arg, ...) { UNUSED(arg); - AVCodecContext *lavc_context = sh->context; + priv_t* priv = sh->context; switch(cmd){ case ADCTRL_RESYNC_STREAM: - avcodec_flush_buffers(lavc_context); + avcodec_flush_buffers(priv->lavc_ctx); return MPXP_True; default: break; } @@ -178,6 +180,7 @@ unsigned decode(sh_audio_t *sh_audio,unsigned char *buf,unsigned minlen,unsigned maxlen,float *pts) { + priv_t* priv = sh_audio->context; unsigned char *start=NULL; int y; unsigned len=0; @@ -191,7 +194,7 @@ av_init_packet(&pkt); pkt.data = start; pkt.size = x; - y=avcodec_decode_audio3(sh_audio->context,(int16_t*)buf,&len2,&pkt); + y=avcodec_decode_audio3(priv->lavc_ctx,(int16_t*)buf,&len2,&pkt); if(y<0){ MSG_V("lavc_audio: error\n");break; } if(y<x) { Modified: mplayerxp/libmpcodecs/ad_hwac3.c =================================================================== --- mplayerxp/libmpcodecs/ad_hwac3.c 2012-11-09 08:44:54 UTC (rev 309) +++ mplayerxp/libmpcodecs/ad_hwac3.c 2012-11-09 11:43:47 UTC (rev 310) @@ -21,17 +21,15 @@ }priv_t; struct hwac3info { - int bitrate, framesize, samplerate, bsmod; + unsigned bitrate, framesize, samplerate, bsmod; }; -struct frmsize_s -{ - unsigned short bit_rate; - unsigned short frm_size[3]; +struct frmsize_s { + unsigned short bit_rate; + unsigned short frm_size[3]; }; -static const struct frmsize_s frmsizecod_tbl[64] = -{ +static const struct frmsize_s frmsizecod_tbl[64] = { { 32 ,{64 ,69 ,96 } }, { 32 ,{64 ,70 ,96 } }, { 40 ,{80 ,87 ,120 } }, @@ -73,69 +71,69 @@ }; struct syncframe { - struct syncinfo { - unsigned char syncword[2]; - unsigned char crc1[2]; - unsigned char code; - } syncinfo; - struct bsi { - unsigned char bsidmod; - unsigned char acmod; - } bsi; + struct syncinfo { + unsigned char syncword[2]; + unsigned char crc1[2]; + unsigned char code; + } syncinfo; + struct bsi { + unsigned char bsidmod; + unsigned char acmod; + } bsi; }; -int ac3_iec958_build_burst(int length, int data_type, int big_endian, unsigned char * data, unsigned char * out) +unsigned ac3_iec958_build_burst(unsigned length, unsigned data_type, unsigned big_endian, unsigned char * data, unsigned char * out) { - out[0] = 0x72; - out[1] = 0xF8; - out[2] = 0x1F; - out[3] = 0x4E; - out[4] = (length) ? data_type : 0; /* & 0x1F; */ - out[5] = 0x00; - out[6] = (length << 3) & 0xFF; - out[7] = (length >> 5) & 0xFF; - if (big_endian) - swab(data, out + 8, length); - else - memcpy(out + 8, data, length); - memset(out + 8 + length, 0, 6144 - 8 - length); - return 6144; + out[0] = 0x72; + out[1] = 0xF8; + out[2] = 0x1F; + out[3] = 0x4E; + out[4] = (length) ? data_type : 0; /* & 0x1F; */ + out[5] = 0x00; + out[6] = (length << 3) & 0xFF; + out[7] = (length >> 5) & 0xFF; + if (big_endian) + swab(data, out + 8, length); + else + memcpy(out + 8, data, length); + memset(out + 8 + length, 0, 6144 - 8 - length); + return 6144; } -int ac3_iec958_parse_syncinfo(unsigned char *buf, int size, struct hwac3info *ai, int *skipped) +int ac3_iec958_parse_syncinfo(unsigned char *buf, unsigned size, struct hwac3info *ai, unsigned *skipped) { - int samplerates[4] = { 48000, 44100, 32000, -1 }; - unsigned short _sync = 0; - unsigned char *ptr = buf; - int fscod, frmsizecod; - struct syncframe *sf; - - _sync = buf[0] << 8; - _sync |= buf[1]; - ptr = buf + 2; - *skipped = 0; - while (_sync != 0xb77 && *skipped < size - 8) { - _sync <<= 8; - _sync |= *ptr; - ptr++; - *skipped += 1; - } - if (_sync != 0xb77) - return -1; - ptr -= 2; - sf = (struct syncframe *) ptr; - fscod = (sf->syncinfo.code >> 6) & 0x03; - ai->samplerate = samplerates[fscod]; - if (ai->samplerate == -1) - return -1; - frmsizecod = sf->syncinfo.code & 0x3f; - ai->framesize = 2 * frmsizecod_tbl[frm... [truncated message content] |