libbluray | branch: master | hpi1 <[email protected]> | Wed Jun 12 11:34:10 2013 +0300| [7809c25c95413580a94ee175b468b9bdad8eea09] | committer: hpi1
Parse TextST stream font info from .clpi files > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=7809c25c95413580a94ee175b468b9bdad8eea09 --- src/examples/clpi_dump.c | 14 ++++++++++++-- src/libbluray/bdnav/clpi_data.h | 16 ++++++++++++++++ src/libbluray/bdnav/clpi_parse.c | 25 ++++++++++++++++++++++++- src/libbluray/bdnav/mpls_parse.h | 1 + 4 files changed, 53 insertions(+), 3 deletions(-) diff --git a/src/examples/clpi_dump.c b/src/examples/clpi_dump.c index ebc4e74..e0d45d1 100644 --- a/src/examples/clpi_dump.c +++ b/src/examples/clpi_dump.c @@ -1,6 +1,7 @@ /* * This file is part of libbluray * Copyright (C) 2009-2010 John Stebbins + * Copyright (C) 2012-2013 Petri Hintukainen <[email protected]> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -195,8 +196,9 @@ _show_stream(CLPI_PROG_STREAM *ss, int level) } static void -_show_clip_info(CLPI_CLIP_INFO *ci, int level) +_show_clip_info(CLPI_CL *cl, int level) { + CLPI_CLIP_INFO *ci = &cl->clip; int ii; indent_printf(level, "Clip Info"); @@ -218,6 +220,14 @@ _show_clip_info(CLPI_CLIP_INFO *ci, int level) indent_printf(level+2, "File Id %s", ci->atc_delta[ii].file_id); indent_printf(level+2, "File Code %s", ci->atc_delta[ii].file_code); } + // show fonts + if (cl->font_info.font_count) { + indent_printf(level+1, "Font files"); + for (ii = 0; ii < cl->font_info.font_count; ii++) { + indent_printf(level+2, "Font file %d: %s.otf", ii+1, cl->font_info.font[ii].file_id); + } + } + printf("\n"); } @@ -435,7 +445,7 @@ main(int argc, char *argv[]) } if (opt_clip_info) { // Show clip info - _show_clip_info(&cl->clip, 1); + _show_clip_info(cl, 1); } if (opt_seq_info) { // Show sequence info diff --git a/src/libbluray/bdnav/clpi_data.h b/src/libbluray/bdnav/clpi_data.h index 25f32b6..e3fc4c8 100644 --- a/src/libbluray/bdnav/clpi_data.h +++ b/src/libbluray/bdnav/clpi_data.h @@ -1,6 +1,7 @@ /* * This file is part of libbluray * Copyright (C) 2009-2010 John Stebbins + * Copyright (C) 2012-2013 Petri Hintukainen <[email protected]> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -57,6 +58,15 @@ typedef struct uint8_t file_code[5]; } CLPI_ATC_DELTA; +typedef struct { + uint8_t file_id[6]; +} CLPI_FONT; + +typedef struct { + uint8_t font_count; + CLPI_FONT *font; +} CLPI_FONT_INFO; + typedef struct { uint8_t clip_stream_type; @@ -67,6 +77,10 @@ typedef struct CLPI_TS_TYPE ts_type_info; uint8_t atc_delta_count; CLPI_ATC_DELTA *atc_delta; + + /* breaks ABI if added here ... + CLPI_FONT_INFO font_info; + */ } CLPI_CLIP_INFO; typedef struct @@ -156,6 +170,8 @@ typedef struct clpi_cl { CLPI_PROG_INFO program_ss; CLPI_CPI cpi_ss; + /* Text subtitle stream font files */ + CLPI_FONT_INFO font_info; } CLPI_CL; #endif // _CLPI_DATA_H_ diff --git a/src/libbluray/bdnav/clpi_parse.c b/src/libbluray/bdnav/clpi_parse.c index 5cbb788..b8e956d 100644 --- a/src/libbluray/bdnav/clpi_parse.c +++ b/src/libbluray/bdnav/clpi_parse.c @@ -1,6 +1,7 @@ /* * This file is part of libbluray * Copyright (C) 2009-2010 John Stebbins + * Copyright (C) 2012-2013 Petri Hintukainen <[email protected]> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -184,6 +185,21 @@ _parse_clipinfo(BITSTREAM *bits, CLPI_CL *cl) bs_skip(bits, 8); } } + + // font info + if (cl->clip.application_type == 6 /* Sub TS for a sub-path of Text subtitle */) { + bs_skip(bits, 8); + cl->font_info.font_count = bs_read(bits, 8); + if (cl->font_info.font_count) { + cl->font_info.font = malloc(cl->font_info.font_count * sizeof(CLPI_FONT)); + for (ii = 0; ii < cl->font_info.font_count; ii++) { + bs_read_bytes(bits, cl->font_info.font[ii].file_id, 5); + cl->font_info.font[ii].file_id[5] = '\0'; + bs_skip(bits, 8); + } + } + } + return 1; } @@ -642,6 +658,8 @@ clpi_free(CLPI_CL *cl) _clean_program(&cl->program_ss); _clean_cpi(&cl->cpi_ss); + X_FREE(cl->font_info.font); + X_FREE(cl); } @@ -732,7 +750,6 @@ clpi_copy(const CLPI_CL* src_cl) if (src_cl) { dest_cl = (CLPI_CL*) calloc(1, sizeof(CLPI_CL)); - dest_cl->clip.clip_stream_type = src_cl->clip.clip_stream_type; dest_cl->clip.application_type = src_cl->clip.application_type; dest_cl->clip.is_atc_delta = src_cl->clip.is_atc_delta; @@ -805,6 +822,12 @@ clpi_copy(const CLPI_CL* src_cl) dest_cl->cpi.entry[ii].fine[jj].spn_ep = src_cl->cpi.entry[ii].fine[jj].spn_ep; } } + + dest_cl->font_info.font_count = src_cl->font_info.font_count; + if (dest_cl->font_info.font_count) { + dest_cl->font_info.font = malloc(dest_cl->font_info.font_count * sizeof(CLPI_FONT)); + memcpy(dest_cl->font_info.font, src_cl->font_info.font, dest_cl->font_info.font_count * sizeof(CLPI_FONT)); + } } return dest_cl; diff --git a/src/libbluray/bdnav/mpls_parse.h b/src/libbluray/bdnav/mpls_parse.h index cff1081..ac65edd 100644 --- a/src/libbluray/bdnav/mpls_parse.h +++ b/src/libbluray/bdnav/mpls_parse.h @@ -1,6 +1,7 @@ /* * This file is part of libbluray * Copyright (C) 2009-2010 John Stebbins + * Copyright (C) 2012 Petri Hintukainen <[email protected]> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public _______________________________________________ libbluray-devel mailing list [email protected] http://mailman.videolan.org/listinfo/libbluray-devel
