fix pts handling in ffm
Originally committed as revision 13683 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
@@ -92,7 +92,6 @@ static int ffm_write_header(AVFormatContext *s)
|
||||
{
|
||||
FFMContext *ffm = s->priv_data;
|
||||
AVStream *st;
|
||||
FFMStream *fst;
|
||||
ByteIOContext *pb = s->pb;
|
||||
AVCodecContext *codec;
|
||||
int bit_rate, i;
|
||||
@@ -116,11 +115,7 @@ static int ffm_write_header(AVFormatContext *s)
|
||||
/* list of streams */
|
||||
for(i=0;i<s->nb_streams;i++) {
|
||||
st = s->streams[i];
|
||||
fst = av_mallocz(sizeof(FFMStream));
|
||||
if (!fst)
|
||||
goto fail;
|
||||
av_set_pts_info(st, 64, 1, 1000000);
|
||||
st->priv_data = fst;
|
||||
|
||||
codec = st->codec;
|
||||
/* generic info */
|
||||
@@ -176,13 +171,14 @@ static int ffm_write_header(AVFormatContext *s)
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
/* hack to have real time */
|
||||
if (ffm_nopts)
|
||||
fst->pts = 0;
|
||||
else
|
||||
fst->pts = av_gettime();
|
||||
}
|
||||
|
||||
/* hack to have real time */
|
||||
if (ffm_nopts)
|
||||
ffm->start_time = 0;
|
||||
else
|
||||
ffm->start_time = av_gettime();
|
||||
|
||||
/* flush until end of block reached */
|
||||
while ((url_ftell(pb) % ffm->packet_size) != 0)
|
||||
put_byte(pb, 0);
|
||||
@@ -198,22 +194,16 @@ static int ffm_write_header(AVFormatContext *s)
|
||||
ffm->first_packet = 1;
|
||||
|
||||
return 0;
|
||||
fail:
|
||||
for(i=0;i<s->nb_streams;i++) {
|
||||
st = s->streams[i];
|
||||
av_freep(&st->priv_data);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int ffm_write_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
{
|
||||
FFMContext *ffm = s->priv_data;
|
||||
AVStream *st = s->streams[pkt->stream_index];
|
||||
FFMStream *fst = st->priv_data;
|
||||
int64_t pts;
|
||||
uint8_t header[FRAME_HEADER_SIZE];
|
||||
|
||||
pts = fst->pts;
|
||||
pts = ffm->start_time + pkt->pts;
|
||||
/* packet size & key_frame */
|
||||
header[0] = pkt->stream_index;
|
||||
header[1] = 0;
|
||||
@@ -224,7 +214,6 @@ static int ffm_write_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
ffm_write_data(s, header, FRAME_HEADER_SIZE, pts, 1);
|
||||
ffm_write_data(s, pkt->data, pkt->size, pts, 0);
|
||||
|
||||
fst->pts += pkt->duration;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user