[FFmpeg-devel] [PATCH] Use private option to specify WebVTT kind

Clément Bœsch ubitux at gmail.com
Mon Jun 17 23:51:21 CEST 2013


On Mon, Jun 17, 2013 at 03:20:27PM -0700, Matthew Heaney wrote:
> WebVTT subtitle tracks have four kinds. Certain downstream muxers
> (such as for WebM) need to know which WebVTT kind this is, in order to
> specify the codec id of the output track.
> 
> A new private input option, "-kind", has been added to the WebVTT
> demuxer.  It accepts as a value any of "subtitles" (the default),
> "captions", "descriptions", and "metadata".  The kind option value is
> used to assign a value to the stream disposition flag, to which four
> new values have been added, corresponding the four WebVTT kinds.
> ---
>  doc/APIchanges          |  3 +++
>  libavformat/avformat.h  |  7 ++++++
>  libavformat/version.h   |  2 +-
>  libavformat/webvttdec.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++
>  4 files changed, 68 insertions(+), 1 deletion(-)
> 
> diff --git a/doc/APIchanges b/doc/APIchanges
> index ffdb8a2..8fe1883 100644
> --- a/doc/APIchanges
> +++ b/doc/APIchanges
> @@ -16,6 +16,9 @@ libavutil:     2012-10-22
>  API changes, most recent first:
>  
>  
> +2013-06-xx - xxxxxxx - lavf 55.10.100 - avformat.h
> +  Add AV_DISPOSITION_* flags to indicate text track kind.
> +
>  2013-06-xx - xxxxxxx - lavu 52.36.100
>    Add AVRIPEMD:
>     av_ripemd_alloc()
> diff --git a/libavformat/avformat.h b/libavformat/avformat.h
> index 1d7ba45..bd911ec 100644
> --- a/libavformat/avformat.h
> +++ b/libavformat/avformat.h
> @@ -636,6 +636,13 @@ typedef struct AVIndexEntry {
>  #define AV_DISPOSITION_ATTACHED_PIC      0x0400
>  
>  /**
> + * To specify text track kind (different from subtitles default).
> + */
> +#define AV_DISPOSITION_CAPTIONS     0x10000
> +#define AV_DISPOSITION_DESCRIPTIONS 0x20000
> +#define AV_DISPOSITION_METADATA     0x40000
> +
> +/**
>   * Options for behavior on timestamp wrap detection.
>   */
>  #define AV_PTS_WRAP_IGNORE      0   ///< ignore the wrap
> diff --git a/libavformat/version.h b/libavformat/version.h
> index b2221d2..45932d4 100644
> --- a/libavformat/version.h
> +++ b/libavformat/version.h
> @@ -30,7 +30,7 @@
>  #include "libavutil/avutil.h"
>  
>  #define LIBAVFORMAT_VERSION_MAJOR 55
> -#define LIBAVFORMAT_VERSION_MINOR  9
> +#define LIBAVFORMAT_VERSION_MINOR 10
>  #define LIBAVFORMAT_VERSION_MICRO 100
>  
>  #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
> diff --git a/libavformat/webvttdec.c b/libavformat/webvttdec.c
> index 7d9910b..2335ca4 100644
> --- a/libavformat/webvttdec.c
> +++ b/libavformat/webvttdec.c
> @@ -29,9 +29,21 @@
>  #include "subtitles.h"
>  #include "libavutil/bprint.h"
>  #include "libavutil/intreadwrite.h"
> +#include "libavutil/opt.h"
> +
> +enum WebVTTKind {
> +    WEBVTT_KIND_FIRST = 0,
> +    WEBVTT_KIND_SUBTITLES = WEBVTT_KIND_FIRST,
> +    WEBVTT_KIND_CAPTIONS,
> +    WEBVTT_KIND_DESCRIPTIONS,
> +    WEBVTT_KIND_METADATA,
> +    WEBVTT_KIND_LAST = WEBVTT_KIND_METADATA
> +};
>  
>  typedef struct {
> +    const AVClass *class;
>      FFDemuxSubtitlesQueue q;
> +    enum WebVTTKind kind;
>  } WebVTTContext;
>  
>  static int webvtt_probe(AVProbeData *p)
> @@ -67,6 +79,21 @@ static int webvtt_read_header(AVFormatContext *s)
>      st->codec->codec_type = AVMEDIA_TYPE_SUBTITLE;
>      st->codec->codec_id   = AV_CODEC_ID_WEBVTT;
>  
> +    switch (webvtt->kind) {
> +    case WEBVTT_KIND_CAPTIONS:
> +      st->disposition |= AV_DISPOSITION_CAPTIONS;
> +      break;
> +    case WEBVTT_KIND_DESCRIPTIONS:
> +      st->disposition |= AV_DISPOSITION_DESCRIPTIONS;
> +      break;
> +    case WEBVTT_KIND_METADATA:
> +      st->disposition |= AV_DISPOSITION_METADATA;
> +      break;
> +    case WEBVTT_KIND_SUBTITLES:
> +    default:
> +        break;
> +    };
> +

Why not put directly AV_DISPOSITION_CAPTIONS in the const values of the
options and simply do st->disposition |= webvtt->kind?

[...]

-- 
Clément B.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 490 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20130617/53d5d3ea/attachment.asc>


More information about the ffmpeg-devel mailing list