[FFmpeg-devel] SCTE-35 development

Michael Niedermayer michaelni at gmx.at
Tue Dec 30 21:44:28 CET 2014


On Wed, Dec 31, 2014 at 01:35:59AM +0530, Anshul wrote:
> On 12/30/2014 10:06 PM, Michael Niedermayer wrote:
> > On Tue, Dec 30, 2014 at 07:39:38PM +0530, Anshul wrote:
> >> On 12/30/2014 03:56 PM, Clément Bœsch wrote:
> >>> They are also probably useless since you can use av_asprintf() directly.
> >>>
> >> Thanks I didn't knew about that function.
> >>
> >>
> >> Attached new patch with removing those function.
> > [...]
> >> --- a/libavcodec/allcodecs.c
> >> +++ b/libavcodec/allcodecs.c
> >> @@ -536,6 +536,8 @@ void avcodec_register_all(void)
> >>      REGISTER_ENCODER(LIBAACPLUS,        libaacplus);
> >>  
> >>      /* text */
> >> +    REGISTER_DECODER(SCTE_35,           scte_35)
> >> +    REGISTER_ENCODER(CUE_XML,           cue_xml);
> > you are missing a ; here
> >
> done
> >
> >>      REGISTER_DECODER(BINTEXT,           bintext);
> >>      REGISTER_DECODER(XBIN,              xbin);
> >>      REGISTER_DECODER(IDF,               idf);
> >> diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
> >> index 99467bb..bd966d5 100644
> >> --- a/libavcodec/avcodec.h
> >> +++ b/libavcodec/avcodec.h
> >> @@ -523,6 +523,8 @@ enum AVCodecID {
> >>      /* other specific kind of codecs (generally used for attachments) */
> >>      AV_CODEC_ID_FIRST_UNKNOWN = 0x18000,           ///< A dummy ID pointing at the start of various fake codecs.
> >>      AV_CODEC_ID_TTF = 0x18000,
> >> +    AV_CODEC_ID_SCTE_35    = MKBETAG('C','U','E','I'),
> >> +    AV_CODEC_ID_CUE_XML    = MKBETAG('C','U','E','X'),
> >>      AV_CODEC_ID_BINTEXT    = MKBETAG('B','T','X','T'),
> >>      AV_CODEC_ID_XBIN       = MKBETAG('X','B','I','N'),
> >>      AV_CODEC_ID_IDF        = MKBETAG( 0 ,'I','D','F'),
> >> @@ -3157,6 +3159,13 @@ typedef struct AVCodecDefault AVCodecDefault;
> >>  
> >>  struct AVSubtitle;
> >>  
> >> +typedef struct AVData {
> >> +    void *data;
> >> +    int len;
> >> +    int ref_count;
> >> +    int valid;
> >> +} AVData;
> > missing documentation
> removed all of it. used AVBuffer instead
> >
> >> +
> >>  /**
> >>   * AVCodec.
> >>   */
> >> @@ -3233,6 +3242,8 @@ typedef struct AVCodec {
> >>      int (*init)(AVCodecContext *);
> >>      int (*encode_sub)(AVCodecContext *, uint8_t *buf, int buf_size,
> >>                        const struct AVSubtitle *sub);
> >> +     int (*encode_data)(AVCodecContext *avctx, const AVData *input, AVData *output,
> >> +                            enum AVCodecID in_codec_id);
> >>      /**
> >>       * Encode data to an AVPacket.
> >>       *
> >> @@ -3246,6 +3257,7 @@ typedef struct AVCodec {
> >>      int (*encode2)(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame,
> >>                     int *got_packet_ptr);
> >>      int (*decode)(AVCodecContext *, void *outdata, int *outdata_size, AVPacket *avpkt);
> >> +    int (*decode_data)(AVCodecContext *,AVData *output, const AVPacket *avpkt);
> >>      int (*close)(AVCodecContext *);
> >>      /**
> >>       * Flush buffers.
> > this breaks ABI
> >
> add at end of structure, if that solve problem
> >
> >> @@ -4195,6 +4207,9 @@ int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub,
> >>                              int *got_sub_ptr,
> >>                              AVPacket *avpkt);
> >>  
> >> +int avcodec_decode_data(AVCodecContext *avctx,
> >> +                                              AVData *output,
> >> +                                              const AVPacket *avpkt);
> >>  /**
> >>   * @defgroup lavc_parsing Frame parsing
> >>   * @{
> >> @@ -4585,6 +4600,8 @@ int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt,
> >>  
> >>  int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size,
> >>                              const AVSubtitle *sub);
> >> +int avcodec_encode_data(AVCodecContext *avctx,const AVData *input, AVData *output,
> >> +                            enum AVCodecID in_codec_id);
> >>  
> >>  
> > this is missing documentation
> >
> added documentation
> > [...]
> >> diff --git a/libavcodec/scte_35.c b/libavcodec/scte_35.c
> >> new file mode 100644
> >> index 0000000..2723225
> >> --- /dev/null
> >> +++ b/libavcodec/scte_35.c
> >> @@ -0,0 +1,294 @@
> >> +/*
> >> + * SCTE 35 decoder
> >> + * Copyright (c) 2014 Anshul Maheshwaari
> >> + *
> >> + * This file is part of FFmpeg.
> >> + *
> >> + * FFmpeg is free software; you can redistribute it and/or
> >> + * modify it under the terms of the GNU Lesser General Public
> >> + * License as published by the Free Software Foundation; either
> >> + * version 2.1 of the License, or (at your option) any later version.
> >> + *
> >> + * FFmpeg is distributed in the hope that it will be useful,
> >> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> >> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> >> + * Lesser General Public License for more details.
> >> + *
> >> + * You should have received a copy of the GNU Lesser General Public
> >> + * License along with FFmpeg; if not, write to the Free Software
> >> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> >> + */
> > please add a reference to the spezification & exact revission used
> > to implement this
> >
> > [...]
> I have attached the document on trac, following is link to it.
> here is helper document on how to implement
> http://trac.ffmpeg.org/attachment/ticket/3356/SCTE%2067%202014.pdf
> here is a document What to implement
> http://trac.ffmpeg.org/attachment/ticket/3356/ANSI_SCTE%2035%202013.pdf

please add a reference in the source code to the spezification that
you used. Note you should not upload anything, you should not use
any URLs. Just a proper reference like
"This is based on this and that" or "This is an implementation of ..."
Such reference should contain the full title of the specification and
and any revissions and dates associated


> 
> To make it really usable I have to write some/one filters, which takes 2
> program stream
> and give one output program stream.
> Which will use data decoder output to analyse which stream it has to
> accept and
> which stream to be droped.
> 
> The Xml format that I have choosen, is made by me and Improvement or
> addition to
> it (comments) would be appriciated.
> 
> Attached new patch with review comments on irc from Tim_G about AVBuffer
> and doc related things.
> 
> -Anshul


>  ffmpeg.c                |   50 +++++++-
>  ffmpeg_opt.c            |    9 -
>  libavcodec/Makefile     |    2 
>  libavcodec/allcodecs.c  |    2 
>  libavcodec/avcodec.h    |   39 ++++++
>  libavcodec/codec_desc.c |   12 +
>  libavcodec/cue_xml.c    |  250 ++++++++++++++++++++++++++++++++++++++++
>  libavcodec/scte_35.c    |  298 ++++++++++++++++++++++++++++++++++++++++++++++++
>  libavcodec/scte_35.h    |   31 ++++
>  libavcodec/utils.c      |   33 ++++-
>  libavformat/avformat.h  |   16 ++
>  libavformat/mpegts.c    |   45 ++++++-
>  libavformat/utils.c     |    1 
>  13 files changed, 774 insertions(+), 14 deletions(-)
> 2410fa240726c375505826b320af4cd2a807c945  0001-handle-scte-35-message-cue-data-stream.patch
> From 4e95ec0923af73a07ae9bacb1f371f43be93ca61 Mon Sep 17 00:00:00 2001
> From: Anshul Maheshwari <anshul.ffmpeg at gmail.com>
> Date: Wed, 31 Dec 2014 01:23:20 +0530
> Subject: [PATCH] handle scte 35 message cue data stream
> 

missing signoff in the commit message


[...]
> diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
> index 99467bb..daa7448 100644
> --- a/libavcodec/avcodec.h
> +++ b/libavcodec/avcodec.h
> @@ -523,6 +523,8 @@ enum AVCodecID {
>      /* other specific kind of codecs (generally used for attachments) */
>      AV_CODEC_ID_FIRST_UNKNOWN = 0x18000,           ///< A dummy ID pointing at the start of various fake codecs.
>      AV_CODEC_ID_TTF = 0x18000,
> +    AV_CODEC_ID_SCTE_35    = MKBETAG('C','U','E','I'),
> +    AV_CODEC_ID_CUE_XML    = MKBETAG('C','U','E','X'),
>      AV_CODEC_ID_BINTEXT    = MKBETAG('B','T','X','T'),
>      AV_CODEC_ID_XBIN       = MKBETAG('X','B','I','N'),
>      AV_CODEC_ID_IDF        = MKBETAG( 0 ,'I','D','F'),

> @@ -3233,6 +3235,8 @@ typedef struct AVCodec {
>      int (*init)(AVCodecContext *);
>      int (*encode_sub)(AVCodecContext *, uint8_t *buf, int buf_size,
>                        const struct AVSubtitle *sub);
> +     int (*encode_data)(AVCodecContext *avctx, const AVBuffer *input, AVBuffer *output,
> +                            enum AVCodecID in_codec_id);
>      /**
>       * Encode data to an AVPacket.
>       *

breaks ABI
if someone reading this knows of a good introduction about ABI/API
compatibility and such stuff please reply, i think debian had a
guide but also something which described the "why" behind all the ABI
stuff could be usefull
id quote a link but i dunno a good introduction to that stuff


> @@ -3252,6 +3256,7 @@ typedef struct AVCodec {
>       * Will be called when seeking
>       */
>      void (*flush)(AVCodecContext *);
> +    int (*decode_data)(AVCodecContext *,AVBuffer *output, const AVPacket *avpkt);
>  } AVCodec;
>  
>  int av_codec_get_max_lowres(const AVCodec *codec);
> @@ -4196,6 +4201,20 @@ int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub,
>                              AVPacket *avpkt);
>  
>  /**
> + * Decode a subtitle message.

please use avcodec_decode_subtitle2() if thats the case
if not please try to read your patch before submission

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Concerning the gods, I have no means of knowing whether they exist or not
or of what sort they may be, because of the obscurity of the subject, and
the brevity of human life -- Protagoras
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20141230/71f7e2f5/attachment.asc>


More information about the ffmpeg-devel mailing list