[FFmpeg-devel] [PATCH 1/2] allow passing subtitles header between decoder and encoder

Michael Niedermayer michaelni
Tue Oct 19 15:43:52 CEST 2010


On Sat, Oct 16, 2010 at 05:31:26PM +0200, Aurelien Jacobs wrote:
> ---
>  ffmpeg.c             |   11 +++++++++++
>  libavcodec/avcodec.h |    8 ++++++++
>  libavcodec/utils.c   |    2 ++
>  libavformat/utils.c  |    4 ++++
>  4 files changed, 25 insertions(+), 0 deletions(-)
> 
> diff --git a/ffmpeg.c b/ffmpeg.c
> index 4f59b2e..7622ccc 100644
> --- a/ffmpeg.c
> +++ b/ffmpeg.c
> @@ -2365,6 +2365,7 @@ static int transcode(AVFormatContext **output_files,
>          ost = ost_table[i];
>          if (ost->encoding_needed) {
>              AVCodec *codec = i < nb_output_codecs ? output_codecs[i] : NULL;
> +            AVCodecContext *dec = ist_table[ost->source_index]->st->codec;
>              if (!codec)
>                  codec = avcodec_find_encoder(ost->st->codec->codec_id);
>              if (!codec) {
> @@ -2373,6 +2374,15 @@ static int transcode(AVFormatContext **output_files,
>                  ret = AVERROR(EINVAL);
>                  goto dump_format;
>              }
> +            if (dec->subtitle_header) {
> +                ost->st->codec->subtitle_header = av_malloc(dec->subtitle_header_size);
> +                if (!ost->st->codec->subtitle_header) {
> +                    ret = AVERROR(ENOMEM);
> +                    goto dump_format;
> +                }
> +                memcpy(ost->st->codec->subtitle_header, dec->subtitle_header, dec->subtitle_header_size);
> +                ost->st->codec->subtitle_header_size = dec->subtitle_header_size;
> +            }
>              if (avcodec_open(ost->st->codec, codec) < 0) {
>                  snprintf(error, sizeof(error), "Error while opening encoder for output stream #%d.%d - maybe incorrect parameters such as bit_rate, rate, width or height",
>                          ost->file_index, ost->index);
> @@ -2728,6 +2738,7 @@ static int transcode(AVFormatContext **output_files,
>                  }
>                  av_fifo_free(ost->fifo); /* works even if fifo is not
>                                               initialized but set to zero */
> +                av_freep(&ost->st->codec->subtitle_header);
>                  av_free(ost->pict_tmp.data[0]);
>                  if (ost->video_resample)
>                      sws_freeContext(ost->img_resample_ctx);
> diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
> index 4bddbaa..ab3cbd9 100644
> --- a/libavcodec/avcodec.h
> +++ b/libavcodec/avcodec.h
> @@ -2744,6 +2744,14 @@ typedef struct AVCodecContext {
>       * - decoding: unused
>       */
>      int lpc_passes;
> +
> +    /**
> +     * Header containing style information for text subtitles.
> +     * - encoding: Set/allocated/freed by user (before avcodec_open())
> +     * - decoding: Set/allocated/freed by libavcodec (by avcodec_open())
> +     */
> +    uint8_t *subtitle_header;
> +    int subtitle_header_size;
>  } AVCodecContext;
>  
>  /**

The description should be enough to implement a decoder and a user app and
a subtitle renderer based on it. (some common sense and guessing not excluded)
but this seems too terse for that

also are you sure every subtitle decoder will be able to set this by
avcodec_open() ?

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

It is not what we do, but why we do it that matters.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20101019/8bdae729/attachment.pgp>



More information about the ffmpeg-devel mailing list