[FFmpeg-devel] [PATCH] Enables parsing DVD color palette directly from IFO file

Michael Niedermayer michaelni at gmx.at
Fri Nov 14 21:32:51 CET 2014


On Sat, Nov 15, 2014 at 02:25:48AM +0900, TOYAMA Shin-ichi wrote:
> Thanks for many comments.
> Attached is the forth try.
> Please review it.
> 
> -- 
> TOYAMA Shin-ichi mailto:shin1 at wmail.plala.or.jp

>  doc/decoders.texi      |    3 ++
>  libavcodec/dvdsubdec.c |   58 +++++++++++++++++++++++++++++++++++++++++++++++++
>  libavcodec/version.h   |    2 -
>  3 files changed, 62 insertions(+), 1 deletion(-)
> 6d350bb26b48ed7c79071cd920e6358d44928961  0001-New-option-for-obtaining-global-palette-from-.IFO-fi.patch
> From ed95a453997bee9557f6af852c9b81f9f8c426f8 Mon Sep 17 00:00:00 2001
> From: Shin-ichi Toyama <shin1 at wmail.plala.or.jp>
> Date: Sat, 15 Nov 2014 02:15:57 +0900
> Subject: [PATCH] New option for obtaining global palette from .IFO file
> 
> ---
>  doc/decoders.texi      |  3 +++
>  libavcodec/dvdsubdec.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  libavcodec/version.h   |  2 +-
>  3 files changed, 62 insertions(+), 1 deletion(-)
> 
> diff --git a/doc/decoders.texi b/doc/decoders.texi
> index ae20cea..d01c4d1 100644
> --- a/doc/decoders.texi
> +++ b/doc/decoders.texi
> @@ -191,6 +191,9 @@ numbers (without 0x prefix) separated by comas, for example @code{0d00ee,
>  ee450d, 101010, eaeaea, 0ce60b, ec14ed, ebff0b, 0d617a, 7b7b7b, d1d1d1,
>  7b2a0e, 0d950c, 0f007b, cf0dec, cfa80c, 7c127b}.
>  
> + at item ifo_palette
> +Specify the the IFO file from which the global palette is obtained.
> +
>  @item forced_subs_only
>  Only decode subtitle entries marked as forced. Some titles have forced
>  and non-forced subtitles in the same track. Setting this flag to @code{1}
> diff --git a/libavcodec/dvdsubdec.c b/libavcodec/dvdsubdec.c
> index bb28d9e..b96a5e0 100644
> --- a/libavcodec/dvdsubdec.c
> +++ b/libavcodec/dvdsubdec.c
> @@ -28,12 +28,15 @@
>  #include "libavutil/opt.h"
>  #include "libavutil/imgutils.h"
>  #include "libavutil/avstring.h"
> +#include "libavutil/bswap.h"
> +#include "libavformat/avio.h"
>  
>  typedef struct DVDSubContext
>  {
>    AVClass *class;
>    uint32_t palette[16];
>    char    *palette_str;
> +  char    *ifo_str;
>    int      has_palette;
>    uint8_t  colormap[4];
>    uint8_t  alpha[256];
> @@ -583,6 +586,58 @@ static void parse_palette(DVDSubContext *ctx, char *p)
>      }
>  }
>  
> +static int parse_ifo_palette(DVDSubContext *ctx, char *p)
> +{
> +    AVIOContext *ifo = NULL;
> +    char ifostr[12];
> +    uint32_t sp_pgci, pgci, off_pgc, pgc;
> +    uint8_t r, g, b, yuv[65], *buf;
> +    int i, y, cb, cr, r_add, g_add, b_add;
> +    int ret = 0;
> +    const uint8_t *cm = ff_crop_tab + MAX_NEG_CROP;
> +
> +    ctx->has_palette = 0;
> +    ret = avio_open2(&ifo, p, AVIO_FLAG_READ, NULL, NULL);

libavcodec does not depend on libavformat, thus libavcodec cannot
use avio_* directly. I should have realized/mentioned this when
suggesting avio

libavformat OTOH could read the IFO file with avio_open2/avio_read
into extradata or some newly added ifo specific side data
and dvdsubdec.c could then parse the palette out of that.

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

No snowflake in an avalanche ever feels responsible. -- Voltaire
-------------- 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/20141114/2d77704f/attachment.asc>


More information about the ffmpeg-devel mailing list