audio: fix spdif packet size unit

In commit 5f8b060e I blindly assumed that the packet sizes were in
pseudo-samples, but they were actually in bytes. Oops.

(The effect was that cutting the audio was a bit less precise than it
can be.)

Also remove the packet size from ad_spdif.c; it didn't actually use it,
and simply takes what the spdif "muxer" returns.
This commit is contained in:
wm4 2015-03-10 17:11:38 +01:00
parent 69c61a882d
commit eb482140d9
2 changed files with 9 additions and 9 deletions

View File

@ -36,7 +36,6 @@
struct spdifContext {
struct mp_log *log;
AVFormatContext *lavf_ctx;
int iec61937_packet_size;
int out_buffer_len;
uint8_t out_buffer[OUTBUF_SIZE];
bool need_close;
@ -159,7 +158,6 @@ static int init(struct dec_audio *da, const char *decoder)
mp_audio_set_num_channels(&spdif_ctx->fmt, num_channels);
mp_audio_set_format(&spdif_ctx->fmt, sample_format);
spdif_ctx->fmt.rate = samplerate;
spdif_ctx->iec61937_packet_size = af_format_sample_alignment(sample_format);
if (avformat_write_header(lavf_ctx, &format_opts) < 0) {
MP_FATAL(da, "libavformat spdif initialization failed.\n");

View File

@ -228,16 +228,18 @@ int af_format_conversion_score(int dst_format, int src_format)
return score;
}
// Return the number of samples that make up one frame in this format.
// You get the byte size by multiplying them with sample size and channel count.
int af_format_sample_alignment(int format)
{
switch (format) {
case AF_FORMAT_S_AAC: return 16384;
case AF_FORMAT_S_AC3: return 6144;
case AF_FORMAT_S_DTSHD: return 32768;
case AF_FORMAT_S_DTS: return 32768;
case AF_FORMAT_S_EAC3: return 24576;
case AF_FORMAT_S_MP3: return 4608;
case AF_FORMAT_S_TRUEHD: return 61440;
case AF_FORMAT_S_AAC: return 16384 / 4;
case AF_FORMAT_S_AC3: return 6144 / 4;
case AF_FORMAT_S_DTSHD: return 32768 / 16;
case AF_FORMAT_S_DTS: return 2048 / 4;
case AF_FORMAT_S_EAC3: return 24576 / 4;
case AF_FORMAT_S_MP3: return 4608 / 4;
case AF_FORMAT_S_TRUEHD: return 61440 / 16;
default: return 1;
}
}