On Wed, 3 Sep 2014 00:03:04 +0200 Clément Bœsch <u...@pkh.me> wrote:
> On Tue, Sep 02, 2014 at 08:56:11PM +0200, wm4 wrote: > > ff_smil_extract_next_chunk() is still used by RealText. > > --- > > libavformat/samidec.c | 17 ++++++++++------- > > libavformat/subtitles.c | 15 ++++++++++++--- > > libavformat/subtitles.h | 5 +++++ > > 3 files changed, 27 insertions(+), 10 deletions(-) > > > > diff --git a/libavformat/samidec.c b/libavformat/samidec.c > > index 1a12eca..4dbf2cf 100644 > > --- a/libavformat/samidec.c > > +++ b/libavformat/samidec.c > > @@ -38,11 +38,12 @@ typedef struct { > > > > static int sami_probe(AVProbeData *p) > > { > > - const unsigned char *ptr = p->buf; > > + char buf[6]; > > + FFTextReader tr; > > + ff_text_init_buf(&tr, p->buf, p->buf_size); > > + ff_text_read(&tr, buf, sizeof(buf)); > > > > - if (AV_RB24(ptr) == 0xEFBBBF) > > - ptr += 3; /* skip UTF-8 BOM */ > > - return !strncmp(ptr, "<SAMI>", 6) ? AVPROBE_SCORE_MAX : 0; > > + return !strncmp(buf, "<SAMI>", 6) ? AVPROBE_SCORE_MAX : 0; > > } > > > > static int sami_read_header(AVFormatContext *s) > > @@ -52,6 +53,8 @@ static int sami_read_header(AVFormatContext *s) > > AVBPrint buf, hdr_buf; > > char c = 0; > > int res = 0, got_first_sync_point = 0; > > + FFTextReader tr; > > + ff_text_init_avio(&tr, s->pb); > > > > if (!st) > > return AVERROR(ENOMEM); > > @@ -62,10 +65,10 @@ static int sami_read_header(AVFormatContext *s) > > av_bprint_init(&buf, 0, AV_BPRINT_SIZE_UNLIMITED); > > av_bprint_init(&hdr_buf, 0, AV_BPRINT_SIZE_UNLIMITED); > > > > - while (!avio_feof(s->pb)) { > > + while (!ff_text_eof(&tr)) { > > AVPacket *sub; > > - const int64_t pos = avio_tell(s->pb) - (c != 0); > > - int is_sync, n = ff_smil_extract_next_chunk(s->pb, &buf, &c); > > + const int64_t pos = ff_text_pos(&tr) - (c != 0); > > + int is_sync, n = ff_smil_extract_next_text_chunk(&tr, &buf, &c); > > > > if (n == 0) > > break; > > diff --git a/libavformat/subtitles.c b/libavformat/subtitles.c > > index 1641aae..b8b680e 100644 > > --- a/libavformat/subtitles.c > > +++ b/libavformat/subtitles.c > > @@ -272,20 +272,20 @@ void ff_subtitles_queue_clean(FFDemuxSubtitlesQueue > > *q) > > q->nb_subs = q->allocated_size = q->current_sub_idx = 0; > > } > > > > -int ff_smil_extract_next_chunk(AVIOContext *pb, AVBPrint *buf, char *c) > > +int ff_smil_extract_next_text_chunk(FFTextReader *tr, AVBPrint *buf, char > > *c) > > { > > int i = 0; > > char end_chr; > > > > if (!*c) // cached char? > > - *c = avio_r8(pb); > > + *c = ff_text_r8(tr); > > if (!*c) > > return 0; > > > > end_chr = *c == '<' ? '>' : '<'; > > do { > > av_bprint_chars(buf, *c, 1); > > - *c = avio_r8(pb); > > + *c = ff_text_r8(tr); > > i++; > > } while (*c != end_chr && *c); > > if (end_chr == '>') { > > @@ -295,6 +295,15 @@ int ff_smil_extract_next_chunk(AVIOContext *pb, > > AVBPrint *buf, char *c) > > return i; > > } > > > > > +int ff_smil_extract_next_chunk(AVIOContext *pb, AVBPrint *buf, char *c) > > +{ > > + FFTextReader tr; > > + tr.buf_pos = tr.buf_len = 0; > > + tr.type = 0; > > + tr.pb = pb; > > + return ff_smil_extract_next_text_chunk(&tr, buf, c); > > How can this work with utf-16? Aren't you supposed to use the type > obtained after the ff_text_init_avio() in sami_read_header() or something > along those lines? This is just for "compatibility" with RealText, and is actually removed with the next patch (only reason why I did RealText). Sami in this patch uses the "new" function. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel