mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
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
This commit is contained in:
parent
cdae8eec10
commit
7ff9708585
@ -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…
Reference in New Issue
Block a user