matroskadec: read TrackTimecodeScale and set timebase accordingly

patch by Anton Khirnov   wyskas _at_ gmail _dot_ com

Originally committed as revision 13601 to svn://svn.ffmpeg.org/ffmpeg/trunk
pull/126/head
Anton Khirnov 17 years ago committed by Aurelien Jacobs
parent cdae8eec10
commit 7ff9708585
  1. 1
      libavformat/matroska.h
  2. 11
      libavformat/matroskadec.c

@ -94,6 +94,7 @@
#define MATROSKA_ID_TRACKDEFAULTDURATION 0x23E383 #define MATROSKA_ID_TRACKDEFAULTDURATION 0x23E383
#define MATROSKA_ID_TRACKCONTENTENCODINGS 0x6D80 #define MATROSKA_ID_TRACKCONTENTENCODINGS 0x6D80
#define MATROSKA_ID_TRACKCONTENTENCODING 0x6240 #define MATROSKA_ID_TRACKCONTENTENCODING 0x6240
#define MATROSKA_ID_TRACKTIMECODESCALE 0x23314F
/* IDs in the trackvideo master */ /* IDs in the trackvideo master */
#define MATROSKA_ID_VIDEOFRAMERATE 0x2383E3 #define MATROSKA_ID_VIDEOFRAMERATE 0x2383E3

@ -60,6 +60,7 @@ typedef struct Track {
unsigned char *codec_priv; unsigned char *codec_priv;
int codec_priv_size; int codec_priv_size;
double time_scale;
uint64_t default_duration; uint64_t default_duration;
MatroskaTrackFlags flags; MatroskaTrackFlags flags;
@ -1589,6 +1590,14 @@ matroska_add_stream (MatroskaDemuxContext *matroska)
break; break;
} }
case MATROSKA_ID_TRACKTIMECODESCALE: {
double num;
if ((res = ebml_read_float(matroska, &id, &num)) < 0)
break;
track->time_scale = num;
break;
}
default: default:
av_log(matroska->ctx, AV_LOG_INFO, av_log(matroska->ctx, AV_LOG_INFO,
"Unknown track header entry 0x%x - ignoring\n", id); "Unknown track header entry 0x%x - ignoring\n", id);
@ -2615,7 +2624,7 @@ matroska_read_header (AVFormatContext *s,
st = av_new_stream(s, track->stream_index); st = av_new_stream(s, track->stream_index);
if (st == NULL) if (st == NULL)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
av_set_pts_info(st, 64, matroska->time_scale, 1000*1000*1000); /* 64 bit pts in ns */ av_set_pts_info(st, 64, matroska->time_scale*track->time_scale, 1000*1000*1000); /* 64 bit pts in ns */
st->codec->codec_id = codec_id; st->codec->codec_id = codec_id;
st->start_time = 0; st->start_time = 0;

Loading…
Cancel
Save