mirror of
https://github.com/tuxbox-neutrino/libstb-hal.git
synced 2025-08-26 23:13:16 +02:00
Enable aac writer and use resmpling for some AAC streams thx Taapat and technik
This commit is contained in:
@@ -215,7 +215,7 @@ bool Input::Play()
|
||||
if (_videoTrack && (_videoTrack->stream == stream)) {
|
||||
int64_t pts = calcPts(stream, packet.pts);
|
||||
if (audioSeen && !player->output.Write(stream, &packet, pts))
|
||||
logprintf("writing data to %s device failed\n", "video");
|
||||
logprintf("writing data to video device failed\n");
|
||||
} else if (_audioTrack && (_audioTrack->stream == stream)) {
|
||||
if (restart_audio_resampling) {
|
||||
restart_audio_resampling = false;
|
||||
@@ -224,7 +224,7 @@ bool Input::Play()
|
||||
if (!player->isBackWard) {
|
||||
int64_t pts = calcPts(stream, packet.pts);
|
||||
if (!player->output.Write(stream, &packet, _videoTrack ? pts : 0))
|
||||
logprintf("writing data to %s device failed\n", "audio");
|
||||
logprintf("writing data to audio device failed\n");
|
||||
}
|
||||
audioSeen = true;
|
||||
} else if (_subtitleTrack && (_subtitleTrack->stream == stream)) {
|
||||
@@ -493,9 +493,9 @@ again:
|
||||
}
|
||||
|
||||
if (videoTrack)
|
||||
player->output.SwitchVideo(videoTrack->stream);
|
||||
player->output.SwitchVideo(videoTrack);
|
||||
if (audioTrack)
|
||||
player->output.SwitchAudio(audioTrack->stream);
|
||||
player->output.SwitchAudio(audioTrack);
|
||||
|
||||
ReadSubtitles(filename);
|
||||
|
||||
@@ -544,6 +544,7 @@ bool Input::UpdateTracks()
|
||||
}
|
||||
|
||||
track.pid = use_index_as_pid ? n + 1: stream->id;
|
||||
track.ac3flags = 0;
|
||||
|
||||
switch (stream->codec->codec_type) {
|
||||
case AVMEDIA_TYPE_VIDEO:
|
||||
@@ -553,26 +554,43 @@ bool Input::UpdateTracks()
|
||||
break;
|
||||
case AVMEDIA_TYPE_AUDIO:
|
||||
switch(stream->codec->codec_id) {
|
||||
case AV_CODEC_ID_MP2:
|
||||
track.ac3flags = 9;
|
||||
break;
|
||||
case AV_CODEC_ID_MP3:
|
||||
track.ac3flags = 4;
|
||||
break;
|
||||
case AV_CODEC_ID_AC3:
|
||||
track.ac3flags = 1;
|
||||
break;
|
||||
case AV_CODEC_ID_EAC3:
|
||||
track.ac3flags = 7;
|
||||
break;
|
||||
case AV_CODEC_ID_DTS:
|
||||
track.ac3flags = 6;
|
||||
break;
|
||||
case AV_CODEC_ID_AAC:
|
||||
track.ac3flags = 5;
|
||||
break;
|
||||
case AV_CODEC_ID_MP2:
|
||||
track.ac3flags = 1;
|
||||
break;
|
||||
case AV_CODEC_ID_MP3:
|
||||
track.ac3flags = 2;
|
||||
break;
|
||||
case AV_CODEC_ID_AC3:
|
||||
track.ac3flags = 3;
|
||||
break;
|
||||
case AV_CODEC_ID_DTS:
|
||||
track.ac3flags = 4;
|
||||
break;
|
||||
case AV_CODEC_ID_AAC: {
|
||||
unsigned int extradata_size = stream->codec->extradata_size;
|
||||
unsigned int object_type = 2;
|
||||
if(extradata_size >= 2)
|
||||
object_type = stream->codec->extradata[0] >> 3;
|
||||
if (extradata_size <= 1 || object_type == 1 || object_type == 5) {
|
||||
fprintf(stderr, "use resampling for AAC\n");
|
||||
track.ac3flags = 6;
|
||||
}
|
||||
else
|
||||
track.ac3flags = 5;
|
||||
break;
|
||||
}
|
||||
case AV_CODEC_ID_FLAC:
|
||||
track.ac3flags = 8;
|
||||
break;
|
||||
case AV_CODEC_ID_WMAV1:
|
||||
case AV_CODEC_ID_WMAV2:
|
||||
case AV_CODEC_ID_WMAVOICE:
|
||||
case AV_CODEC_ID_WMAPRO:
|
||||
case AV_CODEC_ID_WMALOSSLESS:
|
||||
track.ac3flags = 9;
|
||||
break;
|
||||
default:
|
||||
track.ac3flags = 0;
|
||||
track.ac3flags = 0;
|
||||
}
|
||||
player->manager.addAudioTrack(track);
|
||||
if (!audioTrack)
|
||||
@@ -686,7 +704,7 @@ bool Input::GetDuration(int64_t &duration)
|
||||
bool Input::SwitchAudio(Track *track)
|
||||
{
|
||||
audioTrack = track;
|
||||
player->output.SwitchAudio(track ? track->stream : NULL);
|
||||
player->output.SwitchAudio(track ? track : NULL);
|
||||
// player->Seek(-5000, false);
|
||||
return true;
|
||||
}
|
||||
@@ -706,7 +724,7 @@ bool Input::SwitchTeletext(Track *track)
|
||||
bool Input::SwitchVideo(Track *track)
|
||||
{
|
||||
videoTrack = track;
|
||||
player->output.SwitchVideo(track ? track->stream : NULL);
|
||||
player->output.SwitchVideo(track ? track : NULL);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user