mirror of
https://github.com/mpv-player/mpv
synced 2025-02-17 21:27:08 +00:00
audio: improve decoder open failure handling
Reinitialize sh_audio->samplesize and sample_format before falling back to another audio decoder (some decoders rely on default values). Remove code setting these fields from demux_mkv and demux_lavf (no decoder should depend on demuxer-set values for these fields). Conflicts: audio/decode/ad_lavc.c Merged from mplayer2 commit 6b9567. The changes to ad_lavc.c are not merged, as they are very specific to the mplayer2 libavresample hack; we deplanarize manually, so we can't get unsupported sample formats yet (except on raw audio with "pcm_f64le", as we don't support AV_SAMPLE_FMT_DBL in the audio chain).
This commit is contained in:
parent
a75e65db5d
commit
77eac2ec34
@ -64,6 +64,8 @@ static int init_audio_codec(sh_audio_t *sh_audio)
|
||||
{
|
||||
assert(!sh_audio->initialized);
|
||||
resync_audio_stream(sh_audio);
|
||||
sh_audio->samplesize = 2;
|
||||
sh_audio->sample_format = AF_FORMAT_S16_NE;
|
||||
if ((af_cfg.force & AF_INIT_FORMAT_MASK) == AF_INIT_FLOAT) {
|
||||
int fmt = AF_FORMAT_FLOAT_NE;
|
||||
if (sh_audio->ad_driver->control(sh_audio, ADCTRL_QUERY_FORMAT,
|
||||
|
@ -389,16 +389,6 @@ static void handle_stream(demuxer_t *demuxer, AVFormatContext *avfc, int i)
|
||||
sh_audio->samplerate = codec->sample_rate;
|
||||
sh_audio->i_bps = codec->bit_rate / 8;
|
||||
switch (codec->codec_id) {
|
||||
case CODEC_ID_PCM_S8:
|
||||
case CODEC_ID_PCM_U8:
|
||||
sh_audio->samplesize = 1;
|
||||
break;
|
||||
case CODEC_ID_PCM_S16LE:
|
||||
case CODEC_ID_PCM_S16BE:
|
||||
case CODEC_ID_PCM_U16LE:
|
||||
case CODEC_ID_PCM_U16BE:
|
||||
sh_audio->samplesize = 2;
|
||||
break;
|
||||
case CODEC_ID_PCM_ALAW:
|
||||
sh_audio->format = 0x6;
|
||||
break;
|
||||
|
@ -1365,13 +1365,10 @@ static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track,
|
||||
sh_a->samplerate = (uint32_t) track->a_sfreq;
|
||||
sh_a->container_out_samplerate = track->a_osfreq;
|
||||
sh_a->wf->nSamplesPerSec = (uint32_t) track->a_sfreq;
|
||||
if (track->a_bps == 0) {
|
||||
sh_a->samplesize = 2;
|
||||
if (track->a_bps == 0)
|
||||
sh_a->wf->wBitsPerSample = 16;
|
||||
} else {
|
||||
sh_a->samplesize = track->a_bps / 8;
|
||||
else
|
||||
sh_a->wf->wBitsPerSample = track->a_bps;
|
||||
}
|
||||
if (track->a_formattag == 0x0055) { /* MP3 || MP2 */
|
||||
sh_a->wf->nAvgBytesPerSec = 16000;
|
||||
sh_a->wf->nBlockAlign = 1152;
|
||||
|
Loading…
Reference in New Issue
Block a user