mirror of
https://projects.vdr-developer.org/git/vdr-plugin-softhddevice.git
synced 2023-10-10 19:16:51 +02:00
Add support for AAC LATM audio streams.
This commit is contained in:
parent
bc50f37c4d
commit
918170d00b
@ -1,6 +1,7 @@
|
|||||||
User johns
|
User johns
|
||||||
Date:
|
Date:
|
||||||
|
|
||||||
|
Add support for AAC LATM audio streams.
|
||||||
Fix bug: alsa and ffmpeg use different channel layout.
|
Fix bug: alsa and ffmpeg use different channel layout.
|
||||||
Support more LPCM sample rates and number of channels.
|
Support more LPCM sample rates and number of channels.
|
||||||
Quick&dirty support for mpeg LPCM streams.
|
Quick&dirty support for mpeg LPCM streams.
|
||||||
|
1
Todo
1
Todo
@ -39,6 +39,7 @@ video:
|
|||||||
hard channel switch
|
hard channel switch
|
||||||
OSD can only be shown after some stream could be shown
|
OSD can only be shown after some stream could be shown
|
||||||
yaepghd changed position is lost on channel switch
|
yaepghd changed position is lost on channel switch
|
||||||
|
use x11 screen size without geometry configuration
|
||||||
|
|
||||||
vdpau:
|
vdpau:
|
||||||
software decoder path not working
|
software decoder path not working
|
||||||
|
4
codec.c
4
codec.c
@ -852,6 +852,10 @@ void CodecAudioDecode(AudioDecoder * audio_decoder, const AVPacket * avpkt)
|
|||||||
dpkt->dts = audio_decoder->AudioParser->dts;
|
dpkt->dts = audio_decoder->AudioParser->dts;
|
||||||
buf_sz = sizeof(buf);
|
buf_sz = sizeof(buf);
|
||||||
l = avcodec_decode_audio3(audio_ctx, buf, &buf_sz, dpkt);
|
l = avcodec_decode_audio3(audio_ctx, buf, &buf_sz, dpkt);
|
||||||
|
if (l == AVERROR(EAGAIN)) {
|
||||||
|
index += n; // this is needed for aac latm
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (l < 0) { // no audio frame could be decompressed
|
if (l < 0) { // no audio frame could be decompressed
|
||||||
Error(_("codec: error audio data at %d\n"), index);
|
Error(_("codec: error audio data at %d\n"), index);
|
||||||
break;
|
break;
|
||||||
|
12
softhddev.c
12
softhddev.c
@ -261,7 +261,7 @@ int PlayAudio(const uint8_t * data, int size,
|
|||||||
return osize;
|
return osize;
|
||||||
}
|
}
|
||||||
// Detect audio code
|
// Detect audio code
|
||||||
// MPEG-PS mp2 MPEG1, MPEG2, AC3, LPCM
|
// MPEG-PS mp2 MPEG1, MPEG2, AC3, LPCM, AAC LATM
|
||||||
|
|
||||||
// Syncword - 0x0B77
|
// Syncword - 0x0B77
|
||||||
if (data[0] == 0x0B && data[1] == 0x77) {
|
if (data[0] == 0x0B && data[1] == 0x77) {
|
||||||
@ -279,7 +279,15 @@ int PlayAudio(const uint8_t * data, int size,
|
|||||||
CodecAudioOpen(MyAudioDecoder, NULL, CODEC_ID_MP2);
|
CodecAudioOpen(MyAudioDecoder, NULL, CODEC_ID_MP2);
|
||||||
AudioCodecID = CODEC_ID_MP2;
|
AudioCodecID = CODEC_ID_MP2;
|
||||||
}
|
}
|
||||||
// Private stram + LPCM ID
|
// latm header 0x56E0 11bits: 0x2B7
|
||||||
|
} else if (data[0] == 0x56 && (data[1] & 0xE0) == 0xE0) {
|
||||||
|
if (AudioCodecID != CODEC_ID_AAC_LATM) {
|
||||||
|
Debug(3, "[softhddev]%s: AAC LATM %d\n", __FUNCTION__, id);
|
||||||
|
CodecAudioClose(MyAudioDecoder);
|
||||||
|
CodecAudioOpen(MyAudioDecoder, NULL, CODEC_ID_AAC_LATM);
|
||||||
|
AudioCodecID = CODEC_ID_AAC_LATM;
|
||||||
|
}
|
||||||
|
// Private stream + LPCM ID
|
||||||
} else if (data[-n - 9 + 3] == 0xBD && data[0] == 0xA0) {
|
} else if (data[-n - 9 + 3] == 0xBD && data[0] == 0xA0) {
|
||||||
if (AudioCodecID != CODEC_ID_PCM_DVD) {
|
if (AudioCodecID != CODEC_ID_PCM_DVD) {
|
||||||
static int samplerates[] = { 48000, 96000, 44100, 32000 };
|
static int samplerates[] = { 48000, 96000, 44100, 32000 };
|
||||||
|
Loading…
Reference in New Issue
Block a user