[FFmpeg-devel] [PATCH 7/8] add seeking support in ASS demuxer
Michael Niedermayer
michaelni
Thu Jul 29 04:02:49 CEST 2010
On Wed, Jul 21, 2010 at 11:53:22AM +0200, Aurelien Jacobs wrote:
>
> ---
> libavformat/assdec.c | 37 ++++++++++++++++++++++++++++++++++++-
> 1 files changed, 36 insertions(+), 1 deletions(-)
i realize we have noone in MAINTAINERS for this so i guess i have to ...
>
> diff --git a/libavformat/assdec.c b/libavformat/assdec.c
> index ff1009c..a87f84b 100644
> --- a/libavformat/assdec.c
> +++ b/libavformat/assdec.c
> @@ -162,6 +162,41 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt)
> return 0;
> }
>
> +static int read_seek2(AVFormatContext *s, int stream_index,
> + int64_t min_ts, int64_t ts, int64_t max_ts, int flags)
> +{
> + ASSContext *ass = s->priv_data;
> +
> + if (flags & AVSEEK_FLAG_BYTE) {
> + return AVERROR_NOTSUPP;
> + } else if (flags & AVSEEK_FLAG_FRAME) {
> + if (ts < 0 || ts >= ass->event_count)
> + return AVERROR(ERANGE);
> + ass->event_index = ts;
> + } else {
> + int i, idx = -1;
> + int64_t min_ts_diff = INT64_MAX;
> + if (stream_index == -1) {
> + AVRational time_base = s->streams[0]->time_base;
> + ts = av_rescale_q( ts, AV_TIME_BASE_Q, time_base);
> + min_ts = av_rescale_q(min_ts, AV_TIME_BASE_Q, time_base);
> + max_ts = av_rescale_q(max_ts, AV_TIME_BASE_Q, time_base);
these strictly need to round up and down so the min/max is strictly correct
> + }
> + for (i=0; i<ass->event_count; i++) {
if the events are sorted then a search either starting from the previous
point and going both ways or a binary search could be done and would be
a bit faster for really huge subtitle files.
this doesnt need to be done before commiting this, its just an idea/note
ok otherwise if tested
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
Into a blind darkness they enter who follow after the Ignorance,
they as if into a greater darkness enter who devote themselves
to the Knowledge alone. -- Isha Upanishad
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 190 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20100729/60042a3f/attachment.pgp>
More information about the ffmpeg-devel
mailing list