100l (forgoten seeking functions)

Originally committed as revision 3585 to svn://svn.ffmpeg.org/ffmpeg/trunk
pull/126/head
Michael Niedermayer 20 years ago
parent b1d041c15c
commit 7b3c1382bf
  1. 2
      libavformat/avformat.h
  2. 2
      libavformat/avidec.c
  3. 4
      libavformat/ffm.c
  4. 2
      libavformat/mov.c
  5. 9
      libavformat/raw.c
  6. 2
      libavformat/rtsp.c
  7. 4
      libavformat/wav.c

@ -441,7 +441,7 @@ int ff_wav_init(void);
/* raw.c */ /* raw.c */
int pcm_read_seek(AVFormatContext *s, int pcm_read_seek(AVFormatContext *s,
int stream_index, int64_t timestamp); int stream_index, int64_t timestamp, int flags);
int raw_init(void); int raw_init(void);
/* mp3.c */ /* mp3.c */

@ -649,7 +649,7 @@ static int locate_frame_in_index(AVIIndexEntry *entries,
return m; return m;
} }
static int avi_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp) static int avi_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
{ {
AVIContext *avi = s->priv_data; AVIContext *avi = s->priv_data;
AVStream *st; AVStream *st;

@ -627,7 +627,7 @@ static int64_t get_pts(AVFormatContext *s, offset_t pos)
/* seek to a given time in the file. The file read pointer is /* seek to a given time in the file. The file read pointer is
positionned at or before pts. XXX: the following code is quite positionned at or before pts. XXX: the following code is quite
approximative */ approximative */
static int ffm_seek(AVFormatContext *s, int64_t wanted_pts) static int ffm_seek(AVFormatContext *s, int stream_index, int64_t wanted_pts, int flags)
{ {
FFMContext *ffm = s->priv_data; FFMContext *ffm = s->priv_data;
offset_t pos_min, pos_max, pos; offset_t pos_min, pos_max, pos;
@ -662,7 +662,7 @@ static int ffm_seek(AVFormatContext *s, int64_t wanted_pts)
pos_min = pos + FFM_PACKET_SIZE; pos_min = pos + FFM_PACKET_SIZE;
} }
} }
pos = pos_min; pos = (flags & AVSEEK_FLAG_BACKWARD) ? pos_min : pos_max;
if (pos > 0) if (pos > 0)
pos -= FFM_PACKET_SIZE; pos -= FFM_PACKET_SIZE;
found: found:

@ -1846,7 +1846,7 @@ readchunk:
/** /**
* Seek method based on the one described in the Appendix C of QTFileFormat.pdf * Seek method based on the one described in the Appendix C of QTFileFormat.pdf
*/ */
static int mov_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp) static int mov_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
{ {
MOVContext* mov = (MOVContext *) s->priv_data; MOVContext* mov = (MOVContext *) s->priv_data;
MOVStreamContext* sc; MOVStreamContext* sc;

@ -126,7 +126,7 @@ static int raw_read_close(AVFormatContext *s)
} }
int pcm_read_seek(AVFormatContext *s, int pcm_read_seek(AVFormatContext *s,
int stream_index, int64_t timestamp) int stream_index, int64_t timestamp, int flags)
{ {
AVStream *st; AVStream *st;
int block_align, byte_rate; int block_align, byte_rate;
@ -158,8 +158,11 @@ int pcm_read_seek(AVFormatContext *s,
return -1; return -1;
/* compute the position by aligning it to block_align */ /* compute the position by aligning it to block_align */
pos = av_rescale(timestamp * byte_rate, st->time_base.num, st->time_base.den); pos = av_rescale_rnd(timestamp * byte_rate,
pos = (pos / block_align) * block_align; st->time_base.num,
st->time_base.den * (int64_t)block_align,
(flags & AVSEEK_FLAG_BACKWARD) ? AV_ROUND_DOWN : AV_ROUND_UP);
pos *= block_align;
/* recompute exact position */ /* recompute exact position */
st->cur_dts = av_rescale(pos, st->time_base.den, byte_rate * (int64_t)st->time_base.num); st->cur_dts = av_rescale(pos, st->time_base.den, byte_rate * (int64_t)st->time_base.num);

@ -1111,7 +1111,7 @@ static int rtsp_read_pause(AVFormatContext *s)
} }
static int rtsp_read_seek(AVFormatContext *s, int stream_index, static int rtsp_read_seek(AVFormatContext *s, int stream_index,
int64_t timestamp) int64_t timestamp, int flags)
{ {
RTSPState *rt = s->priv_data; RTSPState *rt = s->priv_data;

@ -344,7 +344,7 @@ static int wav_read_close(AVFormatContext *s)
} }
static int wav_read_seek(AVFormatContext *s, static int wav_read_seek(AVFormatContext *s,
int stream_index, int64_t timestamp) int stream_index, int64_t timestamp, int flags)
{ {
AVStream *st; AVStream *st;
@ -359,7 +359,7 @@ static int wav_read_seek(AVFormatContext *s,
default: default:
break; break;
} }
return pcm_read_seek(s, stream_index, timestamp); return pcm_read_seek(s, stream_index, timestamp, flags);
} }

Loading…
Cancel
Save