diff options
Diffstat (limited to 'abs/core-testing/mythtv/stable')
-rw-r--r-- | abs/core-testing/mythtv/stable/mythtv/PKGBUILD | 7 | ||||
-rw-r--r-- | abs/core-testing/mythtv/stable/mythtv/mpegpspatch | 66 |
2 files changed, 71 insertions, 2 deletions
diff --git a/abs/core-testing/mythtv/stable/mythtv/PKGBUILD b/abs/core-testing/mythtv/stable/mythtv/PKGBUILD index dc86f28..b638c61 100644 --- a/abs/core-testing/mythtv/stable/mythtv/PKGBUILD +++ b/abs/core-testing/mythtv/stable/mythtv/PKGBUILD @@ -1,13 +1,13 @@ pkgname=mythtv pkgver=0.21 -pkgrel=58 +pkgrel=59 pkgdesc="A Homebrew PVR project" arch=('i686' 'x86_64') depends=('bash' 'mysql-clients>=5.0' 'qt3' 'lame' 'lirc-utils' 'ffmpeg' \ 'libxvmc' 'libavc1394' 'libdc1394' 'libiec61883') backup=(etc/mythtv/mythbackend.conf etc/mythtv/mysql.txt usr/share/mythtv/is.xmlusr/share/mythtv/media_settings.xml ) source=(ftp://ftp.knoppmyth.net/R6/sources/${pkgname}-${pkgver}-fixes.tar.bz2 \ - mythbackend myththemedmenu.cpp.patch myththemedmenu.h.patch smolt_jump.patch pretty gnome_screensaver.patch) + mythbackend myththemedmenu.cpp.patch myththemedmenu.h.patch smolt_jump.patch pretty gnome_screensaver.patch mpegpspatch) #md5sums=('e316ed18d7ac837cf8c4af54b1478793' '7ef6de58240e7aad389a0b13d91b1cf6'\ # 'a0ecb7f476cb71c0c1ac90d349fc7695') @@ -30,6 +30,9 @@ build() { patch -p0 < ../smolt_jump.patch # patch -p0 < ../2.6.28_dvb_api_version.diff patch -p0 < ../gnome_screensaver.patch + cd libs/libavformat + patch -p0 < $startdir/src/mpegpspatch + cd - . /etc/profile.d/qt3.sh # use QT3 qmake diff --git a/abs/core-testing/mythtv/stable/mythtv/mpegpspatch b/abs/core-testing/mythtv/stable/mythtv/mpegpspatch new file mode 100644 index 0000000..eed08eb --- /dev/null +++ b/abs/core-testing/mythtv/stable/mythtv/mpegpspatch @@ -0,0 +1,66 @@ +--- orig_mpeg.c 2009-03-23 11:26:22.000000000 -0700 ++++ mpeg.c 2009-03-23 11:28:09.000000000 -0700 +@@ -66,35 +66,40 @@ + + static int mpegps_probe(AVProbeData *p) + { ++ uint32_t code= -1; ++ int sys=0, pspack=0, priv1=0, vid=0, audio=0, invalid=0; + int i; +- int size= FFMIN(2048, p->buf_size); +- uint32_t code=0xFF; ++ int score=0; + +- /* we search the first start code. If it is a packet start code, +- then we decide it is mpeg ps. We do not send highest value to +- give a chance to mpegts */ +- /* NOTE: the search range was restricted to avoid too many false +- detections */ +- +- for (i = 0; i < size; i++) { +- code = (code << 8) | p->buf[i]; ++ for(i=0; i<p->buf_size; i++){ ++ code = (code<<8) + p->buf[i]; + if ((code & 0xffffff00) == 0x100) { +- if (code == PACK_START_CODE || +- code == SYSTEM_HEADER_START_CODE || +- (code >= 0x1e0 && code <= 0x1ef) || +- (code >= 0x1c0 && code <= 0x1df) || +- code == PRIVATE_STREAM_2 || +- code == PROGRAM_STREAM_MAP || +- code == PRIVATE_STREAM_1 || +- code == PADDING_STREAM || +- code >= 0x100 && code <= 0x1b0) +- return AVPROBE_SCORE_MAX - 2; +- else +- return 0; ++ int pes= check_pes(p->buf+i, p->buf+p->buf_size); ++ ++ if(code == SYSTEM_HEADER_START_CODE) sys++; ++ else if(code == PRIVATE_STREAM_1) priv1++; ++ else if(code == PACK_START_CODE) pspack++; ++ else if((code & 0xf0) == VIDEO_ID && pes) vid++; ++ else if((code & 0xe0) == AUDIO_ID && pes) audio++; ++ ++ else if((code & 0xf0) == VIDEO_ID && !pes) invalid++; ++ else if((code & 0xe0) == AUDIO_ID && !pes) invalid++; + } + } + +- return 0; ++ if(vid+audio > invalid) /* invalid VDR files nd short PES streams */ ++ score= AVPROBE_SCORE_MAX/4; ++ ++//av_log(NULL, AV_LOG_ERROR, "%d %d %d %d %d len:%d\n", sys, priv1, pspack,vid, audio, p->buf_size); ++ if(sys>invalid && sys*9 <= pspack*10) ++ return AVPROBE_SCORE_MAX/2+2; // +1 for .mpg ++ if(priv1 + vid + audio > invalid && (priv1+vid+audio)*9 <= pspack*10) ++ return AVPROBE_SCORE_MAX/2+2; // +1 for .mpg ++ if((!!vid ^ !!audio) && (audio > 4 || vid > 1) && !sys && !pspack && p->buf_size>2048) /* PES stream */ ++ return AVPROBE_SCORE_MAX/2+2; ++ ++ //02-Penguin.flac has sys:0 priv1:0 pspack:0 vid:0 audio:1 ++ return score; + } + + typedef struct MpegDemuxContext { |