Commit d986979c authored by michael's avatar michael

fix nonsense timestamp mess


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@4166 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent 618b6498
...@@ -593,6 +593,7 @@ static int dv_extract_video_info(DVDemuxContext *c, uint8_t* frame) ...@@ -593,6 +593,7 @@ static int dv_extract_video_info(DVDemuxContext *c, uint8_t* frame)
avctx->frame_rate = sys->frame_rate; avctx->frame_rate = sys->frame_rate;
avctx->frame_rate_base = sys->frame_rate_base; avctx->frame_rate_base = sys->frame_rate_base;
av_set_pts_info(c->vst, 64, sys->frame_rate_base, sys->frame_rate);
avctx->width = sys->width; avctx->width = sys->width;
avctx->height = sys->height; avctx->height = sys->height;
avctx->pix_fmt = sys->pix_fmt; avctx->pix_fmt = sys->pix_fmt;
...@@ -744,7 +745,6 @@ DVDemuxContext* dv_init_demux(AVFormatContext *s) ...@@ -744,7 +745,6 @@ DVDemuxContext* dv_init_demux(AVFormatContext *s)
av_free(c); av_free(c);
return NULL; return NULL;
} }
av_set_pts_info(c->vst, 64, 1, 30000);
c->fctx = s; c->fctx = s;
c->ast[0] = c->ast[1] = NULL; c->ast[0] = c->ast[1] = NULL;
...@@ -803,7 +803,7 @@ int dv_produce_packet(DVDemuxContext *c, AVPacket *pkt, ...@@ -803,7 +803,7 @@ int dv_produce_packet(DVDemuxContext *c, AVPacket *pkt,
pkt->size = size; pkt->size = size;
pkt->flags |= PKT_FLAG_KEY; pkt->flags |= PKT_FLAG_KEY;
pkt->stream_index = c->vst->id; pkt->stream_index = c->vst->id;
pkt->pts = c->frames * sys->frame_rate_base * (30000/sys->frame_rate); pkt->pts = c->frames;
c->frames++; c->frames++;
...@@ -815,22 +815,11 @@ static int64_t dv_frame_offset(AVFormatContext *s, DVDemuxContext *c, ...@@ -815,22 +815,11 @@ static int64_t dv_frame_offset(AVFormatContext *s, DVDemuxContext *c,
{ {
// FIXME: sys may be wrong if last dv_read_packet() failed (buffer is junk) // FIXME: sys may be wrong if last dv_read_packet() failed (buffer is junk)
const DVprofile* sys = dv_codec_profile(&c->vst->codec); const DVprofile* sys = dv_codec_profile(&c->vst->codec);
int64_t frame_number, offset; int64_t offset;
int64_t size = url_filesize(url_fileno(&s->pb)); int64_t size = url_filesize(url_fileno(&s->pb));
int64_t max_offset = ((size-1) / sys->frame_size) * sys->frame_size; int64_t max_offset = ((size-1) / sys->frame_size) * sys->frame_size;
if (flags & AVSEEK_FLAG_BACKWARD) { offset = sys->frame_size * timestamp;
frame_number = av_rescale_rnd(timestamp, sys->frame_rate,
(int64_t) 30000 * sys->frame_rate_base,
AV_ROUND_DOWN);
}
else {
frame_number = av_rescale_rnd(timestamp, sys->frame_rate,
(int64_t) 30000 * sys->frame_rate_base,
AV_ROUND_UP);
}
offset = sys->frame_size * frame_number;
if (offset > max_offset) offset = max_offset; if (offset > max_offset) offset = max_offset;
else if (offset < 0) offset = 0; else if (offset < 0) offset = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment