aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2009-02-03 11:01:57 +0000
committerMichael Niedermayer <michaelni@gmx.at>2009-02-03 11:01:57 +0000
commit1558d0b9103394d7d7ca1eb41b1e85647e4d1cce (patch)
tree4f4110c55c7de3c83e92b1dadaf56b1d57d4af98
parent152714e1f1fef1f27d5a137be8735f0eaabac5ec (diff)
downloadffmpeg-1558d0b9103394d7d7ca1eb41b1e85647e4d1cce.tar.gz
Fix probe & demuxing of Topfield 58XXPVR and 68XXPVR (topfield.rec)
Originally committed as revision 16968 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavformat/mpegts.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index 5d07e39c9f..e335bc6657 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -1177,14 +1177,15 @@ static int mpegts_probe(AVProbeData *p)
#if 1
const int size= p->buf_size;
int score, fec_score, dvhs_score;
+ int check_count= size / TS_FEC_PACKET_SIZE;
#define CHECK_COUNT 10
- if (size < (TS_FEC_PACKET_SIZE * CHECK_COUNT))
+ if (check_count < CHECK_COUNT)
return -1;
- score = analyze(p->buf, TS_PACKET_SIZE *CHECK_COUNT, TS_PACKET_SIZE, NULL);
- dvhs_score = analyze(p->buf, TS_DVHS_PACKET_SIZE *CHECK_COUNT, TS_DVHS_PACKET_SIZE, NULL);
- fec_score= analyze(p->buf, TS_FEC_PACKET_SIZE*CHECK_COUNT, TS_FEC_PACKET_SIZE, NULL);
+ score = analyze(p->buf, TS_PACKET_SIZE *check_count, TS_PACKET_SIZE , NULL)*CHECK_COUNT/check_count;
+ dvhs_score= analyze(p->buf, TS_DVHS_PACKET_SIZE*check_count, TS_DVHS_PACKET_SIZE, NULL)*CHECK_COUNT/check_count;
+ fec_score = analyze(p->buf, TS_FEC_PACKET_SIZE *check_count, TS_FEC_PACKET_SIZE , NULL)*CHECK_COUNT/check_count;
// av_log(NULL, AV_LOG_DEBUG, "score: %d, dvhs_score: %d, fec_score: %d \n", score, dvhs_score, fec_score);
// we need a clear definition for the returned score otherwise things will become messy sooner or later
@@ -1235,7 +1236,7 @@ static int mpegts_read_header(AVFormatContext *s,
{
MpegTSContext *ts = s->priv_data;
ByteIOContext *pb = s->pb;
- uint8_t buf[1024];
+ uint8_t buf[5*1024];
int len;
int64_t pos;