On Tue, Nov 11, 2014 at 11:41:53PM +0900, TOYAMA Shin-ichi wrote: > Nicolas George wrote in <20141110140122.ga22...@phare.normalesup.org> > >Thanks for the patch. See comments below. > > O.K. I've finished to revise the patch. > Please see attached. > > >The update for the documentation is missing. > > Added short description to doc/decoders.texi. > > >> + if (strncmp(p, "ifo:", 4) == 0) { > > > >This can be discussed, but I would prefer having a separate -ifo_file > >option. > > I agree. Separated to -use_ifo_palette option. > > Hendrik Leppkes wrote in > <ca+anqdwl+q+y9ve_vgmbnaks3w8lbtaazqetvjpeoqfsxwi...@mail.gmail.com> > >We have conversion macros for those, see yuv_a_to_rgba at the beginning of > >the same file. > >In fact, if you just read all the YCbCr stuff into a fixed-size buffer > >first, you might even be able to use the same function for the entire > >conversion. > > Thanks! Those macros worked fine in my function. > > -- > TOYAMA Shin-ichi mailto:sh...@wmail.plala.or.jp
> doc/decoders.texi | 3 ++ > libavcodec/dvdsubdec.c | 54 > +++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 57 insertions(+) > 49de4f371beafc9e48cf5f386096b673777d87b0 > 0001-New-option-for-obtaining-global-palette-from-.IFO-file.patch > From 09d6fe89be1815fec7a71f355ded46a1b40d0ade Mon Sep 17 00:00:00 2001 > From: Shin-ichi Toyama <sh...@wmail.plala.or.jp> > Date: Tue, 11 Nov 2014 23:02:10 +0900 > Subject: [PATCH] New option for obtaining global palette from .IFO file > > --- > doc/decoders.texi | 3 +++ > libavcodec/dvdsubdec.c | 54 > ++++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 57 insertions(+) > > diff --git a/doc/decoders.texi b/doc/decoders.texi > index ae20cea..02ff475 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}. > > +@item use_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..5981c37 100644 > --- a/libavcodec/dvdsubdec.c > +++ b/libavcodec/dvdsubdec.c > @@ -28,12 +28,14 @@ > #include "libavutil/opt.h" > #include "libavutil/imgutils.h" > #include "libavutil/avstring.h" > +#include "libavutil/bswap.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 +585,55 @@ static void parse_palette(DVDSubContext *ctx, char *p) > } > } > > +static void parse_ifo_palette(DVDSubContext *ctx, char *p) > +{ > + FILE *in; > + char ifostr[12]; > + uint32_t sp_pgci, pgci, off_pgc, pgc; > + uint8_t yuv[16][4], r, g, b; > + int i, y, cb, cr; > + int r_add, g_add, b_add; > + const uint8_t *cm = ff_crop_tab + MAX_NEG_CROP; > + > + ctx->has_palette = 0; > + if ((in = fopen(p, "r")) == NULL) { why does this not use avio_open2() ? this would permit to also use ifo files in other locations than local files > + av_log(NULL, AV_LOG_WARNING, "[dvdsubdec.c] Failed to open IFO file > \"%s\": %s\n", p, strerror(errno)); > + return; > + } > + fread(ifostr, 12, 1, in); > + if (strncmp (ifostr, "DVDVIDEO-VTS", 12) != 0){ > + av_log(NULL, AV_LOG_WARNING, "[dvdsubdec.c] \"%s\" is not a proper > IFO file\n", p); > + return; > + } > + fseek(in, 0xCC, SEEK_SET); > + if (fread(&sp_pgci, 4, 1, in) == 1) { > + pgci = av_be2ne32(sp_pgci) * 2048; > + fprintf(stderr, "position of off_pgc = %d\n", pgci + 0x0C); should use av_log() > + fseek(in, pgci + 0x0C, SEEK_SET); > + if (fread(&off_pgc, 4, 1, in) == 1) { > + pgc = pgci + av_be2ne32(off_pgc); > + fprintf(stderr, "palette position = %d\n", pgc + 0xA4); > + fseek(in, pgc + 0xA4, SEEK_SET); > + if (fread(yuv, sizeof(yuv), 1, in) == 1){ > + ctx->has_palette = 1; > + for(i=0;i<16;i++) { > + y = yuv[i][1]; > + cr = yuv[i][2]; > + cb = yuv[i][3]; > + YUV_TO_RGB1_CCIR(cb, cr); > + YUV_TO_RGB2_CCIR(r, g, b, y); > + ctx->palette[i] = (r << 16) + (g << 8) + b; > + } > + } > + } > + } > + if (ctx->has_palette == 0) { > + av_log(NULL, AV_LOG_WARNING, "[dvdsubdec.c] Failed to read palette > from IFO file \"%s\"\n", p); > + } > + fclose(in); > + return; > +} > + > static int dvdsub_parse_extradata(AVCodecContext *avctx) > { > DVDSubContext *ctx = (DVDSubContext*) avctx->priv_data; > @@ -631,6 +682,8 @@ static av_cold int dvdsub_init(AVCodecContext *avctx) > if ((ret = dvdsub_parse_extradata(avctx)) < 0) > return ret; > > + if (ctx->ifo_str) > + parse_ifo_palette(ctx, ctx->ifo_str); > if (ctx->palette_str) > parse_palette(ctx, ctx->palette_str); > if (ctx->has_palette) { > @@ -656,6 +709,7 @@ static av_cold int dvdsub_close(AVCodecContext *avctx) > #define SD AV_OPT_FLAG_SUBTITLE_PARAM | AV_OPT_FLAG_DECODING_PARAM > static const AVOption options[] = { > { "palette", "set the global palette", OFFSET(palette_str), > AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, SD }, > + { "use_ifo_palette", "obtain the global palette from .IFO file", > OFFSET(ifo_str), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, SD }, > { "forced_subs_only", "Only show forced subtitles", > OFFSET(forced_subs_only), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, SD}, > { NULL } > }; > -- > 1.8.1.msysgit.1 > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB If you think the mosad wants you dead since a long time then you are either wrong or dead since a long time.
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel