The attached patch should allow AC3 audio to kinda work with big dvb 3.4 in
Australia. It still stutters regularly, but you can switch between stream
types properly and even enable AC3 through the gui.
Note 1: There is also a hacked fix for a floating point exception (div by 0) I
was getting on HD channels.
Note 2: To enable AC3 audio you must set the "Use Dolby digital audio where
available" checkbox in the general settings page (next to Enable AC3
passthrough).
Let me know how it goes.
Cheers,
Mark Anderson
diff -buprB ../mythtv-bigdvb-3.4.orig/config.log ./config.log
--- ../mythtv-bigdvb-3.4.orig/config.log 2005-01-07 20:52:35.357549203 +1100
+++ ./config.log 2005-01-06 18:19:31.000000000 +1100
@@ -1,2 +1,2 @@
-Fri Jan 7 20:52:35 EST 2005
+Thu Jan 6 18:19:31 EST 2005
./configure
diff -buprB ../mythtv-bigdvb-3.4.orig/config.mak ./config.mak
--- ../mythtv-bigdvb-3.4.orig/config.mak 2005-01-07 20:52:35.373546398 +1100
+++ ./config.mak 2005-01-06 18:19:31.000000000 +1100
@@ -15,4 +15,4 @@ CONFIG_NETWORK=yes
CONFIG_ZLIB=yes
CONFIG_RISKY=yes
CONFIG_GPL=yes
-SRC_PATH=/home/mythtv/mythtv-cvs/mythtv-bigdvb-3.4.orig
+SRC_PATH=/home/mythtv/mythtv-cvs/mythtv-bigdvb-3.4
Only in ./filters/adjust: filter_adjust.o
Only in ./filters/adjust: libadjust.so
Only in ./filters/adjust: Makefile
Only in ./filters/bobdeint: filter_bobdeint.o
Only in ./filters/bobdeint: libbobdeint.so
Only in ./filters/bobdeint: Makefile
Only in ./filters/convert: filter_convert.o
Only in ./filters/convert: libconvert.so
Only in ./filters/convert: Makefile
Only in ./filters/crop: filter_crop.o
Only in ./filters/crop: libcrop.so
Only in ./filters/crop: Makefile
Only in ./filters/denoise3d: filter_denoise3d.o
Only in ./filters/denoise3d: libdenoise3d.so
Only in ./filters/denoise3d: Makefile
Only in ./filters/force: filter_force.o
Only in ./filters/force: libforce.so
Only in ./filters/force: Makefile
Only in ./filters/invert: filter_invert.o
Only in ./filters/invert: libinvert.so
Only in ./filters/invert: Makefile
Only in ./filters/kerneldeint: filter_kerneldeint.o
Only in ./filters/kerneldeint: libkerneldeint.so
Only in ./filters/kerneldeint: Makefile
Only in ./filters/linearblend: filter_linearblend.o
Only in ./filters/linearblend: liblinearblend.so
Only in ./filters/linearblend: Makefile
Only in ./filters: Makefile
Only in ./filters/onefield: filter_onefield.o
Only in ./filters/onefield: libonefield.so
Only in ./filters/onefield: Makefile
Only in ./filters/postprocess: filter_postprocess.o
Only in ./filters/postprocess: libpostprocess.so
Only in ./filters/postprocess: Makefile
Only in ./filters/quickdnr: filter_quickdnr.o
Only in ./filters/quickdnr: libquickdnr.so
Only in ./filters/quickdnr: Makefile
Only in ./i18n: dummy.o
Only in ./i18n: i18n
Only in ./i18n: Makefile
Only in ./libs/libavcodec: 4xm.o
Only in ./libs/libavcodec: 8bps.o
Only in ./libs/libavcodec: a52dec.o
Only in ./libs/libavcodec: ac3enc.o
Only in ./libs/libavcodec: adpcm.o
Only in ./libs/libavcodec: adx.o
Only in ./libs/libavcodec: allcodecs.o
Only in ./libs/libavcodec: asv1.o
Only in ./libs/libavcodec: audresample.o
Only in ./libs/libavcodec: bit_allocate.o
Only in ./libs/libavcodec: bitstream.o
Only in ./libs/libavcodec: cabac.o
Only in ./libs/libavcodec: cinepak.o
Only in ./libs/libavcodec: cljr.o
Only in ./libs/libavcodec: common.o
Only in ./libs/libavcodec: cputest.o
Only in ./libs/libavcodec: crc.o
Only in ./libs/libavcodec: cyuv.o
Only in ./libs/libavcodec: downmix.o
Only in ./libs/libavcodec: dpcm.o
Only in ./libs/libavcodec: dsputil_mmx.o
Only in ./libs/libavcodec: dsputil.o
Only in ./libs/libavcodec: dv.o
Only in ./libs/libavcodec: error_resilience.o
Only in ./libs/libavcodec: eval.o
Only in ./libs/libavcodec: faandct.o
Only in ./libs/libavcodec: fdct_mmx.o
Only in ./libs/libavcodec: fft.o
Only in ./libs/libavcodec: fft_sse.o
Only in ./libs/libavcodec: flac.o
Only in ./libs/libavcodec: flicvideo.o
Only in ./libs/libavcodec: g726.o
Only in ./libs/libavcodec: golomb.o
Only in ./libs/libavcodec: h261.o
Only in ./libs/libavcodec: h263dec.o
Only in ./libs/libavcodec: h263.o
Only in ./libs/libavcodec: h264idct.o
Only in ./libs/libavcodec: h264.o
Only in ./libs/libavcodec: huffyuv.o
Only in ./libs/libavcodec: idcinvideo.o
Only in ./libs/libavcodec: idct_mmx.o
Only in ./libs/libavcodec: imdct.o
Only in ./libs/libavcodec: imgconvert.o
Only in ./libs/libavcodec: imgresample.o
Only in ./libs/libavcodec: indeo3.o
Only in ./libs/libavcodec: integer.o
Only in ./libs/libavcodec: interplayvideo.o
Only in ./libs/libavcodec: jfdctfst.o
Only in ./libs/libavcodec: jfdctint.o
Only in ./libs/libavcodec: jrevdct.o
Only in ./libs/libavcodec: lcl.o
Only in ./libs/libavcodec: libmythavcodec-0.16.so
Only in ./libs/libavcodec: libmythavcodec-0.16.so.0
Only in ./libs/libavcodec: libmythavcodec-0.16.so.0.16
Only in ./libs/libavcodec: libmythavcodec-0.16.so.0.16.0
Only in ./libs/libavcodec: mace.o
Only in ./libs/libavcodec: Makefile
Only in ./libs/libavcodec: mdct.o
Only in ./libs/libavcodec: mem.o
Only in ./libs/libavcodec: mjpeg.o
Only in ./libs/libavcodec: motion_est_mmx.o
Only in ./libs/libavcodec: motion_est.o
Only in ./libs/libavcodec: mpeg12.o
Only in ./libs/libavcodec: mpegaudiodec.o
Only in ./libs/libavcodec: mpegaudio.o
Only in ./libs/libavcodec: mpegvideo_mmx.o
Only in ./libs/libavcodec: mpegvideo.o
Only in ./libs/libavcodec: msmpeg4.o
Only in ./libs/libavcodec: msrle.o
Only in ./libs/libavcodec: msvideo1.o
Only in ./libs/libavcodec: opts.o
Only in ./libs/libavcodec: parse.o
Only in ./libs/libavcodec: parser.o
Only in ./libs/libavcodec: pcm.o
Only in ./libs/libavcodec: png.o
Only in ./libs/libavcodec: pnm.o
Only in ./libs/libavcodec: postprocess.o
Only in ./libs/libavcodec: qdrw.o
Only in ./libs/libavcodec: qpeg.o
Only in ./libs/libavcodec: qtrle.o
Only in ./libs/libavcodec: ra144.o
Only in ./libs/libavcodec: ra288.o
Only in ./libs/libavcodec: rangecoder.o
Only in ./libs/libavcodec: ratecontrol.o
Only in ./libs/libavcodec: rational.o
Only in ./libs/libavcodec: raw.o
Only in ./libs/libavcodec: resample2.o
Only in ./libs/libavcodec: resample.o
Only in ./libs/libavcodec: roqvideo.o
Only in ./libs/libavcodec: rpza.o
Only in ./libs/libavcodec: rv10.o
Only in ./libs/libavcodec: simple_idct_mmx.o
Only in ./libs/libavcodec: simple_idct.o
Only in ./libs/libavcodec: smc.o
Only in ./libs/libavcodec: snow.o
Only in ./libs/libavcodec: sonic.o
Only in ./libs/libavcodec: svq1.o
Only in ./libs/libavcodec: tmp
Only in ./libs/libavcodec: truemotion1.o
Only in ./libs/libavcodec: tscc.o
Only in ./libs/libavcodec: ulti.o
Only in ./libs/libavcodec: utils.o
Only in ./libs/libavcodec: vcr1.o
Only in ./libs/libavcodec: vmdav.o
Only in ./libs/libavcodec: vp3dsp_mmx.o
Only in ./libs/libavcodec: vp3dsp.o
Only in ./libs/libavcodec: vp3dsp_sse2.o
Only in ./libs/libavcodec: vp3.o
Only in ./libs/libavcodec: vqavideo.o
Only in ./libs/libavcodec: wmadec.o
Only in ./libs/libavcodec: xan.o
Only in ./libs/libavcodec: xl.o
Only in ./libs/libavcodec: xvmcvideo.o
Only in ./libs/libavformat: 4xm.o
Only in ./libs/libavformat: allformats.o
Only in ./libs/libavformat: asf-enc.o
Only in ./libs/libavformat: asf.o
Only in ./libs/libavformat: audio.o
Only in ./libs/libavformat: au.o
Only in ./libs/libavformat: avidec.o
Only in ./libs/libavformat: avienc.o
Only in ./libs/libavformat: aviobuf.o
Only in ./libs/libavformat: avio.o
Only in ./libs/libavformat: crc.o
Only in ./libs/libavformat: cutils.o
Only in ./libs/libavformat: dv.o
Only in ./libs/libavformat: electronicarts.o
Only in ./libs/libavformat: ffm.o
Only in ./libs/libavformat: file.o
Only in ./libs/libavformat: flic.o
Only in ./libs/libavformat: flvdec.o
Only in ./libs/libavformat: flvenc.o
Only in ./libs/libavformat: idcin.o
Only in ./libs/libavformat: idroq.o
Only in ./libs/libavformat: img2.o
Only in ./libs/libavformat: img.o
Only in ./libs/libavformat: ipmovie.o
Only in ./libs/libavformat: libmythavformat-0.16.so
Only in ./libs/libavformat: libmythavformat-0.16.so.0
Only in ./libs/libavformat: libmythavformat-0.16.so.0.16
Only in ./libs/libavformat: libmythavformat-0.16.so.0.16.0
Only in ./libs/libavformat: Makefile
Only in ./libs/libavformat: matroska.o
Only in ./libs/libavformat: movenc.o
Only in ./libs/libavformat: mov.o
Only in ./libs/libavformat: mp3.o
diff -buprB ../mythtv-bigdvb-3.4.orig/libs/libavformat/mpeg.c ./libs/libavformat/mpeg.c
--- ../mythtv-bigdvb-3.4.orig/libs/libavformat/mpeg.c 2004-12-25 10:24:06.000000000 +1100
+++ ./libs/libavformat/mpeg.c 2005-01-07 20:39:51.194533920 +1100
@@ -1455,13 +1455,13 @@ static int mpegps_read_pes_header(AVForm
else if( c!= 0xf )
goto redo;
- if (startcode == 0x1bd) {
+/* if (startcode == 0x1bd) {
if (len < 1)
goto redo;
startcode = get_byte(&s->pb);
len--;
if (startcode >= 0x80 && startcode <= 0xbf) {
- /* audio: skip header */
+ // audio: skip header
if (len < 3)
goto redo;
get_byte(&s->pb);
@@ -1470,6 +1470,7 @@ static int mpegps_read_pes_header(AVForm
len -= 3;
}
}
+*/
if(dts != AV_NOPTS_VALUE && ppos && s->build_index){
int i;
for(i=0; i<s->nb_streams; i++){
@@ -1509,9 +1510,13 @@ static int mpegps_read_packet(AVFormatCo
} else if (startcode >= 0x1c0 && startcode <= 0x1df) {
type = CODEC_TYPE_AUDIO;
codec_id = CODEC_ID_MP2;
- } else if (startcode >= 0x80 && startcode <= 0x89) {
+/* } else if (startcode >= 0x80 && startcode <= 0x89) {
+ type = CODEC_TYPE_AUDIO;
+ codec_id = CODEC_ID_AC3;*/
+ } else if (startcode >= 0x1b0 && startcode <= 0x1bf) {
type = CODEC_TYPE_AUDIO;
codec_id = CODEC_ID_AC3;
+
} else if (startcode >= 0x8a && startcode <= 0x9f) {
type = CODEC_TYPE_AUDIO;
codec_id = CODEC_ID_DTS;
Only in ./libs/libavformat: mpeg.o
Only in ./libs/libavformat: mpegtsenc.o
Only in ./libs/libavformat: mpegts.o
Only in ./libs/libavformat: mpjpeg.o
Only in ./libs/libavformat: nsvdec.o
Only in ./libs/libavformat: nut.o
Only in ./libs/libavformat: os_support.o
Only in ./libs/libavformat: psxstr.o
Only in ./libs/libavformat: raw.o
Only in ./libs/libavformat: rm.o
Only in ./libs/libavformat: segafilm.o
Only in ./libs/libavformat: sierravmd.o
Only in ./libs/libavformat: sol.o
Only in ./libs/libavformat: swf.o
Only in ./libs/libavformat: tmp
Only in ./libs/libavformat: utils.o
Only in ./libs/libavformat: wav.o
Only in ./libs/libavformat: wc3movie.o
Only in ./libs/libavformat: westwood.o
Only in ./libs/libavformat: yuv4mpeg.o
Only in ./libs/libmyth: audiooutputalsa.o
Only in ./libs/libmyth: audiooutputbase.o
Only in ./libs/libmyth: audiooutput.o
Only in ./libs/libmyth: audiooutputoss.o
Only in ./libs/libmyth: dbsettings.o
Only in ./libs/libmyth: dialogbox.o
Only in ./libs/libmyth: DisplayRes.o
Only in ./libs/libmyth: generictree.o
Only in ./libs/libmyth: httpcomms.o
Only in ./libs/libmyth: inetcomms.o
Only in ./libs/libmyth: jsmenuevent.o
Only in ./libs/libmyth: jsmenu.o
Only in ./libs/libmyth: lcddevice.o
Only in ./libs/libmyth: libmyth-0.16.so
Only in ./libs/libmyth: libmyth-0.16.so.0
Only in ./libs/libmyth: libmyth-0.16.so.0.16
Only in ./libs/libmyth: libmyth-0.16.so.0.16.0
Only in ./libs/libmyth: lircevent.o
Only in ./libs/libmyth: lirc.o
Only in ./libs/libmyth: Makefile
Only in ./libs/libmyth: managedlist.o
Only in ./libs/libmyth: moc_dialogbox.cpp
Only in ./libs/libmyth: moc_dialogbox.o
Only in ./libs/libmyth: moc_httpcomms.cpp
Only in ./libs/libmyth: moc_httpcomms.o
Only in ./libs/libmyth: moc_inetcomms.cpp
Only in ./libs/libmyth: moc_inetcomms.o
Only in ./libs/libmyth: moc_jsmenu.cpp
Only in ./libs/libmyth: moc_jsmenu.o
Only in ./libs/libmyth: moc_lcddevice.cpp
Only in ./libs/libmyth: moc_lcddevice.o
Only in ./libs/libmyth: moc_lirc.cpp
Only in ./libs/libmyth: moc_lirc.o
Only in ./libs/libmyth: moc_managedlist.cpp
Only in ./libs/libmyth: moc_managedlist.o
Only in ./libs/libmyth: moc_mythcdrom.cpp
Only in ./libs/libmyth: moc_mythcdrom.o
Only in ./libs/libmyth: moc_mythcontext.cpp
Only in ./libs/libmyth: moc_mythcontext.o
Only in ./libs/libmyth: moc_mythdialogs.cpp
Only in ./libs/libmyth: moc_mythdialogs.o
Only in ./libs/libmyth: moc_mythmedia.cpp
Only in ./libs/libmyth: moc_mythmediamonitor.cpp
Only in ./libs/libmyth: moc_mythmediamonitor.o
Only in ./libs/libmyth: moc_mythmedia.o
Only in ./libs/libmyth: moc_mythwidgets.cpp
Only in ./libs/libmyth: moc_mythwidgets.o
Only in ./libs/libmyth: moc_mythwizard.cpp
Only in ./libs/libmyth: moc_mythwizard.o
Only in ./libs/libmyth: moc_settings.cpp
Only in ./libs/libmyth: moc_settings.o
Only in ./libs/libmyth: moc_themedmenu.cpp
Only in ./libs/libmyth: moc_themedmenu.o
Only in ./libs/libmyth: moc_uilistbtntype.cpp
Only in ./libs/libmyth: moc_uilistbtntype.o
Only in ./libs/libmyth: moc_uiphoneentry.cpp
Only in ./libs/libmyth: moc_uiphoneentry.o
Only in ./libs/libmyth: moc_uitypes.cpp
Only in ./libs/libmyth: moc_uitypes.o
Only in ./libs/libmyth: mythcdrom-linux.o
Only in ./libs/libmyth: mythcdrom.o
Only in ./libs/libmyth: mythcontext.o
Only in ./libs/libmyth: mythdialogs.o
Only in ./libs/libmyth: mythmediamonitor.o
Only in ./libs/libmyth: mythmedia.o
Only in ./libs/libmyth: mythplugin.o
Only in ./libs/libmyth: mythwidgets.o
Only in ./libs/libmyth: mythwizard.o
Only in ./libs/libmyth: oldsettings.o
Only in ./libs/libmyth: remotefile.o
Only in ./libs/libmyth: screensaver-null.o
Only in ./libs/libmyth: screensaver.o
Only in ./libs/libmyth: screensaver-x11.o
Only in ./libs/libmyth: settings.o
Only in ./libs/libmyth: themedmenu.o
Only in ./libs/libmyth: uilistbtntype.o
Only in ./libs/libmyth: uiphoneentry.o
Only in ./libs/libmyth: uitypes.o
Only in ./libs/libmyth: util.o
Only in ./libs/libmyth: volumebase.o
Only in ./libs/libmyth: volumecontrol.o
Only in ./libs/libmyth: xmlparse.o
Only in ./libs/libmythsamplerate: libmythsamplerate-0.16.a
Only in ./libs/libmythsamplerate: Makefile
Only in ./libs/libmythsamplerate: samplerate.o
Only in ./libs/libmythsamplerate: src_linear.o
Only in ./libs/libmythsamplerate: src_sinc.o
Only in ./libs/libmythsamplerate: src_zoh.o
Only in ./libs/libmythsoundtouch: AAFilter.o
Only in ./libs/libmythsoundtouch: cpu_detect_x86_gcc.o
Only in ./libs/libmythsoundtouch: FIFOSampleBuffer.o
Only in ./libs/libmythsoundtouch: FIRFilter.o
Only in ./libs/libmythsoundtouch: libmythsoundtouch-0.16.a
Only in ./libs/libmythsoundtouch: Makefile
Only in ./libs/libmythsoundtouch: mmx_gcc.o
Only in ./libs/libmythsoundtouch: RateTransposer.o
Only in ./libs/libmythsoundtouch: SoundTouch.o
Only in ./libs/libmythsoundtouch: TDStretch.o
Only in ./libs/libmythtv: atscdescriptorsmap.o
Only in ./libs/libmythtv: atscdescriptors.o
Only in ./libs/libmythtv: atscstreamdata.o
Only in ./libs/libmythtv: atsctables.o
diff -buprB ../mythtv-bigdvb-3.4.orig/libs/libmythtv/avformatdecoder.cpp ./libs/libmythtv/avformatdecoder.cpp
--- ../mythtv-bigdvb-3.4.orig/libs/libmythtv/avformatdecoder.cpp 2004-12-25 10:24:07.000000000 +1100
+++ ./libs/libmythtv/avformatdecoder.cpp 2005-01-07 21:07:04.862213665 +1100
@@ -39,6 +39,7 @@ AvFormatDecoder::AvFormatDecoder(NuppelV
audio_channels = -1;
audio_sample_size = -1;
audio_sampling_rate = -1;
+ audio_codec = -1;
hasbframes = false;
@@ -491,7 +492,6 @@ int AvFormatDecoder::ScanStreams(bool no
case CODEC_TYPE_AUDIO:
{
assert(enc->codec_id);
- enc->channels = 2;
bitrate += enc->bit_rate;
break;
}
@@ -517,11 +517,11 @@ int AvFormatDecoder::ScanStreams(bool no
AVCodec *codec = avcodec_find_decoder(enc->codec_id);
if (!codec)
{
- VERBOSE(VB_IMPORTANT, QString("AvFormatDecoder: Could not find decoder for codec (%1) aborting.")
+ VERBOSE(VB_IMPORTANT, QString("AvFormatDecoder: Could not find decoder for codec (%1) ignoring.")
.arg(enc->codec_id));
- av_close_input_file(ic);
- ic = NULL;
- scanerror = -1;
+ //av_close_input_file(ic);
+ //ic = NULL;
+ //scanerror = -1;
continue;
}
@@ -537,7 +537,7 @@ int AvFormatDecoder::ScanStreams(bool no
av_close_input_file(ic);
ic = NULL;
scanerror = -1;
- continue;
+ break;
}
if (enc->codec_type == CODEC_TYPE_AUDIO)
@@ -585,8 +584,9 @@ bool AvFormatDecoder::CheckVideoParams(i
return true;
}
-void AvFormatDecoder::CheckAudioParams(int freq, int channels, bool safe)
+void AvFormatDecoder::CheckAudioParams(int freq, int channels, int codec_id, bool safe)
{
+
if (freq <= 0 || channels <= 0)
return;
@@ -592,18 +592,20 @@ void AvFormatDecoder::CheckAudioParams(i
if (safe || audio_check_1st == 2)
{
- if (freq == audio_sampling_rate && channels == audio_channels)
+ if (freq == audio_sampling_rate && channels == audio_channels && audio_codec == codec_id)
return;
audio_check_1st = 1;
audio_sampling_rate_2nd = freq;
audio_channels_2nd = channels;
+ audio_codec_2nd = codec_id;
if (safe == false)
return;
}
else
{
if (freq != audio_sampling_rate_2nd || channels != audio_channels_2nd ||
- (freq == audio_sampling_rate && channels == audio_channels))
+ codec_id != audio_codec_2nd ||
+ (freq == audio_sampling_rate && channels == audio_channels && codec_id == audio_codec))
{
audio_sampling_rate_2nd = -1;
audio_channels_2nd = -1;
@@ -1000,7 +1001,7 @@ void AvFormatDecoder::incCurrentAudioTra
wantedAudioStream = audioStreams[currentAudioTrack];
AVCodecContext *e = &ic->streams[wantedAudioStream]->codec;
- CheckAudioParams(e->sample_rate, e->channels, true);
+ CheckAudioParams(e->sample_rate, e->channels, e->codec_id, true);
}
}
@@ -1017,7 +1018,7 @@ void AvFormatDecoder::decCurrentAudioTra
wantedAudioStream = audioStreams[currentAudioTrack];
AVCodecContext *e = &ic->streams[wantedAudioStream]->codec;
- CheckAudioParams(e->sample_rate, e->channels, true);
+ CheckAudioParams(e->sample_rate, e->channels, e->codec_id, true);
}
}
@@ -1035,22 +1036,24 @@ bool AvFormatDecoder::setCurrentAudioTra
wantedAudioStream = audioStreams[currentAudioTrack];
AVCodecContext *e = &ic->streams[wantedAudioStream]->codec;
- CheckAudioParams(e->sample_rate, e->channels, true);
+ CheckAudioParams(e->sample_rate, e->channels, e->codec_id, true);
return true;
}
-bool AvFormatDecoder::autoSelectAudioTrack()
+bool AvFormatDecoder::autoSelectAudioTrack(bool wantac3)
{
if (!audioStreams.size())
return false;
-
+ if (wantac3)
+ {
+ wantac3 = gContext->GetNumSetting("WantAC3", false);
+ }
bool foundAudio = false;
int minChannels = 1;
int maxTracks = (audioStreams.size() - 1);
int track;
- if (do_ac3_passthru)
+ if (wantac3)
minChannels = 2;
-
while (!foundAudio)
{
for (track = maxTracks; track >= 0; track--)
@@ -1055,9 +1058,14 @@ bool AvFormatDecoder::autoSelectAudioTra
{
for (track = maxTracks; track >= 0; track--)
{
+
int tempStream = audioStreams[track];
AVCodecContext *e = &ic->streams[tempStream]->codec;
-
+ if (((wantac3) && (e->codec_id != CODEC_ID_AC3)) ||
+ ((!wantac3) && (e->codec_id == CODEC_ID_AC3)))
+ {
+ continue;
+ }
if (e->channels > minChannels)
{
currentAudioTrack = track;
@@ -1066,16 +1074,25 @@ bool AvFormatDecoder::autoSelectAudioTra
.arg(track + 1).arg(tempStream));
VERBOSE(VB_AUDIO, QString("It has %1 channels and we needed at least %2")
.arg(e->channels).arg(minChannels + 1));
-
+ if (wantac3)
+ {
+ VERBOSE(VB_ALL, QString("AC3 stream has been selected"));
+ }
AVCodecContext *e = &ic->streams[wantedAudioStream]->codec;
- CheckAudioParams(e->sample_rate, e->channels, true);
+ CheckAudioParams(e->sample_rate, e->channels, e->codec_id, true);
return true;
}
}
minChannels--;
if (minChannels < 0)
+ {
+ if (wantac3)
+ {
+ return autoSelectAudioTrack(false);
+ }
return false;
}
+ }
return false;
}
@@ -1092,6 +1109,8 @@ void AvFormatDecoder::SetupAudioStream(v
VERBOSE(VB_ALL, QString("Initializing audio parms from stream #%1.")
.arg(currentAudioTrack));
+ audio_codec = curstream->codec.codec_id;
+
m_parent->SetEffDsp(curstream->codec.sample_rate * 100);
do_ac3_passthru = curstream->codec.codec_id == CODEC_ID_AC3 &&
@@ -1099,6 +1118,7 @@ void AvFormatDecoder::SetupAudioStream(v
if (do_ac3_passthru)
{
+ VERBOSE(VB_ALL, QString("AC3 passthrough is enabled"));
// An AC3 stream looks like a 48KHz 2ch audio stream to
// the sound card
audio_sample_size = 4;
@@ -1137,6 +1156,7 @@ bool AvFormatDecoder::GetFrame(int onlyv
while (!allowedquit)
{
+
if (gotvideo)
{
if (lowbuffers && onlyvideo == 0 && lastapts < lastvpts + 100 &&
@@ -1248,6 +1268,13 @@ bool AvFormatDecoder::GetFrame(int onlyv
{
case CODEC_TYPE_AUDIO:
{
+ //hmm the codec has changed from what we were initialised with
+ //move to the next stream to see if it is correct
+ if (curstream->codec.codec_id != audio_codec)
+ {
+ incCurrentAudioTrack();
+ }
+
if (firstloop && pkt->pts != (int64_t)AV_NOPTS_VALUE)
lastapts = pkt->pts / (AV_TIME_BASE / 1000);
@@ -1280,7 +1306,9 @@ bool AvFormatDecoder::GetFrame(int onlyv
if (!do_ac3_passthru)
CheckAudioParams(curstream->codec.sample_rate,
- curstream->codec.channels, false);
+ curstream->codec.channels,
+ curstream->codec.codec_id,
+ false);
long long temppts = lastapts;
Only in ./libs/libmythtv: avformatdecoder.cpp.orig
diff -buprB ../mythtv-bigdvb-3.4.orig/libs/libmythtv/avformatdecoder.h ./libs/libmythtv/avformatdecoder.h
--- ../mythtv-bigdvb-3.4.orig/libs/libmythtv/avformatdecoder.h 2004-12-08 15:23:16.000000000 +1100
+++ ./libs/libmythtv/avformatdecoder.h 2005-01-07 19:54:24.000000000 +1100
@@ -78,7 +78,7 @@ class AvFormatDecoder : public DecoderBa
/// Attempt to find the optimal audio stream to use based on the number of channels,
/// and if we're doing AC3 passthrough. This will select the highest stream number
/// that matches our criteria.
- bool autoSelectAudioTrack();
+ bool autoSelectAudioTrack(bool wantac3 = true);
RingBuffer *getRingBuf(void) { return ringBuffer; }
@@ -112,7 +112,7 @@ class AvFormatDecoder : public DecoderBa
bool CheckVideoParams(int width, int height);
/// See if the audio parameters have changed, return true if so.
- void CheckAudioParams(int freq, int channels, bool safe);
+ void CheckAudioParams(int freq, int channels, int codec, bool safe);
void SetupAudioStream(void);
int EncodeAC3Frame(unsigned char* data, int len, short *samples,
@@ -134,10 +134,13 @@ class AvFormatDecoder : public DecoderBa
int audio_sample_size;
int audio_sampling_rate;
int audio_channels;
+ int audio_codec;
int audio_check_1st; ///< Used by CheckAudioParams
int audio_sampling_rate_2nd; ///< Used by CheckAudioParams
int audio_channels_2nd; ///< Used by CheckAudioParams
+ int audio_codec_2nd; ///< Used by CheckAudioParams
+
bool hasbframes; ///< Set in open but not used.
Only in ./libs/libmythtv: avformatdecoder.h.orig
Only in ./libs/libmythtv: avformatdecoder.o
Only in ./libs/libmythtv: blend.o
Only in ./libs/libmythtv: cc.o
Only in ./libs/libmythtv: channelbase.o
Only in ./libs/libmythtv: channeleditor.o
Only in ./libs/libmythtv: channel.o
Only in ./libs/libmythtv: channelsettings.o
Only in ./libs/libmythtv: commercial_skip.o
Only in ./libs/libmythtv: datadirect.o
Only in ./libs/libmythtv: dbcheck.o
Only in ./libs/libmythtv: decoderbase.o
Only in ./libs/libmythtv: dtvrecorder.o
Only in ./libs/libmythtv: dvbcam.o
Only in ./libs/libmythtv: dvbchannel.o
Only in ./libs/libmythtv: dvbci.o
Only in ./libs/libmythtv/dvbdev: tmp
diff -buprB ../mythtv-bigdvb-3.4.orig/libs/libmythtv/dvbdev/transform.c ./libs/libmythtv/dvbdev/transform.c
--- ../mythtv-bigdvb-3.4.orig/libs/libmythtv/dvbdev/transform.c 2005-01-07 20:50:05.762778073 +1100
+++ ./libs/libmythtv/dvbdev/transform.c 2005-01-07 20:18:01.674148524 +1100
@@ -649,8 +647,12 @@ void send_ipack(ipack *p)
f=get_ac3info(p->buf+off+3+ac3_off,
p->count-ac3_off, &ai,0);
if ( !f ){
+ if (ai.framesize != 0)
nframes = (p->count-off-3-ac3_off)/
ai.framesize + 1;
+ else
+ nframes = 0;
+
p->buf[off+1] = nframes;
p->buf[off+2] = (ac3_off >> 8)& 0xFF;
p->buf[off+3] = (ac3_off)& 0xFF;
Only in ./libs/libmythtv: dvbdev.o
Only in ./libs/libmythtv: dvbdiseqc.o
diff -buprB ../mythtv-bigdvb-3.4.orig/libs/libmythtv/dvbrecorder.cpp ./libs/libmythtv/dvbrecorder.cpp
--- ../mythtv-bigdvb-3.4.orig/libs/libmythtv/dvbrecorder.cpp 2005-01-07 20:50:05.687791221 +1100
+++ ./libs/libmythtv/dvbrecorder.cpp 2005-01-07 18:38:40.565060986 +1100
@@ -48,6 +48,7 @@ using namespace std;
#include "RingBuffer.h"
#include "programinfo.h"
+#include "mythcontext.h"
#include "transform.h"
#include "dvbtypes.h"
@@ -296,7 +297,7 @@ void DVBRecorder::SetDemuxFilters(PMTObj
*/
// Myth currently only supports one video and one audio PID
- ElementaryPIDObject as = pmt.PreferredAudioStream();
+ ElementaryPIDObject as = pmt.PreferredAudioStream(gContext->GetNumSetting("WantAC3", false));
ElementaryPIDObject vs = pmt.PreferredVideoStream();
ElementaryPIDObject sub = pmt.PreferredSubtitleStream();
vpid = vs.PID;
Only in ./libs/libmythtv: dvbrecorder.o
Only in ./libs/libmythtv: dvbsignalmonitor.o
Only in ./libs/libmythtv: dvbsiparser.o
Only in ./libs/libmythtv: dvbtransporteditor.o
Only in ./libs/libmythtv: fifowriter.o
Only in ./libs/libmythtv: filtermanager.o
Only in ./libs/libmythtv: frequencies.o
Only in ./libs/libmythtv: guidegrid.o
Only in ./libs/libmythtv: hamm.o
Only in ./libs/libmythtv: hdtvrecorder.o
Only in ./libs/libmythtv: infostructs.o
Only in ./libs/libmythtv: ivtvdecoder.o
Only in ./libs/libmythtv: jitterometer.o
Only in ./libs/libmythtv: jobqueue.o
Only in ./libs/libmythtv: lang.o
Only in ./libs/libmythtv: libmythtv-0.16.so
Only in ./libs/libmythtv: libmythtv-0.16.so.0
Only in ./libs/libmythtv: libmythtv-0.16.so.0.16
Only in ./libs/libmythtv: libmythtv-0.16.so.0.16.0
Only in ./libs/libmythtv: Makefile
Only in ./libs/libmythtv: minilzo.o
Only in ./libs/libmythtv: moc_channeleditor.cpp
Only in ./libs/libmythtv: moc_channeleditor.o
Only in ./libs/libmythtv: moc_channelsettings.cpp
Only in ./libs/libmythtv: moc_channelsettings.o
Only in ./libs/libmythtv: moc_dvbcam.cpp
Only in ./libs/libmythtv: moc_dvbcam.o
Only in ./libs/libmythtv: moc_dvbchannel.cpp
Only in ./libs/libmythtv: moc_dvbchannel.o
Only in ./libs/libmythtv: moc_dvbrecorder.cpp
Only in ./libs/libmythtv: moc_dvbrecorder.o
Only in ./libs/libmythtv: moc_dvbsignalmonitor.cpp
Only in ./libs/libmythtv: moc_dvbsignalmonitor.o
Only in ./libs/libmythtv: moc_dvbtransporteditor.cpp
Only in ./libs/libmythtv: moc_dvbtransporteditor.o
Only in ./libs/libmythtv: moc_guidegrid.cpp
Only in ./libs/libmythtv: moc_guidegrid.o
Only in ./libs/libmythtv: moc_osd.cpp
Only in ./libs/libmythtv: moc_osdlistbtntype.cpp
Only in ./libs/libmythtv: moc_osdlistbtntype.o
Only in ./libs/libmythtv: moc_osd.o
Only in ./libs/libmythtv: moc_osdtypes.cpp
Only in ./libs/libmythtv: moc_osdtypes.o
Only in ./libs/libmythtv: moc_profilegroup.cpp
Only in ./libs/libmythtv: moc_profilegroup.o
Only in ./libs/libmythtv: moc_progfind.cpp
Only in ./libs/libmythtv: moc_progfind.o
Only in ./libs/libmythtv: moc_proglist.cpp
Only in ./libs/libmythtv: moc_proglist.o
Only in ./libs/libmythtv: moc_recordingprofile.cpp
Only in ./libs/libmythtv: moc_recordingprofile.o
Only in ./libs/libmythtv: moc_scanwizard.cpp
Only in ./libs/libmythtv: moc_scanwizard.o
Only in ./libs/libmythtv: moc_scheduledrecording.cpp
Only in ./libs/libmythtv: moc_scheduledrecording.o
Only in ./libs/libmythtv: moc_siparser.cpp
Only in ./libs/libmythtv: moc_siparser.o
Only in ./libs/libmythtv: moc_siscan.cpp
Only in ./libs/libmythtv: moc_siscan.o
Only in ./libs/libmythtv: moc_sr_dialog.cpp
Only in ./libs/libmythtv: moc_sr_dialog.o
Only in ./libs/libmythtv: moc_sr_items.cpp
Only in ./libs/libmythtv: moc_sr_items.o
Only in ./libs/libmythtv: moc_sr_root.cpp
Only in ./libs/libmythtv: moc_sr_root.o
Only in ./libs/libmythtv: moc_tv_play.cpp
Only in ./libs/libmythtv: moc_tv_play.o
Only in ./libs/libmythtv: moc_udpnotify.cpp
Only in ./libs/libmythtv: moc_udpnotify.o
Only in ./libs/libmythtv: moc_videosource.cpp
Only in ./libs/libmythtv: moc_videosource.o
Only in ./libs/libmythtv: moc_xbox.cpp
Only in ./libs/libmythtv: moc_xbox.o
Only in ./libs/libmythtv: mpegrecorder.o
Only in ./libs/libmythtv: mpegstreamdata.o
Only in ./libs/libmythtv: mpegtables.o
Only in ./libs/libmythtv: nuppeldecoder.o
Only in ./libs/libmythtv: NuppelVideoPlayer.o
Only in ./libs/libmythtv: NuppelVideoRecorder.o
Only in ./libs/libmythtv: osdlistbtntype.o
Only in ./libs/libmythtv: osd.o
Only in ./libs/libmythtv: osdsurface.o
Only in ./libs/libmythtv: osdtypes.o
Only in ./libs/libmythtv: pespacket.o
Only in ./libs/libmythtv: profilegroup.o
Only in ./libs/libmythtv: progfind.o
Only in ./libs/libmythtv: proglist.o
Only in ./libs/libmythtv: programinfo.o
Only in ./libs/libmythtv: recorderbase.o
Only in ./libs/libmythtv: recordingprofile.o
Only in ./libs/libmythtv: recordingtypes.o
Only in ./libs/libmythtv: remoteencoder.o
Only in ./libs/libmythtv: remoteutil.o
Only in ./libs/libmythtv: RingBuffer.o
Only in ./libs/libmythtv: ringbuffy.o
Only in ./libs/libmythtv: RTjpegN.o
Only in ./libs/libmythtv: scanwizard.o
Only in ./libs/libmythtv: scheduledrecording.o
Only in ./libs/libmythtv: siparser.o
Only in ./libs/libmythtv: siscan.o
diff -buprB ../mythtv-bigdvb-3.4.orig/libs/libmythtv/sitypes.h ./libs/libmythtv/sitypes.h
--- ../mythtv-bigdvb-3.4.orig/libs/libmythtv/sitypes.h 2004-12-23 23:04:22.000000000 +1100
+++ ./libs/libmythtv/sitypes.h 2005-01-07 18:37:23.000000000 +1100
@@ -507,10 +507,18 @@ class PMTObject
// Try to auto detect which audio stream to use
// (Can go away when we can record them all)
- ElementaryPIDObject PreferredAudioStream()
+ ElementaryPIDObject PreferredAudioStream(bool wantAC3 = false)
{
- // Use first stream with recording flag set
+ //search ac3 first
QValueList<ElementaryPIDObject>::Iterator pit;
+ if (wantAC3)
+ {
+ for (pit = Components.begin(); pit != Components.end(); ++pit)
+ if (((*pit).Type == ES_TYPE_AUDIO_AC3) && (*pit).Record)
+ return *pit;
+ }
+
+ // Use first stream with recording flag set
for (pit = Components.begin(); pit != Components.end(); ++pit)
if (((*pit).Type == ES_TYPE_AUDIO_PCM) && (*pit).Record)
return *pit;
Only in ./libs/libmythtv: sr_dialog.o
Only in ./libs/libmythtv: sr_items.o
Only in ./libs/libmythtv: sr_root.o
Only in ./libs/libmythtv: tmp
Only in ./libs/libmythtv: transform.o
Only in ./libs/libmythtv: tspacket.o
Only in ./libs/libmythtv: ttfont.o
Only in ./libs/libmythtv: tv_play.o
Only in ./libs/libmythtv: tv_rec.o
Only in ./libs/libmythtv: udpnotify.o
Only in ./libs/libmythtv: vbi.o
Only in ./libs/libmythtv: videooutbase.o
Only in ./libs/libmythtv: videoout_ivtv.o
Only in ./libs/libmythtv: videoout_null.o
Only in ./libs/libmythtv: videoout_xvmc.o
Only in ./libs/libmythtv: videoout_xv.o
Only in ./libs/libmythtv: videosource.o
Only in ./libs/libmythtv: vsync.o
Only in ./libs/libmythtv: xbox.o
Only in ./libs/libmythtv: XvMCSurfaceTypes.o
Only in ./libs/libmythtv: yuv2rgb.o
Only in ./libs: Makefile
diff -buprB ../mythtv-bigdvb-3.4.orig/Makefile ./Makefile
--- ../mythtv-bigdvb-3.4.orig/Makefile 2005-01-07 20:53:08.256780910 +1100
+++ ./Makefile 2005-01-06 18:19:35.000000000 +1100
@@ -1,6 +1,6 @@
#############################################################################
# Makefile for building: mythtv
-# Generated by qmake (1.07a) (Qt 3.3.2) on: Fri Jan 7 20:53:08 2005
+# Generated by qmake (1.07a) (Qt 3.3.2) on: Thu Jan 6 18:19:35 2005
# Project: mythtv.pro
# Template: subdirs
# Command: $(QMAKE) -o Makefile mythtv.pro
Only in ../mythtv-bigdvb-3.4.orig/: mythtv
Only in ./: oz-ac3-bigdvb3.4.diff
Only in ./programs: Makefile
Only in ./programs/mythbackend: autoexpire.o
Only in ./programs/mythbackend: encoderlink.o
Only in ./programs/mythbackend: filetransfer.o
Only in ./programs/mythbackend: housekeeper.o
Only in ./programs/mythbackend: httpstatus.o
Only in ./programs/mythbackend: main.o
Only in ./programs/mythbackend: mainserver.o
Only in ./programs/mythbackend: Makefile
Only in ./programs/mythbackend: moc_httpstatus.cpp
Only in ./programs/mythbackend: moc_httpstatus.o
Only in ./programs/mythbackend: moc_mainserver.cpp
Only in ./programs/mythbackend: moc_mainserver.o
Only in ./programs/mythbackend: moc_server.cpp
Only in ./programs/mythbackend: moc_server.o
Only in ./programs/mythbackend: mythbackend
Only in ./programs/mythbackend: playbacksock.o
Only in ./programs/mythbackend: scheduler.o
Only in ./programs/mythbackend: server.o
Only in ./programs/mythcommflag: main.o
Only in ./programs/mythcommflag: Makefile
Only in ./programs/mythcommflag: mythcommflag
Only in ./programs/mythepg: main.o
Only in ./programs/mythepg: Makefile
Only in ./programs/mythepg: mythepg
Only in ./programs/mythfilldatabase: filldata.o
Only in ./programs/mythfilldatabase: Makefile
Only in ./programs/mythfilldatabase: mythfilldatabase
Only in ./programs/mythfrontend: channelrecpriority.o
Only in ./programs/mythfrontend: customrecord.o
diff -buprB ../mythtv-bigdvb-3.4.orig/programs/mythfrontend/globalsettings.cpp ./programs/mythfrontend/globalsettings.cpp
--- ../mythtv-bigdvb-3.4.orig/programs/mythfrontend/globalsettings.cpp 2004-12-20 05:26:28.000000000 +1100
+++ ./programs/mythfrontend/globalsettings.cpp 2005-01-07 18:01:30.000000000 +1100
@@ -184,6 +184,17 @@ static GenericCheckBox *IndividualMuteCo
return gc;
}
+static GenericCheckBox *WantAC3()
+{
+ GenericCheckBox *gc = new GenericCheckBox("WantAC3");
+ gc->setLabel(QObject::tr("Use Dolby digital audio where available"));
+ gc->setValue(false);
+ gc->setHelpText(QObject::tr("Where a Dolby digital sound track is "
+ "available (usually digital TV) use it. If this is not"
+ " set then Dolby audio will be disabled"));
+ return gc;
+}
+
static GenericCheckBox *AC3PassThrough()
{
GenericCheckBox *gc = new GenericCheckBox("AC3PassThru");
@@ -1880,6 +1891,7 @@ public:
setUseLabel(false);
addChild(AudioOutputDevice());
+ addChild(WantAC3());
addChild(AC3PassThrough());
addChild(AggressiveBuffer());
Only in ./programs/mythfrontend: globalsettings.o
Only in ./programs/mythfrontend: main.o
Only in ./programs/mythfrontend: Makefile
Only in ./programs/mythfrontend: manualbox.o
Only in ./programs/mythfrontend: manualschedule.o
Only in ./programs/mythfrontend: moc_channelrecpriority.cpp
Only in ./programs/mythfrontend: moc_channelrecpriority.o
Only in ./programs/mythfrontend: moc_customrecord.cpp
Only in ./programs/mythfrontend: moc_customrecord.o
Only in ./programs/mythfrontend: moc_manualbox.cpp
Only in ./programs/mythfrontend: moc_manualbox.o
Only in ./programs/mythfrontend: moc_manualschedule.cpp
Only in ./programs/mythfrontend: moc_manualschedule.o
Only in ./programs/mythfrontend: moc_playbackbox.cpp
Only in ./programs/mythfrontend: moc_playbackbox.o
Only in ./programs/mythfrontend: moc_previousbox.cpp
Only in ./programs/mythfrontend: moc_previousbox.o
Only in ./programs/mythfrontend: moc_programrecpriority.cpp
Only in ./programs/mythfrontend: moc_programrecpriority.o
Only in ./programs/mythfrontend: moc_statusbox.cpp
Only in ./programs/mythfrontend: moc_statusbox.o
Only in ./programs/mythfrontend: moc_viewscheduled.cpp
Only in ./programs/mythfrontend: moc_viewscheduled.o
Only in ./programs/mythfrontend: mythfrontend
Only in ./programs/mythfrontend: playbackbox.o
Only in ./programs/mythfrontend: previousbox.o
Only in ./programs/mythfrontend: programrecpriority.o
Only in ./programs/mythfrontend: statusbox.o
Only in ./programs/mythfrontend: viewscheduled.o
Only in ./programs/mythjobqueue: main.o
Only in ./programs/mythjobqueue: Makefile
Only in ./programs/mythjobqueue: mythjobqueue
Only in ./programs/mythlcd: main.o
Only in ./programs/mythlcd: Makefile
Only in ./programs/mythlcd: moc_mythlcd.cpp
Only in ./programs/mythlcd: moc_mythlcd.o
Only in ./programs/mythlcd: mythlcd
Only in ./programs/mythlcd: mythlcd.o
Only in ./programs/mythprogfind: main.o
Only in ./programs/mythprogfind: Makefile
Only in ./programs/mythprogfind: mythprogfind
Only in ./programs/mythtranscode: main.o
Only in ./programs/mythtranscode: Makefile
Only in ./programs/mythtranscode: mpeg2trans.o
Only in ./programs/mythtranscode: mythtranscode
Only in ./programs/mythtranscode: transcode.o
Only in ./programs/mythtv: main.o
Only in ./programs/mythtv: Makefile
Only in ./programs/mythtv: mythtv
Only in ./programs/mythtvosd: main.o
Only in ./programs/mythtvosd: Makefile
Only in ./programs/mythtvosd: mythtvosd
Only in ./setup: backendsettings.o
Only in ./setup: main.o
Only in ./setup: Makefile
Only in ./setup: setup
Only in ./: setxmltvid.sql
Only in ./themes: dummy.o
Only in ./themes: Makefile
Only in ./themes: themes
_______________________________________________
mythtv-dev mailing list
[email protected]
http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev