diff options
Diffstat (limited to 'libmpcodecs')
70 files changed, 1421 insertions, 1328 deletions
diff --git a/libmpcodecs/ad.h b/libmpcodecs/ad.h index 1fa94d2e9e..9b1daf9e48 100644 --- a/libmpcodecs/ad.h +++ b/libmpcodecs/ad.h @@ -25,7 +25,7 @@ typedef mp_codec_info_t ad_info_t; /* interface of video decoder drivers */ -typedef struct ad_functions_s +typedef struct ad_functions { const ad_info_t *info; int (*preinit)(sh_audio_t *sh); diff --git a/libmpcodecs/ad_acm.c b/libmpcodecs/ad_acm.c index b179515754..46af4fae7d 100644 --- a/libmpcodecs/ad_acm.c +++ b/libmpcodecs/ad_acm.c @@ -22,7 +22,6 @@ #include "config.h" #include "mp_msg.h" -#include "help_mp.h" #include "libmpdemux/aviprint.h" #include "loader/wineacm.h" @@ -75,7 +74,7 @@ static int preinit(sh_audio_t *sh_audio) priv->o_wf = malloc(sizeof(WAVEFORMATEX)); if (!priv->o_wf) { - mp_msg(MSGT_DECAUDIO,MSGL_ERR,MSGTR_ACMiniterror); + mp_tmsg(MSGT_DECAUDIO,MSGL_ERR,"Could not load/initialize Win32/ACM audio codec (missing DLL file?).\n"); return 0; } @@ -106,7 +105,7 @@ static int preinit(sh_audio_t *sh_audio) else mp_msg(MSGT_WIN32, MSGL_ERR, "ACM_Decoder: acmStreamOpen error: %d\n", (int)ret); - mp_msg(MSGT_DECAUDIO,MSGL_ERR,MSGTR_ACMiniterror); + mp_tmsg(MSGT_DECAUDIO,MSGL_ERR,"Could not load/initialize Win32/ACM audio codec (missing DLL file?).\n"); return 0; } mp_msg(MSGT_WIN32, MSGL_V, "Audio codec opened OK! ;-)\n"); diff --git a/libmpcodecs/ad_dmo.c b/libmpcodecs/ad_dmo.c index d89e9d646c..1501c21078 100644 --- a/libmpcodecs/ad_dmo.c +++ b/libmpcodecs/ad_dmo.c @@ -22,7 +22,6 @@ #include "config.h" #include "mp_msg.h" -#include "help_mp.h" #include "ad_internal.h" #include "libaf/reorder_ch.h" @@ -52,7 +51,7 @@ static int preinit(sh_audio_t *sh_audio) audio_output_channels : (sh_audio->wf->nChannels>=2 ? 2 : 1); if(!(ds_adec=DMO_AudioDecoder_Open(sh_audio->codec->dll,&sh_audio->codec->guid,sh_audio->wf,chans))) { - mp_msg(MSGT_DECAUDIO,MSGL_ERR,MSGTR_MissingDLLcodec,sh_audio->codec->dll); + mp_tmsg(MSGT_DECAUDIO,MSGL_ERR,"ERROR: Could not open required DirectShow codec %s.\n",sh_audio->codec->dll); return 0; } sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec; diff --git a/libmpcodecs/ad_dshow.c b/libmpcodecs/ad_dshow.c index e88ed0c2fa..8fb94660a4 100644 --- a/libmpcodecs/ad_dshow.c +++ b/libmpcodecs/ad_dshow.c @@ -22,7 +22,6 @@ #include "config.h" #include "mp_msg.h" -#include "help_mp.h" #include "ad_internal.h" @@ -49,7 +48,7 @@ static int preinit(sh_audio_t *sh_audio) DS_AudioDecoder* ds_adec; if(!(ds_adec=DS_AudioDecoder_Open(sh_audio->codec->dll,&sh_audio->codec->guid,sh_audio->wf))) { - mp_msg(MSGT_DECAUDIO,MSGL_ERR,MSGTR_MissingDLLcodec,sh_audio->codec->dll); + mp_tmsg(MSGT_DECAUDIO,MSGL_ERR,"ERROR: Could not open required DirectShow codec %s.\n",sh_audio->codec->dll); return 0; } sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec; diff --git a/libmpcodecs/ad_dvdpcm.c b/libmpcodecs/ad_dvdpcm.c index b0bb169d95..41f6a1426d 100644 --- a/libmpcodecs/ad_dvdpcm.c +++ b/libmpcodecs/ad_dvdpcm.c @@ -22,7 +22,6 @@ #include "config.h" #include "mp_msg.h" -#include "help_mp.h" #include "ad_internal.h" static const ad_info_t info = @@ -56,7 +55,7 @@ static int init(sh_audio_t *sh) sh->samplesize = 2; break; case 1: - mp_msg(MSGT_DECAUDIO, MSGL_INFO, MSGTR_SamplesWanted); + mp_tmsg(MSGT_DECAUDIO, MSGL_INFO, "Samples of this format are needed to improve support. Please contact the developers.\n"); sh->i_bps = sh->channels * sh->samplerate * 5 / 2; case 2: sh->sample_format = AF_FORMAT_S24_BE; diff --git a/libmpcodecs/ad_faad.c b/libmpcodecs/ad_faad.c index 4f62765257..14fe9a6280 100644 --- a/libmpcodecs/ad_faad.c +++ b/libmpcodecs/ad_faad.c @@ -172,7 +172,7 @@ static int init(sh_audio_t *sh) sh->samplesize=2; //sh->o_bps = sh->samplesize*faac_channels*faac_samplerate; if(!sh->i_bps) { - mp_msg(MSGT_DECAUDIO,MSGL_WARN,"FAAD: compressed input bitrate missing, assuming 128kbit/s!\n"); + mp_msg(MSGT_DECAUDIO, MSGL_V, "FAAD: compressed input bitrate missing, assuming 128kbit/s!\n"); sh->i_bps = 128*1000/8; // XXX: HACK!!! ::atmos } else mp_msg(MSGT_DECAUDIO,MSGL_V,"FAAD: got %dkbit/s bitrate from MP4 header!\n",sh->i_bps*8/1000); diff --git a/libmpcodecs/ad_ffmpeg.c b/libmpcodecs/ad_ffmpeg.c index 9d1b8356ad..c954fb2311 100644 --- a/libmpcodecs/ad_ffmpeg.c +++ b/libmpcodecs/ad_ffmpeg.c @@ -22,7 +22,6 @@ #include "config.h" #include "mp_msg.h" -#include "help_mp.h" #include "ad_internal.h" #include "libaf/reorder_ch.h" @@ -68,7 +67,7 @@ static int init(sh_audio_t *sh_audio) lavc_codec = (AVCodec *)avcodec_find_decoder_by_name(sh_audio->codec->dll); if(!lavc_codec){ - mp_msg(MSGT_DECAUDIO,MSGL_ERR,MSGTR_MissingLAVCcodec,sh_audio->codec->dll); + mp_tmsg(MSGT_DECAUDIO,MSGL_ERR,"Cannot find codec '%s' in libavcodec...\n",sh_audio->codec->dll); return 0; } @@ -108,7 +107,7 @@ static int init(sh_audio_t *sh_audio) /* open it */ if (avcodec_open(lavc_context, lavc_codec) < 0) { - mp_msg(MSGT_DECAUDIO,MSGL_ERR, MSGTR_CantOpenCodec); + mp_tmsg(MSGT_DECAUDIO,MSGL_ERR, "Could not open codec.\n"); return 0; } mp_msg(MSGT_DECAUDIO,MSGL_V,"INFO: libavcodec \"%s\" init OK!\n", lavc_codec->name); @@ -143,19 +142,18 @@ static int init(sh_audio_t *sh_audio) mp_msg(MSGT_DECAUDIO, MSGL_FATAL, "Unsupported sample format\n"); return 0; } - if(sh_audio->wf){ + /* If the audio is AAC the container level data may be unreliable + * because of SBR handling problems (possibly half real sample rate at + * container level). Default AAC decoding with ad_faad has used codec-level + * values for a long time without generating complaints so it should be OK. + */ + if (sh_audio->wf && lavc_context->codec_id != CODEC_ID_AAC) { // If the decoder uses the wrong number of channels all is lost anyway. // sh_audio->channels=sh_audio->wf->nChannels; - - if (lavc_context->codec_id == CODEC_ID_AAC && - sh_audio->samplerate == 2*sh_audio->wf->nSamplesPerSec) { - mp_msg(MSGT_DECAUDIO, MSGL_WARN, - "Ignoring broken container sample rate for ACC with SBR\n"); - } else if (sh_audio->wf->nSamplesPerSec) - sh_audio->samplerate=sh_audio->wf->nSamplesPerSec; - + if (sh_audio->wf->nSamplesPerSec) + sh_audio->samplerate=sh_audio->wf->nSamplesPerSec; if (sh_audio->wf->nAvgBytesPerSec) - sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec; + sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec; } sh_audio->samplesize=af_fmt2bits(sh_audio->sample_format)/ 8; return 1; @@ -166,7 +164,7 @@ static void uninit(sh_audio_t *sh) AVCodecContext *lavc_context = sh->context; if (avcodec_close(lavc_context) < 0) - mp_msg(MSGT_DECVIDEO, MSGL_ERR, MSGTR_CantCloseCodec); + mp_tmsg(MSGT_DECVIDEO, MSGL_ERR, "Could not close codec.\n"); av_freep(&lavc_context->extradata); av_freep(&lavc_context); } diff --git a/libmpcodecs/ad_hwac3.c b/libmpcodecs/ad_hwac3.c index 119839b9bc..f45fd00a17 100644 --- a/libmpcodecs/ad_hwac3.c +++ b/libmpcodecs/ad_hwac3.c @@ -28,10 +28,9 @@ #include "config.h" #include "mp_msg.h" -#include "help_mp.h" #include "mpbswap.h" #include "libavutil/common.h" -#include "libavutil/intreadwrite.h" +#include "ffmpeg_files/intreadwrite.h" #include "ad_internal.h" diff --git a/libmpcodecs/ad_hwmpa.c b/libmpcodecs/ad_hwmpa.c index 30caa9b0f9..87c00b6f42 100644 --- a/libmpcodecs/ad_hwmpa.c +++ b/libmpcodecs/ad_hwmpa.c @@ -24,7 +24,6 @@ #include "config.h" #include "mp_msg.h" -#include "help_mp.h" #include "libaf/af_format.h" #include "ad_internal.h" diff --git a/libmpcodecs/ad_liba52.c b/libmpcodecs/ad_liba52.c index 2e2006abc1..29e546a602 100644 --- a/libmpcodecs/ad_liba52.c +++ b/libmpcodecs/ad_liba52.c @@ -26,7 +26,6 @@ #include "config.h" #include "mp_msg.h" -#include "help_mp.h" #include "mpbswap.h" #include "ad_internal.h" diff --git a/libmpcodecs/ad_libdv.c b/libmpcodecs/ad_libdv.c index 8485a8883f..cbcb46efea 100644 --- a/libmpcodecs/ad_libdv.c +++ b/libmpcodecs/ad_libdv.c @@ -25,7 +25,6 @@ #include "config.h" #include "mp_msg.h" -#include "help_mp.h" #include "img_format.h" @@ -102,7 +101,7 @@ static int decode_audio(sh_audio_t *audio, unsigned char *buf, int minlen, int m dv_parse_header(decoder, dv_audio_frame); if(xx!=decoder->frame_size) - mp_msg(MSGT_GLOBAL,MSGL_WARN,MSGTR_MPCODECS_AudioFramesizeDiffers, + mp_tmsg(MSGT_GLOBAL,MSGL_WARN,"[AD_LIBDV] Warning! Audio framesize differs! read=%d hdr=%d.\n", xx, decoder->frame_size); if (dv_decode_full_audio(decoder, dv_audio_frame,(int16_t**) audioBuffers)) diff --git a/libmpcodecs/ad_libmad.c b/libmpcodecs/ad_libmad.c index 103a05f4a9..08dbe72857 100644 --- a/libmpcodecs/ad_libmad.c +++ b/libmpcodecs/ad_libmad.c @@ -24,7 +24,7 @@ #include "ad_internal.h" -static const ad_info_t info = { +static const ad_info_t info = { "libmad mpeg audio decoder", "libmad", "A'rpi", diff --git a/libmpcodecs/ad_msadpcm.c b/libmpcodecs/ad_msadpcm.c index 64dc39c485..162c7c04d3 100644 --- a/libmpcodecs/ad_msadpcm.c +++ b/libmpcodecs/ad_msadpcm.c @@ -30,7 +30,7 @@ #include "config.h" #include "libavutil/common.h" -#include "libavutil/intreadwrite.h" +#include "ffmpeg_files/intreadwrite.h" #include "mpbswap.h" #include "ad_internal.h" diff --git a/libmpcodecs/ad_pcm.c b/libmpcodecs/ad_pcm.c index 6e43cec514..29e78d69af 100644 --- a/libmpcodecs/ad_pcm.c +++ b/libmpcodecs/ad_pcm.c @@ -19,70 +19,80 @@ #include <stdio.h> #include <stdlib.h> #include <unistd.h> +#include <stdbool.h> +#include "talloc.h" #include "config.h" #include "ad_internal.h" #include "libaf/af_format.h" #include "libaf/reorder_ch.h" -static const ad_info_t info = -{ - "Uncompressed PCM audio decoder", - "pcm", - "Nick Kurshev", - "A'rpi", - "" +static const ad_info_t info = { + "Uncompressed PCM audio decoder", + "pcm", + "Nick Kurshev", + "A'rpi", + "" +}; + +struct ad_pcm_context { + unsigned char *buffer; + int buffer_pos; + int buffer_len; + int buffer_size; }; LIBAD_EXTERN(pcm) -static int init(sh_audio_t *sh_audio) +static int init(sh_audio_t * sh_audio) { - WAVEFORMATEX *h=sh_audio->wf; - if (!h) - return 0; - sh_audio->i_bps=h->nAvgBytesPerSec; - sh_audio->channels=h->nChannels; - sh_audio->samplerate=h->nSamplesPerSec; - sh_audio->samplesize=(h->wBitsPerSample+7)/8; - sh_audio->sample_format=AF_FORMAT_S16_LE; // default - switch(sh_audio->format){ /* hardware formats: */ + WAVEFORMATEX *h = sh_audio->wf; + if (!h) + return 0; + sh_audio->i_bps = h->nAvgBytesPerSec; + sh_audio->channels = h->nChannels; + sh_audio->samplerate = h->nSamplesPerSec; + sh_audio->samplesize = (h->wBitsPerSample + 7) / 8; + sh_audio->sample_format = AF_FORMAT_S16_LE; // default + switch (sh_audio->format) { /* hardware formats: */ case 0x0: - case 0x1: // Microsoft PCM - case 0xfffe: // Extended - switch (sh_audio->samplesize) { - case 1: sh_audio->sample_format=AF_FORMAT_U8; break; - case 2: sh_audio->sample_format=AF_FORMAT_S16_LE; break; - case 3: sh_audio->sample_format=AF_FORMAT_S24_LE; break; - case 4: sh_audio->sample_format=AF_FORMAT_S32_LE; break; - } - break; - case 0x3: // IEEE float - sh_audio->sample_format=AF_FORMAT_FLOAT_LE; - break; - case 0x6: sh_audio->sample_format=AF_FORMAT_A_LAW;break; - case 0x7: sh_audio->sample_format=AF_FORMAT_MU_LAW;break; - case 0x11: sh_audio->sample_format=AF_FORMAT_IMA_ADPCM;break; - case 0x50: sh_audio->sample_format=AF_FORMAT_MPEG2;break; + case 0x1: // Microsoft PCM + case 0xfffe: // Extended + switch (sh_audio->samplesize) { + case 1: sh_audio->sample_format = AF_FORMAT_U8; break; + case 2: sh_audio->sample_format = AF_FORMAT_S16_LE; break; + case 3: sh_audio->sample_format = AF_FORMAT_S24_LE; break; + case 4: sh_audio->sample_format = AF_FORMAT_S32_LE; break; + } + break; + case 0x3: // IEEE float + sh_audio->sample_format = AF_FORMAT_FLOAT_LE; + break; + case 0x6: sh_audio->sample_format = AF_FORMAT_A_LAW; break; + case 0x7: sh_audio->sample_format = AF_FORMAT_MU_LAW; break; + case 0x11: sh_audio->sample_format = AF_FORMAT_IMA_ADPCM; break; + case 0x50: sh_audio->sample_format = AF_FORMAT_MPEG2; break; /* case 0x2000: sh_audio->sample_format=AFMT_AC3; */ case 0x20776172: // 'raw ' - sh_audio->sample_format=AF_FORMAT_S16_BE; - if(sh_audio->samplesize==1) sh_audio->sample_format=AF_FORMAT_U8; - break; + sh_audio->sample_format = AF_FORMAT_S16_BE; + if (sh_audio->samplesize == 1) + sh_audio->sample_format = AF_FORMAT_U8; + break; case 0x736F7774: // 'twos' - sh_audio->sample_format=AF_FORMAT_S16_BE; - // intended fall-through + sh_audio->sample_format = AF_FORMAT_S16_BE; + // intended fall-through case 0x74776F73: // 'sowt' - if(sh_audio->samplesize==1) sh_audio->sample_format=AF_FORMAT_S8; - break; + if (sh_audio->samplesize == 1) + sh_audio->sample_format = AF_FORMAT_S8; + break; case 0x32336c66: // 'fl32', bigendian float32 - sh_audio->sample_format=AF_FORMAT_FLOAT_BE; - sh_audio->samplesize=4; - break; + sh_audio->sample_format = AF_FORMAT_FLOAT_BE; + sh_audio->samplesize = 4; + break; case 0x666c3332: // '23lf', little endian float32, MPlayer internal fourCC - sh_audio->sample_format=AF_FORMAT_FLOAT_LE; - sh_audio->samplesize=4; - break; + sh_audio->sample_format = AF_FORMAT_FLOAT_LE; + sh_audio->samplesize = 4; + break; /* case 0x34366c66: // 'fl64', bigendian float64 sh_audio->sample_format=AF_FORMAT_FLOAT_BE; sh_audio->samplesize=8; @@ -92,66 +102,106 @@ static int init(sh_audio_t *sh_audio) sh_audio->samplesize=8; break;*/ case 0x34326e69: // 'in24', bigendian int24 - sh_audio->sample_format=AF_FORMAT_S24_BE; - sh_audio->samplesize=3; - break; + sh_audio->sample_format = AF_FORMAT_S24_BE; |