mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-02-09 16:19:35 +00:00
100l (forgoten seeking functions)
Originally committed as revision 3585 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
b1d041c15c
commit
7b3c1382bf
@ -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…
Reference in New Issue
Block a user