mirror of https://github.com/mpv-player/mpv
Add Tremor (an integer-only Vorbis decoder) support.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@8343 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
216d10cf2d
commit
984c1c4602
|
@ -170,6 +170,7 @@ Codecs:
|
|||
--disable-libavcodec disable libavcodec [autodetect]
|
||||
--enable-libfame enable libfame realtime encoder [autodetect]
|
||||
--enable-vorbis build with OggVorbis support [autodetect]
|
||||
--enable-tremor build with integer-only OggVorbis support [disabled]
|
||||
--enable-faad build with FAAD2 (MP4/AAC) support [autodetect]
|
||||
--disable-libdv disable libdv 0.9.5 en/decoding support [autodetect]
|
||||
--disable-mad disable libmad (mpeg audio) support [autodetect]
|
||||
|
@ -964,6 +965,7 @@ _arts=auto
|
|||
_liblzo=auto
|
||||
_mad=auto
|
||||
_vorbis=auto
|
||||
_tremor=no
|
||||
_faad=auto
|
||||
_css=auto
|
||||
_dvdnav=yes
|
||||
|
@ -1099,6 +1101,8 @@ for ac_option do
|
|||
--disable-liblzo) _liblzo=no ;;
|
||||
--enable-vorbis) _vorbis=yes ;;
|
||||
--disable-vorbis) _vorbis=no ;;
|
||||
--enable-tremor) _tremor=yes ;;
|
||||
--disable-tremor) _tremor=no ;;
|
||||
--enable-faad) _faad=yes ;;
|
||||
--disable-faad) _faad=no ;;
|
||||
--enable-css) _css=yes ;;
|
||||
|
@ -3580,10 +3584,17 @@ EOF
|
|||
fi
|
||||
if test "$_vorbis" = yes ; then
|
||||
_def_vorbis='#define HAVE_OGGVORBIS 1'
|
||||
_ld_vorbis='-lvorbis -logg'
|
||||
if test "$_tremor" = yes ; then
|
||||
_def_tremor='#define TREMOR 1'
|
||||
_ld_vorbis='-lvorbisidec -logg'
|
||||
else
|
||||
_def_tremor='#undef TREMOR'
|
||||
_ld_vorbis='-lvorbis -logg'
|
||||
fi
|
||||
_codecmodules="libvorbis $_codecmodules"
|
||||
else
|
||||
_def_vorbis='#undef HAVE_OGGVORBIS'
|
||||
_def_tremor='#undef TREMOR'
|
||||
_nocodecmodules="libvorbis $_nocodecmodules"
|
||||
fi
|
||||
echores "$_vorbis"
|
||||
|
@ -5020,6 +5031,9 @@ $_def_mad
|
|||
/* enable OggVorbis support */
|
||||
$_def_vorbis
|
||||
|
||||
/* enable Tremor as vorbis decoder */
|
||||
$_def_tremor
|
||||
|
||||
/* enable FAAD (AAC) support */
|
||||
$_def_faad
|
||||
|
||||
|
|
|
@ -25,7 +25,11 @@ static ad_info_t info =
|
|||
|
||||
LIBAD_EXTERN(libvorbis)
|
||||
|
||||
#ifdef TREMOR
|
||||
#include <tremor/ivorbiscodec.h>
|
||||
#else
|
||||
#include <vorbis/codec.h>
|
||||
#endif
|
||||
|
||||
// This struct is also defined in demux_ogg.c => common header ?
|
||||
typedef struct ov_struct_st {
|
||||
|
@ -35,6 +39,9 @@ typedef struct ov_struct_st {
|
|||
vorbis_dsp_state vd; /* central working state for the packet->PCM decoder */
|
||||
vorbis_block vb; /* local working space for packet->PCM decode */
|
||||
float rg_scale; /* replaygain scale */
|
||||
#ifdef TREMOR
|
||||
int rg_scale_int;
|
||||
#endif
|
||||
} ov_struct_t;
|
||||
|
||||
static int read_vorbis_comment( char* ptr, char* comment, char* format, ... ) {
|
||||
|
@ -125,6 +132,9 @@ static int init(sh_audio_t *sh)
|
|||
/* replaygain: security */
|
||||
if(ov->rg_scale > 15.)
|
||||
ov->rg_scale = 15.;
|
||||
#ifdef TREMOR
|
||||
ov->rg_scale_int = (int)(ov->rg_scale*256.f);
|
||||
#endif
|
||||
mp_msg(MSGT_DECAUDIO,MSGL_V,"OggVorbis: Bitstream is %d channel%s, %dHz, %dbit/s %cBR\n",(int)ov->vi.channels,ov->vi.channels>1?"s":"",(int)ov->vi.rate,(int)ov->vi.bitrate_nominal,
|
||||
(ov->vi.bitrate_lower!=ov->vi.bitrate_nominal)||(ov->vi.bitrate_upper!=ov->vi.bitrate_nominal)?'V':'C');
|
||||
if(rg_gain || rg_peak)
|
||||
|
@ -199,13 +209,15 @@ static int decode_audio(sh_audio_t *sh,unsigned char *buf,int minlen,int maxlen)
|
|||
for(i=0;i<ov->vi.channels;i++){
|
||||
ogg_int16_t *convbuffer=(ogg_int16_t *)(&buf[len]);
|
||||
ogg_int16_t *ptr=convbuffer+i;
|
||||
#ifdef TREMOR
|
||||
ogg_int32_t *mono=pcm[i];
|
||||
for(j=0;j<bout;j++){
|
||||
int val=(mono[j]*ov->rg_scale_int)>>(9+8);
|
||||
#else
|
||||
float *mono=pcm[i];
|
||||
for(j=0;j<bout;j++){
|
||||
#if 1
|
||||
int val=mono[j]*32767.f*ov->rg_scale;
|
||||
#else /* optional dither */
|
||||
int val=mono[j]*32767.f*ov->rg_scale+drand48()-0.5f;
|
||||
#endif
|
||||
#endif /* TREMOR */
|
||||
/* might as well guard against clipping */
|
||||
if(val>32767){
|
||||
val=32767;
|
||||
|
|
|
@ -13,8 +13,13 @@
|
|||
#include "demuxer.h"
|
||||
#include "stheader.h"
|
||||
|
||||
#ifdef TREMOR
|
||||
#include <tremor/ogg.h>
|
||||
#include <tremor/ivorbiscodec.h>
|
||||
#else
|
||||
#include <ogg/ogg.h>
|
||||
#include <vorbis/codec.h>
|
||||
#endif
|
||||
|
||||
#define BLOCK_SIZE 4096
|
||||
|
||||
|
|
Loading…
Reference in New Issue