[FFmpeg-devel] [PATCH 4/4] avformat/realtextdec: UTF-16 support

Clément Bœsch u at pkh.me
Wed Sep 3 00:05:49 CEST 2014


On Tue, Sep 02, 2014 at 08:56:12PM +0200, wm4 wrote:
> Also remove ff_smil_extract_next_chunk - this was the last user of it.
> ---
>  libavformat/realtextdec.c | 17 ++++++++++-------
>  libavformat/subtitles.c   |  9 ---------
>  libavformat/subtitles.h   |  5 -----
>  3 files changed, 10 insertions(+), 21 deletions(-)
> 
> diff --git a/libavformat/realtextdec.c b/libavformat/realtextdec.c
> index e1225d5..19af108 100644
> --- a/libavformat/realtextdec.c
> +++ b/libavformat/realtextdec.c
> @@ -37,11 +37,12 @@ typedef struct {
>  
>  static int realtext_probe(AVProbeData *p)
>  {
> -    const unsigned char *ptr = p->buf;
> +    char buf[7];
> +    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 !av_strncasecmp(ptr, "<window", 7) ? AVPROBE_SCORE_EXTENSION : 0;
> +    return !av_strncasecmp(buf, "<window", 7) ? AVPROBE_SCORE_EXTENSION : 0;
>  }
>  
>  static int read_ts(const char *s)
> @@ -63,6 +64,8 @@ static int realtext_read_header(AVFormatContext *s)
>      AVBPrint buf;
>      char c = 0;
>      int res = 0, duration = read_ts("60"); // default duration is 60 seconds
> +    FFTextReader tr;
> +    ff_text_init_avio(&tr, s->pb);
>  
>      if (!st)
>          return AVERROR(ENOMEM);
> @@ -72,10 +75,10 @@ static int realtext_read_header(AVFormatContext *s)
>  
>      av_bprint_init(&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 n = ff_smil_extract_next_chunk(s->pb, &buf, &c);
> +        const int64_t pos = ff_text_pos(&tr) - (c != 0);
> +        int 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 b8b680e..c481ce9 100644
> --- a/libavformat/subtitles.c
> +++ b/libavformat/subtitles.c
> @@ -295,15 +295,6 @@ int ff_smil_extract_next_text_chunk(FFTextReader *tr, 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);
> -}
> -
>  const char *ff_smil_get_attr_ptr(const char *s, const char *attr)
>  {
>      int in_quotes = 0;
> diff --git a/libavformat/subtitles.h b/libavformat/subtitles.h
> index 33dd0d0..28a10f6 100644
> --- a/libavformat/subtitles.h
> +++ b/libavformat/subtitles.h
> @@ -140,11 +140,6 @@ void ff_subtitles_queue_clean(FFDemuxSubtitlesQueue *q);
>   *
>   * @param c cached character, to avoid a backward seek
>   */
> -int ff_smil_extract_next_chunk(AVIOContext *pb, AVBPrint *buf, char *c);
> -
> -/**
> - * As ff_smil_extract_next_chunk(), but with FFTextReader.
> - */
>  int ff_smil_extract_next_text_chunk(FFTextReader *tr, AVBPrint *buf, char *c);
>  
>  /**

Sexy :)

LGTM if it works

-- 
Clément B.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 473 bytes
Desc: not available
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20140903/e15c2f7d/attachment.asc>


More information about the ffmpeg-devel mailing list