move time_base (pts_num/pts_den) from AVFormatContext -> AVStream
Originally committed as revision 3148 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
e8733cc4d9
commit
9ee91c2f53
30
ffmpeg.c
30
ffmpeg.c
@ -595,10 +595,10 @@ static void do_video_out(AVFormatContext *s,
|
|||||||
double adelta, vdelta, av_delay;
|
double adelta, vdelta, av_delay;
|
||||||
|
|
||||||
adelta = audio_sync->sync_ipts - ((double)audio_sync->sync_opts *
|
adelta = audio_sync->sync_ipts - ((double)audio_sync->sync_opts *
|
||||||
s->pts_num / s->pts_den);
|
ost->st->time_base.num / ost->st->time_base.den);
|
||||||
|
|
||||||
vdelta = ost->sync_ipts - ((double)ost->sync_opts *
|
vdelta = ost->sync_ipts - ((double)ost->sync_opts *
|
||||||
s->pts_num / s->pts_den);
|
ost->st->time_base.num / ost->st->time_base.den);
|
||||||
|
|
||||||
av_delay = adelta - vdelta;
|
av_delay = adelta - vdelta;
|
||||||
if (av_delay < -AV_DELAY_MAX)
|
if (av_delay < -AV_DELAY_MAX)
|
||||||
@ -609,7 +609,7 @@ static void do_video_out(AVFormatContext *s,
|
|||||||
} else {
|
} else {
|
||||||
double vdelta;
|
double vdelta;
|
||||||
|
|
||||||
vdelta = (double)(ost->st->pts.val) * s->pts_num / s->pts_den - (ost->sync_ipts - ost->sync_ipts_offset);
|
vdelta = (double)(ost->st->pts.val) * ost->st->time_base.num / ost->st->time_base.den - (ost->sync_ipts - ost->sync_ipts_offset);
|
||||||
if (vdelta < 100 && vdelta > -100 && ost->sync_ipts_offset) {
|
if (vdelta < 100 && vdelta > -100 && ost->sync_ipts_offset) {
|
||||||
if (vdelta < -AV_DELAY_MAX)
|
if (vdelta < -AV_DELAY_MAX)
|
||||||
nb_frames = 2;
|
nb_frames = 2;
|
||||||
@ -630,10 +630,10 @@ static void do_video_out(AVFormatContext *s,
|
|||||||
if (audio_sync && verbose >=0) {
|
if (audio_sync && verbose >=0) {
|
||||||
fprintf(stderr, "Input APTS %12.6f, output APTS %12.6f, ",
|
fprintf(stderr, "Input APTS %12.6f, output APTS %12.6f, ",
|
||||||
(double) audio_sync->sync_ipts,
|
(double) audio_sync->sync_ipts,
|
||||||
(double) audio_sync->st->pts.val * s->pts_num / s->pts_den);
|
(double) audio_sync->st->pts.val * st->time_base.num / st->time_base.den);
|
||||||
fprintf(stderr, "Input VPTS %12.6f, output VPTS %12.6f: %s\n",
|
fprintf(stderr, "Input VPTS %12.6f, output VPTS %12.6f: %s\n",
|
||||||
(double) ost->sync_ipts,
|
(double) ost->sync_ipts,
|
||||||
(double) ost->st->pts.val * s->pts_num / s->pts_den,
|
(double) ost->st->pts.val * st->time_base.num / st->time_base.den,
|
||||||
action[nb_frames]);
|
action[nb_frames]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -872,7 +872,7 @@ static void do_video_stats(AVFormatContext *os, AVOutputStream *ost,
|
|||||||
|
|
||||||
fprintf(fvstats,"f_size= %6d ", frame_size);
|
fprintf(fvstats,"f_size= %6d ", frame_size);
|
||||||
/* compute pts value */
|
/* compute pts value */
|
||||||
ti1 = (double)ost->st->pts.val * os->pts_num / os->pts_den;
|
ti1 = (double)ost->st->pts.val * ost->st->time_base.num / ost->st->time_base.den;
|
||||||
if (ti1 < 0.01)
|
if (ti1 < 0.01)
|
||||||
ti1 = 0.01;
|
ti1 = 0.01;
|
||||||
|
|
||||||
@ -956,7 +956,7 @@ static void print_report(AVFormatContext **output_files,
|
|||||||
vid = 1;
|
vid = 1;
|
||||||
}
|
}
|
||||||
/* compute min output value */
|
/* compute min output value */
|
||||||
pts = (double)ost->st->pts.val * os->pts_num / os->pts_den;
|
pts = (double)ost->st->pts.val * ost->st->time_base.num / ost->st->time_base.den;
|
||||||
if ((pts < ti1) && (pts > 0))
|
if ((pts < ti1) && (pts > 0))
|
||||||
ti1 = pts;
|
ti1 = pts;
|
||||||
}
|
}
|
||||||
@ -1118,7 +1118,7 @@ static int output_packet(AVInputStream *ist, int ist_index,
|
|||||||
printf("%d: got pts=%0.3f %0.3f\n", i,
|
printf("%d: got pts=%0.3f %0.3f\n", i,
|
||||||
(double)pkt->pts / AV_TIME_BASE,
|
(double)pkt->pts / AV_TIME_BASE,
|
||||||
((double)ist->pts / AV_TIME_BASE) -
|
((double)ist->pts / AV_TIME_BASE) -
|
||||||
((double)ost->st->pts.val * os->pts_num / os->pts_den));
|
((double)ost->st->pts.val * ost->time_base.num / ost->time_base.den));
|
||||||
#endif
|
#endif
|
||||||
/* set the input output pts pairs */
|
/* set the input output pts pairs */
|
||||||
ost->sync_ipts = (double)ist->pts / AV_TIME_BASE;
|
ost->sync_ipts = (double)ist->pts / AV_TIME_BASE;
|
||||||
@ -1165,7 +1165,7 @@ static int output_packet(AVInputStream *ist, int ist_index,
|
|||||||
avcodec_get_frame_defaults(&avframe);
|
avcodec_get_frame_defaults(&avframe);
|
||||||
ost->st->codec.coded_frame= &avframe;
|
ost->st->codec.coded_frame= &avframe;
|
||||||
avframe.key_frame = pkt->flags & PKT_FLAG_KEY;
|
avframe.key_frame = pkt->flags & PKT_FLAG_KEY;
|
||||||
ost->st->pts.val= av_rescale(ist->pts, os->pts_den, os->pts_num*AV_TIME_BASE);
|
ost->st->pts.val= av_rescale(ist->pts, ost->st->time_base.den, ost->st->time_base.num*AV_TIME_BASE);
|
||||||
|
|
||||||
if(ost->st->codec.codec_type == CODEC_TYPE_AUDIO)
|
if(ost->st->codec.codec_type == CODEC_TYPE_AUDIO)
|
||||||
audio_size += data_size;
|
audio_size += data_size;
|
||||||
@ -1637,7 +1637,7 @@ static int av_encode(AVFormatContext **output_files,
|
|||||||
ost = ost_table[i];
|
ost = ost_table[i];
|
||||||
os = output_files[ost->file_index];
|
os = output_files[ost->file_index];
|
||||||
ist = ist_table[ost->source_index];
|
ist = ist_table[ost->source_index];
|
||||||
pts = (double)ost->st->pts.val * os->pts_num / os->pts_den;
|
pts = (double)ost->st->pts.val * ost->st->time_base.num / ost->st->time_base.den;
|
||||||
if (!file_table[ist->file_index].eof_reached &&
|
if (!file_table[ist->file_index].eof_reached &&
|
||||||
pts < pts_min) {
|
pts < pts_min) {
|
||||||
pts_min = pts;
|
pts_min = pts;
|
||||||
@ -2729,12 +2729,11 @@ static void opt_output_file(const char *filename)
|
|||||||
if (use_video) {
|
if (use_video) {
|
||||||
AVCodecContext *video_enc;
|
AVCodecContext *video_enc;
|
||||||
|
|
||||||
st = av_mallocz(sizeof(AVStream));
|
st = av_new_stream(oc, nb_streams++);
|
||||||
if (!st) {
|
if (!st) {
|
||||||
fprintf(stderr, "Could not alloc stream\n");
|
fprintf(stderr, "Could not alloc stream\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
avcodec_get_context_defaults(&st->codec);
|
|
||||||
#if defined(HAVE_PTHREADS) || defined(HAVE_W32THREADS)
|
#if defined(HAVE_PTHREADS) || defined(HAVE_W32THREADS)
|
||||||
if(thread_count>1)
|
if(thread_count>1)
|
||||||
avcodec_thread_init(&st->codec, thread_count);
|
avcodec_thread_init(&st->codec, thread_count);
|
||||||
@ -2960,19 +2959,16 @@ static void opt_output_file(const char *filename)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
oc->streams[nb_streams] = st;
|
|
||||||
nb_streams++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (use_audio) {
|
if (use_audio) {
|
||||||
AVCodecContext *audio_enc;
|
AVCodecContext *audio_enc;
|
||||||
|
|
||||||
st = av_mallocz(sizeof(AVStream));
|
st = av_new_stream(oc, nb_streams++);
|
||||||
if (!st) {
|
if (!st) {
|
||||||
fprintf(stderr, "Could not alloc stream\n");
|
fprintf(stderr, "Could not alloc stream\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
avcodec_get_context_defaults(&st->codec);
|
|
||||||
#if defined(HAVE_PTHREADS) || defined(HAVE_W32THREADS)
|
#if defined(HAVE_PTHREADS) || defined(HAVE_W32THREADS)
|
||||||
if(thread_count>1)
|
if(thread_count>1)
|
||||||
avcodec_thread_init(&st->codec, thread_count);
|
avcodec_thread_init(&st->codec, thread_count);
|
||||||
@ -3002,8 +2998,6 @@ static void opt_output_file(const char *filename)
|
|||||||
} else
|
} else
|
||||||
audio_enc->channels = audio_channels;
|
audio_enc->channels = audio_channels;
|
||||||
}
|
}
|
||||||
oc->streams[nb_streams] = st;
|
|
||||||
nb_streams++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
oc->nb_streams = nb_streams;
|
oc->nb_streams = nb_streams;
|
||||||
|
@ -164,6 +164,7 @@ static int fourxm_read_header(AVFormatContext *s,
|
|||||||
st = av_new_stream(s, 0);
|
st = av_new_stream(s, 0);
|
||||||
if (!st)
|
if (!st)
|
||||||
return AVERROR_NOMEM;
|
return AVERROR_NOMEM;
|
||||||
|
av_set_pts_info(st, 33, 1, 90000);
|
||||||
|
|
||||||
fourxm->video_stream_index = st->index;
|
fourxm->video_stream_index = st->index;
|
||||||
|
|
||||||
@ -202,6 +203,9 @@ static int fourxm_read_header(AVFormatContext *s,
|
|||||||
if (!st)
|
if (!st)
|
||||||
return AVERROR_NOMEM;
|
return AVERROR_NOMEM;
|
||||||
|
|
||||||
|
/* set the pts reference (1 pts = 1/90000) */
|
||||||
|
av_set_pts_info(st, 33, 1, 90000);
|
||||||
|
|
||||||
fourxm->tracks[current_track].stream_index = st->index;
|
fourxm->tracks[current_track].stream_index = st->index;
|
||||||
|
|
||||||
st->codec.codec_type = CODEC_TYPE_AUDIO;
|
st->codec.codec_type = CODEC_TYPE_AUDIO;
|
||||||
@ -232,10 +236,6 @@ static int fourxm_read_header(AVFormatContext *s,
|
|||||||
fourxm->video_pts = -fourxm->video_pts_inc; /* first frame will push to 0 */
|
fourxm->video_pts = -fourxm->video_pts_inc; /* first frame will push to 0 */
|
||||||
fourxm->audio_pts = 0;
|
fourxm->audio_pts = 0;
|
||||||
|
|
||||||
/* set the pts reference (1 pts = 1/90000) */
|
|
||||||
s->pts_num = 1;
|
|
||||||
s->pts_den = 90000;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -285,6 +285,8 @@ static int asf_write_header1(AVFormatContext *s, int64_t file_size, int64_t data
|
|||||||
for(n=0;n<s->nb_streams;n++) {
|
for(n=0;n<s->nb_streams;n++) {
|
||||||
enc = &s->streams[n]->codec;
|
enc = &s->streams[n]->codec;
|
||||||
|
|
||||||
|
av_set_pts_info(s->streams[n], 32, 1, 1000); /* 32 bit pts in ms */
|
||||||
|
|
||||||
bit_rate += enc->bit_rate;
|
bit_rate += enc->bit_rate;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -469,8 +471,6 @@ static int asf_write_header(AVFormatContext *s)
|
|||||||
{
|
{
|
||||||
ASFContext *asf = s->priv_data;
|
ASFContext *asf = s->priv_data;
|
||||||
|
|
||||||
av_set_pts_info(s, 32, 1, 1000); /* 32 bit pts in ms */
|
|
||||||
|
|
||||||
asf->packet_size = PACKET_SIZE;
|
asf->packet_size = PACKET_SIZE;
|
||||||
asf->nb_packets = 0;
|
asf->nb_packets = 0;
|
||||||
|
|
||||||
|
@ -148,8 +148,6 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
|||||||
int size, i;
|
int size, i;
|
||||||
int64_t gsize;
|
int64_t gsize;
|
||||||
|
|
||||||
av_set_pts_info(s, 32, 1, 1000); /* 32 bit pts in ms */
|
|
||||||
|
|
||||||
get_guid(pb, &g);
|
get_guid(pb, &g);
|
||||||
if (memcmp(&g, &asf_header, sizeof(GUID)))
|
if (memcmp(&g, &asf_header, sizeof(GUID)))
|
||||||
goto fail;
|
goto fail;
|
||||||
@ -193,6 +191,7 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
|||||||
st = av_new_stream(s, 0);
|
st = av_new_stream(s, 0);
|
||||||
if (!st)
|
if (!st)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
av_set_pts_info(st, 32, 1, 1000); /* 32 bit pts in ms */
|
||||||
asf_st = av_mallocz(sizeof(ASFStream));
|
asf_st = av_mallocz(sizeof(ASFStream));
|
||||||
if (!asf_st)
|
if (!asf_st)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
@ -230,7 +230,7 @@ static int audio_read_header(AVFormatContext *s1, AVFormatParameters *ap)
|
|||||||
st->codec.sample_rate = s->sample_rate;
|
st->codec.sample_rate = s->sample_rate;
|
||||||
st->codec.channels = s->channels;
|
st->codec.channels = s->channels;
|
||||||
|
|
||||||
av_set_pts_info(s1, 48, 1, 1000000); /* 48 bits pts in us */
|
av_set_pts_info(st, 48, 1, 1000000); /* 48 bits pts in us */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -214,6 +214,8 @@ typedef struct AVStream {
|
|||||||
int codec_info_nb_frames;
|
int codec_info_nb_frames;
|
||||||
/* encoding: PTS generation when outputing stream */
|
/* encoding: PTS generation when outputing stream */
|
||||||
AVFrac pts;
|
AVFrac pts;
|
||||||
|
AVRational time_base;
|
||||||
|
int pts_wrap_bits; /* number of bits in pts (used for wrapping control) */
|
||||||
/* ffmpeg.c private use */
|
/* ffmpeg.c private use */
|
||||||
int stream_copy; /* if TRUE, just copy stream */
|
int stream_copy; /* if TRUE, just copy stream */
|
||||||
/* quality, as it has been removed from AVCodecContext and put in AVVideoFrame
|
/* quality, as it has been removed from AVCodecContext and put in AVVideoFrame
|
||||||
@ -226,6 +228,14 @@ typedef struct AVStream {
|
|||||||
seconds. */
|
seconds. */
|
||||||
int64_t duration;
|
int64_t duration;
|
||||||
|
|
||||||
|
/* the following are used for pts/dts unit conversion */
|
||||||
|
int64_t last_pkt_stream_pts;
|
||||||
|
int64_t last_pkt_stream_dts;
|
||||||
|
int64_t last_pkt_pts;
|
||||||
|
int64_t last_pkt_dts;
|
||||||
|
int last_pkt_pts_frac;
|
||||||
|
int last_pkt_dts_frac;
|
||||||
|
|
||||||
/* av_read_frame() support */
|
/* av_read_frame() support */
|
||||||
int need_parsing;
|
int need_parsing;
|
||||||
struct AVCodecParserContext *parser;
|
struct AVCodecParserContext *parser;
|
||||||
@ -268,8 +278,6 @@ typedef struct AVFormatContext {
|
|||||||
|
|
||||||
int ctx_flags; /* format specific flags, see AVFMTCTX_xx */
|
int ctx_flags; /* format specific flags, see AVFMTCTX_xx */
|
||||||
/* private data for pts handling (do not modify directly) */
|
/* private data for pts handling (do not modify directly) */
|
||||||
int pts_wrap_bits; /* number of bits in pts (used for wrapping control) */
|
|
||||||
int pts_num, pts_den; /* value to convert to seconds */
|
|
||||||
/* This buffer is only needed when packets were already buffered but
|
/* This buffer is only needed when packets were already buffered but
|
||||||
not decoded, for example to get the codec parameters in mpeg
|
not decoded, for example to get the codec parameters in mpeg
|
||||||
streams */
|
streams */
|
||||||
@ -296,14 +304,6 @@ typedef struct AVFormatContext {
|
|||||||
int cur_len;
|
int cur_len;
|
||||||
AVPacket cur_pkt;
|
AVPacket cur_pkt;
|
||||||
|
|
||||||
/* the following are used for pts/dts unit conversion */
|
|
||||||
int64_t last_pkt_stream_pts;
|
|
||||||
int64_t last_pkt_stream_dts;
|
|
||||||
int64_t last_pkt_pts;
|
|
||||||
int64_t last_pkt_dts;
|
|
||||||
int last_pkt_pts_frac;
|
|
||||||
int last_pkt_dts_frac;
|
|
||||||
|
|
||||||
/* av_seek_frame() support */
|
/* av_seek_frame() support */
|
||||||
int64_t data_offset; /* offset of the first packet */
|
int64_t data_offset; /* offset of the first packet */
|
||||||
int index_built;
|
int index_built;
|
||||||
@ -553,7 +553,7 @@ int av_read_play(AVFormatContext *s);
|
|||||||
int av_read_pause(AVFormatContext *s);
|
int av_read_pause(AVFormatContext *s);
|
||||||
void av_close_input_file(AVFormatContext *s);
|
void av_close_input_file(AVFormatContext *s);
|
||||||
AVStream *av_new_stream(AVFormatContext *s, int id);
|
AVStream *av_new_stream(AVFormatContext *s, int id);
|
||||||
void av_set_pts_info(AVFormatContext *s, int pts_wrap_bits,
|
void av_set_pts_info(AVStream *s, int pts_wrap_bits,
|
||||||
int pts_num, int pts_den);
|
int pts_num, int pts_den);
|
||||||
|
|
||||||
int av_find_default_stream_index(AVFormatContext *s);
|
int av_find_default_stream_index(AVFormatContext *s);
|
||||||
|
@ -93,8 +93,6 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
|||||||
AVIStream *ast;
|
AVIStream *ast;
|
||||||
int xan_video = 0; /* hack to support Xan A/V */
|
int xan_video = 0; /* hack to support Xan A/V */
|
||||||
|
|
||||||
av_set_pts_info(s, 64, 1, AV_TIME_BASE);
|
|
||||||
|
|
||||||
if (get_riff(avi, pb) < 0)
|
if (get_riff(avi, pb) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@ -139,6 +137,8 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
|||||||
st = av_new_stream(s, i);
|
st = av_new_stream(s, i);
|
||||||
if (!st)
|
if (!st)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
av_set_pts_info(st, 64, 1, AV_TIME_BASE);
|
||||||
|
|
||||||
ast = av_mallocz(sizeof(AVIStream));
|
ast = av_mallocz(sizeof(AVIStream));
|
||||||
if (!ast)
|
if (!ast)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
@ -550,6 +550,7 @@ static int dv_extract_audio_info(DVDemuxContext* c, uint8_t* frame)
|
|||||||
if (c->ach == 2 && !c->ast[1]) {
|
if (c->ach == 2 && !c->ast[1]) {
|
||||||
c->ast[1] = av_new_stream(c->fctx, 0);
|
c->ast[1] = av_new_stream(c->fctx, 0);
|
||||||
if (c->ast[1]) {
|
if (c->ast[1]) {
|
||||||
|
av_set_pts_info(c->ast[1], 64, 1, 30000);
|
||||||
c->ast[1]->codec.codec_type = CODEC_TYPE_AUDIO;
|
c->ast[1]->codec.codec_type = CODEC_TYPE_AUDIO;
|
||||||
c->ast[1]->codec.codec_id = CODEC_ID_PCM_S16LE;
|
c->ast[1]->codec.codec_id = CODEC_ID_PCM_S16LE;
|
||||||
} else
|
} else
|
||||||
@ -721,6 +722,9 @@ DVDemuxContext* dv_init_demux(AVFormatContext *s)
|
|||||||
c->ast[0] = av_new_stream(s, 0);
|
c->ast[0] = av_new_stream(s, 0);
|
||||||
if (!c->vst || !c->ast[0])
|
if (!c->vst || !c->ast[0])
|
||||||
goto fail;
|
goto fail;
|
||||||
|
av_set_pts_info(c->vst, 64, 1, 30000);
|
||||||
|
av_set_pts_info(c->ast[0], 64, 1, 30000);
|
||||||
|
|
||||||
c->fctx = s;
|
c->fctx = s;
|
||||||
c->ast[1] = NULL;
|
c->ast[1] = NULL;
|
||||||
c->ach = 0;
|
c->ach = 0;
|
||||||
@ -738,8 +742,6 @@ DVDemuxContext* dv_init_demux(AVFormatContext *s)
|
|||||||
|
|
||||||
s->ctx_flags |= AVFMTCTX_NOHEADER;
|
s->ctx_flags |= AVFMTCTX_NOHEADER;
|
||||||
|
|
||||||
av_set_pts_info(s, 64, 1, 30000);
|
|
||||||
|
|
||||||
return c;
|
return c;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
|
@ -100,9 +100,7 @@ static int flic_read_header(AVFormatContext *s,
|
|||||||
st->codec.extradata = av_malloc(FLIC_HEADER_SIZE);
|
st->codec.extradata = av_malloc(FLIC_HEADER_SIZE);
|
||||||
memcpy(st->codec.extradata, header, FLIC_HEADER_SIZE);
|
memcpy(st->codec.extradata, header, FLIC_HEADER_SIZE);
|
||||||
|
|
||||||
/* set the pts reference (1 pts = 1/90000) */
|
av_set_pts_info(st, 33, 1, 90000);
|
||||||
s->pts_num = 1;
|
|
||||||
s->pts_den = 90000;
|
|
||||||
|
|
||||||
/* Time to figure out the framerate: If there is a FLIC chunk magic
|
/* Time to figure out the framerate: If there is a FLIC chunk magic
|
||||||
* number at offset 0x10, assume this is from the Bullfrog game,
|
* number at offset 0x10, assume this is from the Bullfrog game,
|
||||||
|
@ -48,8 +48,6 @@ static int flv_read_header(AVFormatContext *s,
|
|||||||
|
|
||||||
s->ctx_flags |= AVFMTCTX_NOHEADER; //ok we have a header but theres no fps, codec type, sample_rate, ...
|
s->ctx_flags |= AVFMTCTX_NOHEADER; //ok we have a header but theres no fps, codec type, sample_rate, ...
|
||||||
|
|
||||||
av_set_pts_info(s, 24, 1, 1000); /* 24 bit pts in ms */
|
|
||||||
|
|
||||||
url_fskip(&s->pb, 4);
|
url_fskip(&s->pb, 4);
|
||||||
flags = get_byte(&s->pb);
|
flags = get_byte(&s->pb);
|
||||||
|
|
||||||
@ -103,6 +101,8 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
st = av_new_stream(s, is_audio);
|
st = av_new_stream(s, is_audio);
|
||||||
if (!st)
|
if (!st)
|
||||||
return AVERROR_NOMEM;
|
return AVERROR_NOMEM;
|
||||||
|
|
||||||
|
av_set_pts_info(st, 24, 1, 1000); /* 24 bit pts in ms */
|
||||||
st->codec.frame_rate_base= 0;
|
st->codec.frame_rate_base= 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -134,8 +134,6 @@ static int flv_write_header(AVFormatContext *s)
|
|||||||
FLVContext *flv = s->priv_data;
|
FLVContext *flv = s->priv_data;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
av_set_pts_info(s, 24, 1, 1000); /* 24 bit pts in ms */
|
|
||||||
|
|
||||||
flv->hasAudio = 0;
|
flv->hasAudio = 0;
|
||||||
flv->hasVideo = 0;
|
flv->hasVideo = 0;
|
||||||
|
|
||||||
@ -151,6 +149,7 @@ static int flv_write_header(AVFormatContext *s)
|
|||||||
|
|
||||||
for(i=0; i<s->nb_streams; i++){
|
for(i=0; i<s->nb_streams; i++){
|
||||||
AVCodecContext *enc = &s->streams[i]->codec;
|
AVCodecContext *enc = &s->streams[i]->codec;
|
||||||
|
av_set_pts_info(s->streams[i], 24, 1, 1000); /* 24 bit pts in ms */
|
||||||
if(enc->codec_tag == 5){
|
if(enc->codec_tag == 5){
|
||||||
put_byte(pb,8); // message type
|
put_byte(pb,8); // message type
|
||||||
put_be24(pb,0); // include flags
|
put_be24(pb,0); // include flags
|
||||||
|
@ -79,6 +79,7 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
|
|||||||
st = av_new_stream(s1, 0);
|
st = av_new_stream(s1, 0);
|
||||||
if (!st)
|
if (!st)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
av_set_pts_info(st, 48, 1, 1000000); /* 48 bits pts in us */
|
||||||
|
|
||||||
s->width = width;
|
s->width = width;
|
||||||
s->height = height;
|
s->height = height;
|
||||||
@ -263,8 +264,6 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
|
|||||||
st->codec.height = height;
|
st->codec.height = height;
|
||||||
st->codec.frame_rate = frame_rate;
|
st->codec.frame_rate = frame_rate;
|
||||||
st->codec.frame_rate_base = frame_rate_base;
|
st->codec.frame_rate_base = frame_rate_base;
|
||||||
|
|
||||||
av_set_pts_info(s1, 48, 1, 1000000); /* 48 bits pts in us */
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
fail:
|
fail:
|
||||||
|
@ -154,6 +154,7 @@ static int idcin_read_header(AVFormatContext *s,
|
|||||||
st = av_new_stream(s, 0);
|
st = av_new_stream(s, 0);
|
||||||
if (!st)
|
if (!st)
|
||||||
return AVERROR_NOMEM;
|
return AVERROR_NOMEM;
|
||||||
|
av_set_pts_info(st, 33, 1, 90000);
|
||||||
idcin->video_stream_index = st->index;
|
idcin->video_stream_index = st->index;
|
||||||
st->codec.codec_type = CODEC_TYPE_VIDEO;
|
st->codec.codec_type = CODEC_TYPE_VIDEO;
|
||||||
st->codec.codec_id = CODEC_ID_IDCIN;
|
st->codec.codec_id = CODEC_ID_IDCIN;
|
||||||
@ -176,6 +177,7 @@ static int idcin_read_header(AVFormatContext *s,
|
|||||||
st = av_new_stream(s, 0);
|
st = av_new_stream(s, 0);
|
||||||
if (!st)
|
if (!st)
|
||||||
return AVERROR_NOMEM;
|
return AVERROR_NOMEM;
|
||||||
|
av_set_pts_info(st, 33, 1, 90000);
|
||||||
idcin->audio_stream_index = st->index;
|
idcin->audio_stream_index = st->index;
|
||||||
st->codec.codec_type = CODEC_TYPE_AUDIO;
|
st->codec.codec_type = CODEC_TYPE_AUDIO;
|
||||||
st->codec.codec_tag = 1;
|
st->codec.codec_tag = 1;
|
||||||
@ -205,10 +207,6 @@ static int idcin_read_header(AVFormatContext *s,
|
|||||||
idcin->next_chunk_is_video = 1;
|
idcin->next_chunk_is_video = 1;
|
||||||
idcin->pts = 0;
|
idcin->pts = 0;
|
||||||
|
|
||||||
/* set the pts reference (1 pts = 1/90000) */
|
|
||||||
s->pts_num = 1;
|
|
||||||
s->pts_den = 90000;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,10 +84,6 @@ static int roq_read_header(AVFormatContext *s,
|
|||||||
roq->framerate = LE_16(&preamble[6]);
|
roq->framerate = LE_16(&preamble[6]);
|
||||||
roq->frame_pts_inc = 90000 / roq->framerate;
|
roq->frame_pts_inc = 90000 / roq->framerate;
|
||||||
|
|
||||||
/* set the pts reference (1 pts = 1/90000) */
|
|
||||||
s->pts_num = 1;
|
|
||||||
s->pts_den = 90000;
|
|
||||||
|
|
||||||
/* init private context parameters */
|
/* init private context parameters */
|
||||||
roq->width = roq->height = roq->audio_channels = roq->video_pts =
|
roq->width = roq->height = roq->audio_channels = roq->video_pts =
|
||||||
roq->audio_frame_count = 0;
|
roq->audio_frame_count = 0;
|
||||||
@ -146,6 +142,8 @@ static int roq_read_header(AVFormatContext *s,
|
|||||||
st = av_new_stream(s, 0);
|
st = av_new_stream(s, 0);
|
||||||
if (!st)
|
if (!st)
|
||||||
return AVERROR_NOMEM;
|
return AVERROR_NOMEM;
|
||||||
|
/* set the pts reference (1 pts = 1/90000) */
|
||||||
|
av_set_pts_info(st, 33, 1, 90000);
|
||||||
roq->video_stream_index = st->index;
|
roq->video_stream_index = st->index;
|
||||||
st->codec.codec_type = CODEC_TYPE_VIDEO;
|
st->codec.codec_type = CODEC_TYPE_VIDEO;
|
||||||
st->codec.codec_id = CODEC_ID_ROQ;
|
st->codec.codec_id = CODEC_ID_ROQ;
|
||||||
@ -157,6 +155,7 @@ static int roq_read_header(AVFormatContext *s,
|
|||||||
st = av_new_stream(s, 0);
|
st = av_new_stream(s, 0);
|
||||||
if (!st)
|
if (!st)
|
||||||
return AVERROR_NOMEM;
|
return AVERROR_NOMEM;
|
||||||
|
av_set_pts_info(st, 33, 1, 90000);
|
||||||
roq->audio_stream_index = st->index;
|
roq->audio_stream_index = st->index;
|
||||||
st->codec.codec_type = CODEC_TYPE_AUDIO;
|
st->codec.codec_type = CODEC_TYPE_AUDIO;
|
||||||
st->codec.codec_id = CODEC_ID_ROQ_DPCM;
|
st->codec.codec_id = CODEC_ID_ROQ_DPCM;
|
||||||
|
@ -236,7 +236,7 @@ static int img_read_packet(AVFormatContext *s1, AVPacket *pkt)
|
|||||||
} else {
|
} else {
|
||||||
/* XXX: computing this pts is not necessary as it is done in
|
/* XXX: computing this pts is not necessary as it is done in
|
||||||
the generic code too */
|
the generic code too */
|
||||||
pkt->pts = av_rescale((int64_t)s->img_count * s1->streams[0]->codec.frame_rate_base, s1->pts_den, s1->streams[0]->codec.frame_rate) / s1->pts_num;
|
pkt->pts = av_rescale((int64_t)s->img_count * s1->streams[0]->codec.frame_rate_base, s1->streams[0]->time_base.den, s1->streams[0]->codec.frame_rate) / s1->streams[0]->time_base.num;
|
||||||
s->img_count++;
|
s->img_count++;
|
||||||
s->img_number++;
|
s->img_number++;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -552,14 +552,11 @@ static int ipmovie_read_header(AVFormatContext *s,
|
|||||||
else if (process_ipmovie_chunk(ipmovie, pb, &pkt) != CHUNK_INIT_AUDIO)
|
else if (process_ipmovie_chunk(ipmovie, pb, &pkt) != CHUNK_INIT_AUDIO)
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
|
|
||||||
/* set the pts reference (1 pts = 1/90000) */
|
|
||||||
s->pts_num = 1;
|
|
||||||
s->pts_den = 90000;
|
|
||||||
|
|
||||||
/* initialize the stream decoders */
|
/* initialize the stream decoders */
|
||||||
st = av_new_stream(s, 0);
|
st = av_new_stream(s, 0);
|
||||||
if (!st)
|
if (!st)
|
||||||
return AVERROR_NOMEM;
|
return AVERROR_NOMEM;
|
||||||
|
av_set_pts_info(st, 33, 1, 90000);
|
||||||
ipmovie->video_stream_index = st->index;
|
ipmovie->video_stream_index = st->index;
|
||||||
st->codec.codec_type = CODEC_TYPE_VIDEO;
|
st->codec.codec_type = CODEC_TYPE_VIDEO;
|
||||||
st->codec.codec_id = CODEC_ID_INTERPLAY_VIDEO;
|
st->codec.codec_id = CODEC_ID_INTERPLAY_VIDEO;
|
||||||
@ -574,6 +571,7 @@ static int ipmovie_read_header(AVFormatContext *s,
|
|||||||
st = av_new_stream(s, 0);
|
st = av_new_stream(s, 0);
|
||||||
if (!st)
|
if (!st)
|
||||||
return AVERROR_NOMEM;
|
return AVERROR_NOMEM;
|
||||||
|
av_set_pts_info(st, 33, 1, 90000);
|
||||||
ipmovie->audio_stream_index = st->index;
|
ipmovie->audio_stream_index = st->index;
|
||||||
st->codec.codec_type = CODEC_TYPE_AUDIO;
|
st->codec.codec_type = CODEC_TYPE_AUDIO;
|
||||||
st->codec.codec_id = ipmovie->audio_type;
|
st->codec.codec_id = ipmovie->audio_type;
|
||||||
|
@ -2152,8 +2152,6 @@ matroska_read_header (AVFormatContext *s,
|
|||||||
MatroskaTrack *track;
|
MatroskaTrack *track;
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
|
|
||||||
av_set_pts_info(s, 24, 1, 1000); /* 24 bit pts in ms */
|
|
||||||
|
|
||||||
for (i = 0; i < matroska->num_tracks; i++) {
|
for (i = 0; i < matroska->num_tracks; i++) {
|
||||||
track = matroska->tracks[i];
|
track = matroska->tracks[i];
|
||||||
|
|
||||||
@ -2257,6 +2255,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_NOMEM;
|
return AVERROR_NOMEM;
|
||||||
|
av_set_pts_info(st, 24, 1, 1000); /* 24 bit pts in ms */
|
||||||
|
|
||||||
st->codec.codec_id = codec_id;
|
st->codec.codec_id = codec_id;
|
||||||
|
|
||||||
|
@ -768,6 +768,7 @@ static void mpegts_push_data(void *opaque,
|
|||||||
}
|
}
|
||||||
st = av_new_stream(pes->stream, pes->pid);
|
st = av_new_stream(pes->stream, pes->pid);
|
||||||
if (st) {
|
if (st) {
|
||||||
|
av_set_pts_info(st, 60, 1, 27000000);
|
||||||
st->priv_data = pes;
|
st->priv_data = pes;
|
||||||
st->codec.codec_type = codec_type;
|
st->codec.codec_type = codec_type;
|
||||||
st->codec.codec_id = codec_id;
|
st->codec.codec_id = codec_id;
|
||||||
@ -1165,14 +1166,12 @@ static int mpegts_read_header(AVFormatContext *s,
|
|||||||
uint8_t packet[TS_PACKET_SIZE];
|
uint8_t packet[TS_PACKET_SIZE];
|
||||||
|
|
||||||
/* only read packets */
|
/* only read packets */
|
||||||
|
|
||||||
s->pts_num = 1;
|
|
||||||
s->pts_den = 27000000;
|
|
||||||
|
|
||||||
do_pcr:
|
do_pcr:
|
||||||
st = av_new_stream(s, 0);
|
st = av_new_stream(s, 0);
|
||||||
if (!st)
|
if (!st)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
av_set_pts_info(st, 60, 1, 27000000);
|
||||||
st->codec.codec_type = CODEC_TYPE_DATA;
|
st->codec.codec_type = CODEC_TYPE_DATA;
|
||||||
st->codec.codec_id = CODEC_ID_MPEG2TS;
|
st->codec.codec_id = CODEC_ID_MPEG2TS;
|
||||||
|
|
||||||
|
@ -511,8 +511,6 @@ static int nut_write_header(AVFormatContext *s)
|
|||||||
nut->stream =
|
nut->stream =
|
||||||
av_mallocz(sizeof(StreamContext)*s->nb_streams);
|
av_mallocz(sizeof(StreamContext)*s->nb_streams);
|
||||||
|
|
||||||
av_set_pts_info(s, 60, 1, AV_TIME_BASE);
|
|
||||||
|
|
||||||
/* main header */
|
/* main header */
|
||||||
put_be64(bc, MAIN_STARTCODE);
|
put_be64(bc, MAIN_STARTCODE);
|
||||||
put_packetheader(nut, bc, 120+5*256, 1);
|
put_packetheader(nut, bc, 120+5*256, 1);
|
||||||
@ -572,6 +570,7 @@ static int nut_write_header(AVFormatContext *s)
|
|||||||
int nom, denom, gcd;
|
int nom, denom, gcd;
|
||||||
|
|
||||||
codec = &s->streams[i]->codec;
|
codec = &s->streams[i]->codec;
|
||||||
|
av_set_pts_info(s->streams[i], 60, 1, AV_TIME_BASE);
|
||||||
|
|
||||||
put_be64(bc, STREAM_STARTCODE);
|
put_be64(bc, STREAM_STARTCODE);
|
||||||
put_packetheader(nut, bc, 120 + codec->extradata_size, 1);
|
put_packetheader(nut, bc, 120 + codec->extradata_size, 1);
|
||||||
@ -945,6 +944,8 @@ static int decode_stream_header(NUTContext *nut){
|
|||||||
st = av_new_stream(s, stream_id);
|
st = av_new_stream(s, stream_id);
|
||||||
if (!st)
|
if (!st)
|
||||||
return AVERROR_NOMEM;
|
return AVERROR_NOMEM;
|
||||||
|
av_set_pts_info(st, 60, 1, AV_TIME_BASE);
|
||||||
|
|
||||||
class = get_v(bc);
|
class = get_v(bc);
|
||||||
tmp = get_vb(bc);
|
tmp = get_vb(bc);
|
||||||
st->codec.codec_tag= tmp;
|
st->codec.codec_tag= tmp;
|
||||||
@ -1069,8 +1070,6 @@ static int nut_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
|||||||
|
|
||||||
nut->avf= s;
|
nut->avf= s;
|
||||||
|
|
||||||
av_set_pts_info(s, 60, 1, AV_TIME_BASE);
|
|
||||||
|
|
||||||
/* main header */
|
/* main header */
|
||||||
pos=0;
|
pos=0;
|
||||||
for(;;){
|
for(;;){
|
||||||
|
@ -36,14 +36,14 @@ static int ogg_write_header(AVFormatContext *avfcontext)
|
|||||||
ogg_packet *op= &context->op;
|
ogg_packet *op= &context->op;
|
||||||
int n, i;
|
int n, i;
|
||||||
|
|
||||||
av_set_pts_info(avfcontext, 60, 1, AV_TIME_BASE);
|
|
||||||
|
|
||||||
ogg_stream_init(&context->os, 31415);
|
ogg_stream_init(&context->os, 31415);
|
||||||
|
|
||||||
for(n = 0 ; n < avfcontext->nb_streams ; n++) {
|
for(n = 0 ; n < avfcontext->nb_streams ; n++) {
|
||||||
AVCodecContext *codec = &avfcontext->streams[n]->codec;
|
AVCodecContext *codec = &avfcontext->streams[n]->codec;
|
||||||
uint8_t *p= codec->extradata;
|
uint8_t *p= codec->extradata;
|
||||||
|
|
||||||
|
av_set_pts_info(avfcontext->streams[n], 60, 1, AV_TIME_BASE);
|
||||||
|
|
||||||
for(i=0; i < codec->extradata_size; i+= op->bytes){
|
for(i=0; i < codec->extradata_size; i+= op->bytes){
|
||||||
op->bytes = p[i++]<<8;
|
op->bytes = p[i++]<<8;
|
||||||
op->bytes+= p[i++];
|
op->bytes+= p[i++];
|
||||||
@ -172,7 +172,6 @@ static int ogg_read_header(AVFormatContext *avfcontext, AVFormatParameters *ap)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
avfcontext->ctx_flags |= AVFMTCTX_NOHEADER;
|
avfcontext->ctx_flags |= AVFMTCTX_NOHEADER;
|
||||||
av_set_pts_info(avfcontext, 60, 1, AV_TIME_BASE);
|
|
||||||
|
|
||||||
ogg_sync_init(&context->oy) ;
|
ogg_sync_init(&context->oy) ;
|
||||||
buf = ogg_sync_buffer(&context->oy, DECODER_BUFFER_SIZE) ;
|
buf = ogg_sync_buffer(&context->oy, DECODER_BUFFER_SIZE) ;
|
||||||
@ -190,6 +189,7 @@ static int ogg_read_header(AVFormatContext *avfcontext, AVFormatParameters *ap)
|
|||||||
ast = av_new_stream(avfcontext, 0) ;
|
ast = av_new_stream(avfcontext, 0) ;
|
||||||
if(!ast)
|
if(!ast)
|
||||||
return AVERROR_NOMEM ;
|
return AVERROR_NOMEM ;
|
||||||
|
av_set_pts_info(ast, 60, 1, AV_TIME_BASE);
|
||||||
|
|
||||||
codec= &ast->codec;
|
codec= &ast->codec;
|
||||||
codec->codec_type = CODEC_TYPE_AUDIO;
|
codec->codec_type = CODEC_TYPE_AUDIO;
|
||||||
|
@ -135,9 +135,6 @@ static int str_read_header(AVFormatContext *s,
|
|||||||
str->video_channel = -1;
|
str->video_channel = -1;
|
||||||
str->video_chunk = NULL;
|
str->video_chunk = NULL;
|
||||||
|
|
||||||
/* set the pts reference (1 pts = 1/90000) */
|
|
||||||
s->pts_num = 1;
|
|
||||||
s->pts_den = 90000;
|
|
||||||
|
|
||||||
/* skip over any RIFF header */
|
/* skip over any RIFF header */
|
||||||
if (get_buffer(pb, sector, RIFF_HEADER_SIZE) != RIFF_HEADER_SIZE)
|
if (get_buffer(pb, sector, RIFF_HEADER_SIZE) != RIFF_HEADER_SIZE)
|
||||||
@ -178,6 +175,8 @@ static int str_read_header(AVFormatContext *s,
|
|||||||
st = av_new_stream(s, 0);
|
st = av_new_stream(s, 0);
|
||||||
if (!st)
|
if (!st)
|
||||||
return AVERROR_NOMEM;
|
return AVERROR_NOMEM;
|
||||||
|
/* set the pts reference (1 pts = 1/90000) */
|
||||||
|
av_set_pts_info(st, 33, 1, 90000);
|
||||||
|
|
||||||
str->channels[channel].video_stream_index = st->index;
|
str->channels[channel].video_stream_index = st->index;
|
||||||
|
|
||||||
@ -206,6 +205,7 @@ static int str_read_header(AVFormatContext *s,
|
|||||||
st = av_new_stream(s, 0);
|
st = av_new_stream(s, 0);
|
||||||
if (!st)
|
if (!st)
|
||||||
return AVERROR_NOMEM;
|
return AVERROR_NOMEM;
|
||||||
|
av_set_pts_info(st, 33, 1, 90000);
|
||||||
|
|
||||||
str->channels[channel].audio_stream_index = st->index;
|
str->channels[channel].audio_stream_index = st->index;
|
||||||
|
|
||||||
|
@ -173,6 +173,9 @@ static int film_read_header(AVFormatContext *s,
|
|||||||
film->sample_count = BE_32(&scratch[12]);
|
film->sample_count = BE_32(&scratch[12]);
|
||||||
film->sample_table = av_malloc(film->sample_count * sizeof(film_sample_t));
|
film->sample_table = av_malloc(film->sample_count * sizeof(film_sample_t));
|
||||||
|
|
||||||
|
for(i=0; i<s->nb_streams; i++)
|
||||||
|
av_set_pts_info(s->streams[i], 33, 1, film->base_clock);
|
||||||
|
|
||||||
audio_frame_counter = 0;
|
audio_frame_counter = 0;
|
||||||
for (i = 0; i < film->sample_count; i++) {
|
for (i = 0; i < film->sample_count; i++) {
|
||||||
/* load the next sample record and transfer it to an internal struct */
|
/* load the next sample record and transfer it to an internal struct */
|
||||||
@ -200,10 +203,6 @@ static int film_read_header(AVFormatContext *s,
|
|||||||
|
|
||||||
film->current_sample = 0;
|
film->current_sample = 0;
|
||||||
|
|
||||||
/* set the pts reference to match the tick rate of the file */
|
|
||||||
s->pts_num = 1;
|
|
||||||
s->pts_den = film->base_clock;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -129,6 +129,7 @@ static int vmd_read_header(AVFormatContext *s,
|
|||||||
st = av_new_stream(s, 0);
|
st = av_new_stream(s, 0);
|
||||||
if (!st)
|
if (!st)
|
||||||
return AVERROR_NOMEM;
|
return AVERROR_NOMEM;
|
||||||
|
av_set_pts_info(st, 33, 1, 90000);
|
||||||
vmd->video_stream_index = st->index;
|
vmd->video_stream_index = st->index;
|
||||||
st->codec.codec_type = CODEC_TYPE_VIDEO;
|
st->codec.codec_type = CODEC_TYPE_VIDEO;
|
||||||
st->codec.codec_id = CODEC_ID_VMDVIDEO;
|
st->codec.codec_id = CODEC_ID_VMDVIDEO;
|
||||||
@ -145,6 +146,7 @@ static int vmd_read_header(AVFormatContext *s,
|
|||||||
st = av_new_stream(s, 0);
|
st = av_new_stream(s, 0);
|
||||||
if (!st)
|
if (!st)
|
||||||
return AVERROR_NOMEM;
|
return AVERROR_NOMEM;
|
||||||
|
av_set_pts_info(st, 33, 1, 90000);
|
||||||
vmd->audio_stream_index = st->index;
|
vmd->audio_stream_index = st->index;
|
||||||
st->codec.codec_type = CODEC_TYPE_AUDIO;
|
st->codec.codec_type = CODEC_TYPE_AUDIO;
|
||||||
st->codec.codec_id = CODEC_ID_VMDAUDIO;
|
st->codec.codec_id = CODEC_ID_VMDAUDIO;
|
||||||
@ -243,10 +245,6 @@ static int vmd_read_header(AVFormatContext *s,
|
|||||||
|
|
||||||
av_free(raw_frame_table);
|
av_free(raw_frame_table);
|
||||||
|
|
||||||
/* set the pts reference at 1 pts = 1/90000 sec */
|
|
||||||
s->pts_num = 1;
|
|
||||||
s->pts_den = 90000;
|
|
||||||
|
|
||||||
vmd->current_frame = 0;
|
vmd->current_frame = 0;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -805,8 +805,6 @@ static int swf_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
|||||||
frame_rate = get_le16(pb);
|
frame_rate = get_le16(pb);
|
||||||
get_le16(pb); /* frame count */
|
get_le16(pb); /* frame count */
|
||||||
|
|
||||||
av_set_pts_info(s, 24, 1, 1000); /* 24 bit pts in ms */
|
|
||||||
|
|
||||||
/* The Flash Player converts 8.8 frame rates
|
/* The Flash Player converts 8.8 frame rates
|
||||||
to milliseconds internally. Do the same to get
|
to milliseconds internally. Do the same to get
|
||||||
a correct framerate */
|
a correct framerate */
|
||||||
@ -837,6 +835,8 @@ static int swf_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
|||||||
/* Check for FLV1 */
|
/* Check for FLV1 */
|
||||||
if ( get_byte(pb) == SWF_VIDEO_CODEC_FLV1 ) {
|
if ( get_byte(pb) == SWF_VIDEO_CODEC_FLV1 ) {
|
||||||
vst = av_new_stream(s, 0);
|
vst = av_new_stream(s, 0);
|
||||||
|
av_set_pts_info(vst, 24, 1, 1000); /* 24 bit pts in ms */
|
||||||
|
|
||||||
vst->codec.codec_type = CODEC_TYPE_VIDEO;
|
vst->codec.codec_type = CODEC_TYPE_VIDEO;
|
||||||
vst->codec.codec_id = CODEC_ID_FLV1;
|
vst->codec.codec_id = CODEC_ID_FLV1;
|
||||||
if ( swf->samples_per_frame ) {
|
if ( swf->samples_per_frame ) {
|
||||||
@ -857,6 +857,7 @@ static int swf_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
|||||||
get_le16(pb);
|
get_le16(pb);
|
||||||
}
|
}
|
||||||
ast = av_new_stream(s, 1);
|
ast = av_new_stream(s, 1);
|
||||||
|
av_set_pts_info(ast, 24, 1, 1000); /* 24 bit pts in ms */
|
||||||
if (!ast)
|
if (!ast)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
@ -355,13 +355,6 @@ int av_open_input_stream(AVFormatContext **ic_ptr,
|
|||||||
ic->priv_data = NULL;
|
ic->priv_data = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* default pts settings is MPEG like */
|
|
||||||
av_set_pts_info(ic, 33, 1, 90000);
|
|
||||||
ic->last_pkt_pts = AV_NOPTS_VALUE;
|
|
||||||
ic->last_pkt_dts = AV_NOPTS_VALUE;
|
|
||||||
ic->last_pkt_stream_pts = AV_NOPTS_VALUE;
|
|
||||||
ic->last_pkt_stream_dts = AV_NOPTS_VALUE;
|
|
||||||
|
|
||||||
err = ic->iformat->read_header(ic, ap);
|
err = ic->iformat->read_header(ic, ap);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
@ -499,7 +492,7 @@ int av_read_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
wrapping is handled by considering the next PTS/DTS as a delta to
|
wrapping is handled by considering the next PTS/DTS as a delta to
|
||||||
the previous value. We handle the delta as a fraction to avoid any
|
the previous value. We handle the delta as a fraction to avoid any
|
||||||
rounding errors. */
|
rounding errors. */
|
||||||
static inline int64_t convert_timestamp_units(AVFormatContext *s,
|
static inline int64_t convert_timestamp_units(AVStream *s,
|
||||||
int64_t *plast_pkt_pts,
|
int64_t *plast_pkt_pts,
|
||||||
int *plast_pkt_pts_frac,
|
int *plast_pkt_pts_frac,
|
||||||
int64_t *plast_pkt_stream_pts,
|
int64_t *plast_pkt_stream_pts,
|
||||||
@ -515,17 +508,18 @@ static inline int64_t convert_timestamp_units(AVFormatContext *s,
|
|||||||
shift = 64 - s->pts_wrap_bits;
|
shift = 64 - s->pts_wrap_bits;
|
||||||
delta_pts = ((stream_pts - *plast_pkt_stream_pts) << shift) >> shift;
|
delta_pts = ((stream_pts - *plast_pkt_stream_pts) << shift) >> shift;
|
||||||
/* XXX: overflow possible but very unlikely as it is a delta */
|
/* XXX: overflow possible but very unlikely as it is a delta */
|
||||||
delta_pts = delta_pts * AV_TIME_BASE * s->pts_num;
|
delta_pts = delta_pts * AV_TIME_BASE * s->time_base.num;
|
||||||
pts = *plast_pkt_pts + (delta_pts / s->pts_den);
|
pts = *plast_pkt_pts + (delta_pts / s->time_base.den);
|
||||||
pts_frac = *plast_pkt_pts_frac + (delta_pts % s->pts_den);
|
pts_frac = *plast_pkt_pts_frac + (delta_pts % s->time_base.den);
|
||||||
if (pts_frac >= s->pts_den) {
|
if (pts_frac >= s->time_base.den) {
|
||||||
pts_frac -= s->pts_den;
|
pts_frac -= s->time_base.den;
|
||||||
pts++;
|
pts++;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* no previous pts, so no wrapping possible */
|
/* no previous pts, so no wrapping possible */
|
||||||
pts = (int64_t)(((double)stream_pts * AV_TIME_BASE * s->pts_num) /
|
// pts = av_rescale(stream_pts, (int64_t)AV_TIME_BASE * s->time_base.num, s->time_base.den);
|
||||||
(double)s->pts_den);
|
pts = (int64_t)(((double)stream_pts * AV_TIME_BASE * s->time_base.num) /
|
||||||
|
(double)s->time_base.den);
|
||||||
pts_frac = 0;
|
pts_frac = 0;
|
||||||
}
|
}
|
||||||
*plast_pkt_stream_pts = stream_pts;
|
*plast_pkt_stream_pts = stream_pts;
|
||||||
@ -752,15 +746,17 @@ static int av_read_frame_internal(AVFormatContext *s, AVPacket *pkt)
|
|||||||
/* no more packets: really terminates parsing */
|
/* no more packets: really terminates parsing */
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
st = s->streams[s->cur_pkt.stream_index];
|
||||||
|
|
||||||
/* convert the packet time stamp units and handle wrapping */
|
/* convert the packet time stamp units and handle wrapping */
|
||||||
s->cur_pkt.pts = convert_timestamp_units(s,
|
s->cur_pkt.pts = convert_timestamp_units(st,
|
||||||
&s->last_pkt_pts, &s->last_pkt_pts_frac,
|
&st->last_pkt_pts, &st->last_pkt_pts_frac,
|
||||||
&s->last_pkt_stream_pts,
|
&st->last_pkt_stream_pts,
|
||||||
s->cur_pkt.pts);
|
s->cur_pkt.pts);
|
||||||
s->cur_pkt.dts = convert_timestamp_units(s,
|
s->cur_pkt.dts = convert_timestamp_units(st,
|
||||||
&s->last_pkt_dts, &s->last_pkt_dts_frac,
|
&st->last_pkt_dts, &st->last_pkt_dts_frac,
|
||||||
&s->last_pkt_stream_dts,
|
&st->last_pkt_stream_dts,
|
||||||
s->cur_pkt.dts);
|
s->cur_pkt.dts);
|
||||||
#if 0
|
#if 0
|
||||||
if (s->cur_pkt.stream_index == 0) {
|
if (s->cur_pkt.stream_index == 0) {
|
||||||
@ -772,14 +768,10 @@ static int av_read_frame_internal(AVFormatContext *s, AVPacket *pkt)
|
|||||||
(double)s->cur_pkt.dts / AV_TIME_BASE);
|
(double)s->cur_pkt.dts / AV_TIME_BASE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* duration field */
|
|
||||||
if (s->cur_pkt.duration != 0) {
|
|
||||||
s->cur_pkt.duration = ((int64_t)s->cur_pkt.duration * AV_TIME_BASE * s->pts_num) /
|
|
||||||
s->pts_den;
|
|
||||||
}
|
|
||||||
|
|
||||||
st = s->streams[s->cur_pkt.stream_index];
|
/* duration field */
|
||||||
|
s->cur_pkt.duration = av_rescale(s->cur_pkt.duration, AV_TIME_BASE * (int64_t)st->time_base.num, st->time_base.den);
|
||||||
|
|
||||||
s->cur_st = st;
|
s->cur_st = st;
|
||||||
s->cur_ptr = s->cur_pkt.data;
|
s->cur_ptr = s->cur_pkt.data;
|
||||||
s->cur_len = s->cur_pkt.size;
|
s->cur_len = s->cur_pkt.size;
|
||||||
@ -1355,7 +1347,7 @@ static void av_estimate_timings_from_pts(AVFormatContext *ic)
|
|||||||
st = ic->streams[pkt->stream_index];
|
st = ic->streams[pkt->stream_index];
|
||||||
if (pkt->pts != AV_NOPTS_VALUE) {
|
if (pkt->pts != AV_NOPTS_VALUE) {
|
||||||
if (st->start_time == AV_NOPTS_VALUE)
|
if (st->start_time == AV_NOPTS_VALUE)
|
||||||
st->start_time = (int64_t)((double)pkt->pts * ic->pts_num * (double)AV_TIME_BASE / ic->pts_den);
|
st->start_time = av_rescale(pkt->pts, st->time_base.num * (int64_t)AV_TIME_BASE, st->time_base.den);
|
||||||
}
|
}
|
||||||
av_free_packet(pkt);
|
av_free_packet(pkt);
|
||||||
}
|
}
|
||||||
@ -1398,7 +1390,7 @@ static void av_estimate_timings_from_pts(AVFormatContext *ic)
|
|||||||
read_size += pkt->size;
|
read_size += pkt->size;
|
||||||
st = ic->streams[pkt->stream_index];
|
st = ic->streams[pkt->stream_index];
|
||||||
if (pkt->pts != AV_NOPTS_VALUE) {
|
if (pkt->pts != AV_NOPTS_VALUE) {
|
||||||
end_time = (int64_t)((double)pkt->pts * ic->pts_num * (double)AV_TIME_BASE / ic->pts_den);
|
end_time = av_rescale(pkt->pts, st->time_base.num * (int64_t)AV_TIME_BASE, st->time_base.den);
|
||||||
duration = end_time - st->start_time;
|
duration = end_time - st->start_time;
|
||||||
if (duration > 0) {
|
if (duration > 0) {
|
||||||
if (st->duration == AV_NOPTS_VALUE ||
|
if (st->duration == AV_NOPTS_VALUE ||
|
||||||
@ -1776,6 +1768,14 @@ AVStream *av_new_stream(AVFormatContext *s, int id)
|
|||||||
st->id = id;
|
st->id = id;
|
||||||
st->start_time = AV_NOPTS_VALUE;
|
st->start_time = AV_NOPTS_VALUE;
|
||||||
st->duration = AV_NOPTS_VALUE;
|
st->duration = AV_NOPTS_VALUE;
|
||||||
|
|
||||||
|
/* default pts settings is MPEG like */
|
||||||
|
av_set_pts_info(st, 33, 1, 90000);
|
||||||
|
st->last_pkt_pts = AV_NOPTS_VALUE;
|
||||||
|
st->last_pkt_dts = AV_NOPTS_VALUE;
|
||||||
|
st->last_pkt_stream_pts = AV_NOPTS_VALUE;
|
||||||
|
st->last_pkt_stream_dts = AV_NOPTS_VALUE;
|
||||||
|
|
||||||
s->streams[s->nb_streams++] = st;
|
s->streams[s->nb_streams++] = st;
|
||||||
return st;
|
return st;
|
||||||
}
|
}
|
||||||
@ -1814,8 +1814,6 @@ int av_write_header(AVFormatContext *s)
|
|||||||
int ret, i;
|
int ret, i;
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
|
|
||||||
/* default pts settings is MPEG like */
|
|
||||||
av_set_pts_info(s, 33, 1, 90000);
|
|
||||||
ret = s->oformat->write_header(s);
|
ret = s->oformat->write_header(s);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
@ -1827,11 +1825,11 @@ int av_write_header(AVFormatContext *s)
|
|||||||
switch (st->codec.codec_type) {
|
switch (st->codec.codec_type) {
|
||||||
case CODEC_TYPE_AUDIO:
|
case CODEC_TYPE_AUDIO:
|
||||||
av_frac_init(&st->pts, 0, 0,
|
av_frac_init(&st->pts, 0, 0,
|
||||||
(int64_t)s->pts_num * st->codec.sample_rate);
|
(int64_t)st->time_base.num * st->codec.sample_rate);
|
||||||
break;
|
break;
|
||||||
case CODEC_TYPE_VIDEO:
|
case CODEC_TYPE_VIDEO:
|
||||||
av_frac_init(&st->pts, 0, 0,
|
av_frac_init(&st->pts, 0, 0,
|
||||||
(int64_t)s->pts_num * st->codec.frame_rate);
|
(int64_t)st->time_base.num * st->codec.frame_rate);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -1858,7 +1856,7 @@ int av_write_frame(AVFormatContext *s, int stream_index, const uint8_t *buf,
|
|||||||
int ret, frame_size;
|
int ret, frame_size;
|
||||||
|
|
||||||
st = s->streams[stream_index];
|
st = s->streams[stream_index];
|
||||||
pts_mask = (1LL << s->pts_wrap_bits) - 1;
|
pts_mask = (1LL << st->pts_wrap_bits) - 1;
|
||||||
|
|
||||||
/* HACK/FIXME we skip all zero size audio packets so a encoder can pass pts by outputing zero size packets */
|
/* HACK/FIXME we skip all zero size audio packets so a encoder can pass pts by outputing zero size packets */
|
||||||
if(st->codec.codec_type==CODEC_TYPE_AUDIO && size==0)
|
if(st->codec.codec_type==CODEC_TYPE_AUDIO && size==0)
|
||||||
@ -1878,13 +1876,11 @@ int av_write_frame(AVFormatContext *s, int stream_index, const uint8_t *buf,
|
|||||||
/* HACK/FIXME, we skip the initial 0-size packets as they are most likely equal to the encoder delay,
|
/* HACK/FIXME, we skip the initial 0-size packets as they are most likely equal to the encoder delay,
|
||||||
but it would be better if we had the real timestamps from the encoder */
|
but it would be better if we had the real timestamps from the encoder */
|
||||||
if (frame_size >= 0 && (size || st->pts.num!=st->pts.den>>1 || st->pts.val)) {
|
if (frame_size >= 0 && (size || st->pts.num!=st->pts.den>>1 || st->pts.val)) {
|
||||||
av_frac_add(&st->pts,
|
av_frac_add(&st->pts, (int64_t)st->time_base.den * frame_size);
|
||||||
(int64_t)s->pts_den * frame_size);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CODEC_TYPE_VIDEO:
|
case CODEC_TYPE_VIDEO:
|
||||||
av_frac_add(&st->pts,
|
av_frac_add(&st->pts, (int64_t)st->time_base.den * st->codec.frame_rate_base);
|
||||||
(int64_t)s->pts_den * st->codec.frame_rate_base);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -2375,12 +2371,12 @@ void url_split(char *proto, int proto_size,
|
|||||||
* @param pts_num numerator to convert to seconds (MPEG: 1)
|
* @param pts_num numerator to convert to seconds (MPEG: 1)
|
||||||
* @param pts_den denominator to convert to seconds (MPEG: 90000)
|
* @param pts_den denominator to convert to seconds (MPEG: 90000)
|
||||||
*/
|
*/
|
||||||
void av_set_pts_info(AVFormatContext *s, int pts_wrap_bits,
|
void av_set_pts_info(AVStream *s, int pts_wrap_bits,
|
||||||
int pts_num, int pts_den)
|
int pts_num, int pts_den)
|
||||||
{
|
{
|
||||||
s->pts_wrap_bits = pts_wrap_bits;
|
s->pts_wrap_bits = pts_wrap_bits;
|
||||||
s->pts_num = pts_num;
|
s->time_base.num = pts_num;
|
||||||
s->pts_den = pts_den;
|
s->time_base.den = pts_den;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* fraction handling */
|
/* fraction handling */
|
||||||
|
@ -233,6 +233,7 @@ static int wc3_read_header(AVFormatContext *s,
|
|||||||
st = av_new_stream(s, 0);
|
st = av_new_stream(s, 0);
|
||||||
if (!st)
|
if (!st)
|
||||||
return AVERROR_NOMEM;
|
return AVERROR_NOMEM;
|
||||||
|
av_set_pts_info(st, 33, 1, 90000);
|
||||||
wc3->video_stream_index = st->index;
|
wc3->video_stream_index = st->index;
|
||||||
st->codec.codec_type = CODEC_TYPE_VIDEO;
|
st->codec.codec_type = CODEC_TYPE_VIDEO;
|
||||||
st->codec.codec_id = CODEC_ID_XAN_WC3;
|
st->codec.codec_id = CODEC_ID_XAN_WC3;
|
||||||
@ -246,6 +247,7 @@ static int wc3_read_header(AVFormatContext *s,
|
|||||||
st = av_new_stream(s, 0);
|
st = av_new_stream(s, 0);
|
||||||
if (!st)
|
if (!st)
|
||||||
return AVERROR_NOMEM;
|
return AVERROR_NOMEM;
|
||||||
|
av_set_pts_info(st, 33, 1, 90000);
|
||||||
wc3->audio_stream_index = st->index;
|
wc3->audio_stream_index = st->index;
|
||||||
st->codec.codec_type = CODEC_TYPE_AUDIO;
|
st->codec.codec_type = CODEC_TYPE_AUDIO;
|
||||||
st->codec.codec_id = CODEC_ID_PCM_S16LE;
|
st->codec.codec_id = CODEC_ID_PCM_S16LE;
|
||||||
@ -257,10 +259,6 @@ static int wc3_read_header(AVFormatContext *s,
|
|||||||
st->codec.bits_per_sample;
|
st->codec.bits_per_sample;
|
||||||
st->codec.block_align = WC3_AUDIO_BITS * WC3_AUDIO_CHANNELS;
|
st->codec.block_align = WC3_AUDIO_BITS * WC3_AUDIO_CHANNELS;
|
||||||
|
|
||||||
/* set the pts reference (1 pts = 1/90000) */
|
|
||||||
s->pts_num = 1;
|
|
||||||
s->pts_den = 90000;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,14 +131,11 @@ static int wsaud_read_header(AVFormatContext *s,
|
|||||||
/* flag 1 indicates 16 bit audio */
|
/* flag 1 indicates 16 bit audio */
|
||||||
wsaud->audio_bits = (((header[10] & 0x2) >> 1) + 1) * 8;
|
wsaud->audio_bits = (((header[10] & 0x2) >> 1) + 1) * 8;
|
||||||
|
|
||||||
/* set the pts reference the same as the sample rate */
|
|
||||||
s->pts_num = 1;
|
|
||||||
s->pts_den = wsaud->audio_samplerate;
|
|
||||||
|
|
||||||
/* initialize the audio decoder stream */
|
/* initialize the audio decoder stream */
|
||||||
st = av_new_stream(s, 0);
|
st = av_new_stream(s, 0);
|
||||||
if (!st)
|
if (!st)
|
||||||
return AVERROR_NOMEM;
|
return AVERROR_NOMEM;
|
||||||
|
av_set_pts_info(st, 33, 1, wsaud->audio_samplerate);
|
||||||
st->codec.codec_type = CODEC_TYPE_AUDIO;
|
st->codec.codec_type = CODEC_TYPE_AUDIO;
|
||||||
st->codec.codec_id = wsaud->audio_type;
|
st->codec.codec_id = wsaud->audio_type;
|
||||||
st->codec.codec_tag = 0; /* no tag */
|
st->codec.codec_tag = 0; /* no tag */
|
||||||
@ -222,14 +219,11 @@ static int wsvqa_read_header(AVFormatContext *s,
|
|||||||
unsigned int chunk_tag;
|
unsigned int chunk_tag;
|
||||||
unsigned int chunk_size;
|
unsigned int chunk_size;
|
||||||
|
|
||||||
/* set the pts reference (1 pts = 1/90000) */
|
|
||||||
s->pts_num = 1;
|
|
||||||
s->pts_den = 90000;
|
|
||||||
|
|
||||||
/* initialize the video decoder stream */
|
/* initialize the video decoder stream */
|
||||||
st = av_new_stream(s, 0);
|
st = av_new_stream(s, 0);
|
||||||
if (!st)
|
if (!st)
|
||||||
return AVERROR_NOMEM;
|
return AVERROR_NOMEM;
|
||||||
|
av_set_pts_info(st, 33, 1, 90000);
|
||||||
wsvqa->video_stream_index = st->index;
|
wsvqa->video_stream_index = st->index;
|
||||||
st->codec.codec_type = CODEC_TYPE_VIDEO;
|
st->codec.codec_type = CODEC_TYPE_VIDEO;
|
||||||
st->codec.codec_id = CODEC_ID_WS_VQA;
|
st->codec.codec_id = CODEC_ID_WS_VQA;
|
||||||
@ -255,6 +249,7 @@ static int wsvqa_read_header(AVFormatContext *s,
|
|||||||
st = av_new_stream(s, 0);
|
st = av_new_stream(s, 0);
|
||||||
if (!st)
|
if (!st)
|
||||||
return AVERROR_NOMEM;
|
return AVERROR_NOMEM;
|
||||||
|
av_set_pts_info(st, 33, 1, 90000);
|
||||||
st->codec.codec_type = CODEC_TYPE_AUDIO;
|
st->codec.codec_type = CODEC_TYPE_AUDIO;
|
||||||
st->codec.codec_id = CODEC_ID_ADPCM_IMA_WS;
|
st->codec.codec_id = CODEC_ID_ADPCM_IMA_WS;
|
||||||
st->codec.codec_tag = 0; /* no tag */
|
st->codec.codec_tag = 0; /* no tag */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user