summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demux_ty.c
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-09-14 17:39:48 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-09-14 17:39:48 +0000
commit29e529c8738002ea6ac819cd5744f9e4aa2db9e4 (patch)
tree70a7eb4496c3fcdbe1d6d2292b5a1807a497aab6 /libmpdemux/demux_ty.c
parentd967a56ee6fb1525a4366392393dd9c9723a518d (diff)
downloadmpv-29e529c8738002ea6ac819cd5744f9e4aa2db9e4.tar.bz2
mpv-29e529c8738002ea6ac819cd5744f9e4aa2db9e4.tar.xz
Fix completely broken get_ty_pts (it's an ordinary MPEG timestamp)
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24481 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/demux_ty.c')
-rw-r--r--libmpdemux/demux_ty.c26
1 files changed, 11 insertions, 15 deletions
diff --git a/libmpdemux/demux_ty.c b/libmpdemux/demux_ty.c
index 547dcd9d5a..4d8084cd9f 100644
--- a/libmpdemux/demux_ty.c
+++ b/libmpdemux/demux_ty.c
@@ -45,6 +45,7 @@
#include "stheader.h"
#include "sub_cc.h"
#include "libavutil/avstring.h"
+#include "libavutil/intreadwrite.h"
extern void skip_audio_frame( sh_audio_t *sh_audio );
extern int sub_justify;
@@ -354,21 +355,16 @@ static int IsValidAudioPacket( int size, int *ptsOffset, int *ptsLen )
static float get_ty_pts( unsigned char *buf )
{
- float result = 0;
- unsigned char temp;
-
- temp = ( buf[ 0 ] & 0xE ) >> 1;
- result = ( (float) temp ) * ( (float) ( 1L << 30 ) ) / ( (float)PTS_KHZ );
- temp = buf[ 1 ];
- result += ( (float) temp ) * ( (float) ( 1L << 22 ) ) / ( (float)PTS_KHZ );
- temp = ( buf[ 2 ] & 0xFE ) >> 1;
- result += ( (float) temp ) * ( (float) ( 1L << 15 ) ) / ( (float)PTS_KHZ );
- temp = buf[ 3 ];
- result += ( (float) temp ) * ( (float) ( 1L << 7 ) ) / ( (float)PTS_KHZ );
- temp = ( buf[ 4 ] & 0xFE ) >> 1;
- result += ( (float) temp ) / ( (float)PTS_MHZ );
-
- return result;
+ int a = buf[0] & 0xe;
+ int b = AV_RB16(buf + 1);
+ int c = AV_RB16(buf + 3);
+ uint64_t pts;
+
+ if (!(1 & a & b & c)) // invalid MPEG timestamp
+ return 0;
+ a >>= 1; b >>= 1; c >>= 1;
+ pts = (((uint64_t)a) << 30) | (b << 15) | c;
+ return (float)pts / PTS_KHZ;
}
static void demux_ty_AddToAudioBuffer( TiVoInfo *tivo, unsigned char *buffer,