git: ebf7717569bd - main - multimedia/aribb24: New port
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 15 Feb 2022 20:10:33 UTC
The branch main has been updated by driesm:
URL: https://cgit.FreeBSD.org/ports/commit/?id=ebf7717569bd2d8b467476265949f32a60e7469b
commit ebf7717569bd2d8b467476265949f32a60e7469b
Author: Dries Michiels <driesm@FreeBSD.org>
AuthorDate: 2021-12-22 16:37:48 +0000
Commit: Dries Michiels <driesm@FreeBSD.org>
CommitDate: 2022-02-15 20:10:06 +0000
multimedia/aribb24: New port
A library for ARIB STD-B24, decoding JIS 8 bit characters
and parsing MPEG-TS stream.
Reviewed by: 0mp, diizzy
Differential Revision: https://reviews.freebsd.org/D33618
---
multimedia/Makefile | 1 +
multimedia/aribb24/Makefile | 25 ++++++
multimedia/aribb24/distinfo | 3 +
.../aribb24/files/patch-src_aribb24__private.h | 16 ++++
multimedia/aribb24/files/patch-src_decoder.c | 89 ++++++++++++++++++++++
multimedia/aribb24/files/patch-src_drcs.c | 89 ++++++++++++++++++++++
multimedia/aribb24/files/patch-src_drcs.h | 11 +++
multimedia/aribb24/files/patch-src_parser.c | 85 +++++++++++++++++++++
multimedia/aribb24/pkg-descr | 4 +
multimedia/aribb24/pkg-plist | 11 +++
10 files changed, 334 insertions(+)
diff --git a/multimedia/Makefile b/multimedia/Makefile
index c4e01058e05a..d029970eedb9 100644
--- a/multimedia/Makefile
+++ b/multimedia/Makefile
@@ -8,6 +8,7 @@
SUBDIR += aom
SUBDIR += aravis
SUBDIR += arcan
+ SUBDIR += aribb24
SUBDIR += assimp
SUBDIR += atomicparsley
SUBDIR += audacious
diff --git a/multimedia/aribb24/Makefile b/multimedia/aribb24/Makefile
new file mode 100644
index 000000000000..cf51a8e44ffc
--- /dev/null
+++ b/multimedia/aribb24/Makefile
@@ -0,0 +1,25 @@
+PORTNAME= aribb24
+DISTVERSION= 1.0.4
+CATEGORIES= multimedia
+
+MAINTAINER= driesm@FreeBSD.org
+COMMENT= ARIB STD-B24 library
+
+LICENSE= LGPL3
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+LIB_DEPENDS= libpng.so:graphics/png
+
+USES= autoreconf libtool pkgconfig
+USE_GITHUB= yes
+GH_ACCOUNT= jeeb
+GH_TAGNAME= a41b904
+USE_LDCONFIG= yes
+
+GNU_CONFIGURE= yes
+
+INSTALL_TARGET= install-strip
+
+OPTIONS_DEFINE= DOCS
+
+.include <bsd.port.mk>
diff --git a/multimedia/aribb24/distinfo b/multimedia/aribb24/distinfo
new file mode 100644
index 000000000000..a8f0302bba7c
--- /dev/null
+++ b/multimedia/aribb24/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1644955608
+SHA256 (jeeb-aribb24-1.0.4-a41b904_GH0.tar.gz) = bff07228a919309263bea08eb880efa9376dca5b4ec19ce9b404d175504da596
+SIZE (jeeb-aribb24-1.0.4-a41b904_GH0.tar.gz) = 47404
diff --git a/multimedia/aribb24/files/patch-src_aribb24__private.h b/multimedia/aribb24/files/patch-src_aribb24__private.h
new file mode 100644
index 000000000000..2c4a0a61e0c9
--- /dev/null
+++ b/multimedia/aribb24/files/patch-src_aribb24__private.h
@@ -0,0 +1,16 @@
+https://github.com/scimmia9286/aribb24/commit/fa54dee41aa38560f02868b24f911a24c33780a8
+--- src/aribb24_private.h.orig 2019-09-16 15:57:19 UTC
++++ src/aribb24_private.h
+@@ -35,9 +35,9 @@ struct arib_instance_private_t
+ char *psz_last_error;
+
+ drcs_conversion_t *p_drcs_conv;
+- int i_drcs_num;
+- unsigned int drcs_conv_table[188];
+- char drcs_hash_table[188][32 + 1];
++ int i_drcs_num[15];
++ unsigned int drcs_conv_table[15][188];
++ char drcs_hash_table[15][188][32 + 1];
+ };
+
+ void arib_log( arib_instance_t *, const char *, ... );
diff --git a/multimedia/aribb24/files/patch-src_decoder.c b/multimedia/aribb24/files/patch-src_decoder.c
new file mode 100644
index 000000000000..8bf46be2353f
--- /dev/null
+++ b/multimedia/aribb24/files/patch-src_decoder.c
@@ -0,0 +1,89 @@
+https://github.com/scimmia9286/aribb24/commit/fa54dee41aa38560f02868b24f911a24c33780a8
+--- src/decoder.c.orig 2019-09-16 15:57:19 UTC
++++ src/decoder.c
+@@ -82,6 +82,7 @@ struct arib_decoder_t
+ int (*handle_g2)(arib_decoder_t *, int);
+ int (*handle_g3)(arib_decoder_t *, int);
+ int kanji_ku;
++ int drcs_plane;
+
+ int i_control_time;
+
+@@ -448,11 +449,8 @@ static int decoder_handle_drcs( arib_decoder_t *decode
+ {
+ unsigned int uc;
+
+- uc = 0;
+- if( c < decoder->p_instance->p->i_drcs_num )
+- {
+- uc = decoder->p_instance->p->drcs_conv_table[c];
+- }
++ uc = decoder->p_instance->p->drcs_conv_table[decoder->drcs_plane-1][c];
++
+ if( uc == 0 )
+ {
+ /* uc = 0x3000; */ /* WHITESPACE */
+@@ -555,6 +553,7 @@ static int decoder_handle_esc( arib_decoder_t *decoder
+ {
+ int c;
+ int (**handle)(arib_decoder_t *, int);
++ int drcs = 0;
+
+ handle = &decoder->handle_g0;
+ while( decoder_pull( decoder, &c ) != 0 )
+@@ -562,6 +561,7 @@ static int decoder_handle_esc( arib_decoder_t *decoder
+ switch( c )
+ {
+ case 0x20: // DRCS
++ drcs = 1;
+ break;
+ case 0x24:
+ case 0x28:
+@@ -585,12 +585,29 @@ static int decoder_handle_esc( arib_decoder_t *decoder
+ return 1;
+ case 0x39:
+ case 0x3b:
+- case 0x42:
+ *handle = decoder_handle_kanji;
+ return 1;
++ case 0x42:
++ if (drcs==1)
++ {
++ decoder->drcs_plane = c-0x40;
++ *handle = decoder_handle_drcs;
++ }
++ else
++ {
++ *handle = decoder_handle_kanji;
++ }
+ case 0x36:
+ case 0x4a:
+- *handle = decoder_handle_alnum;
++ if (drcs==1)
++ {
++ decoder->drcs_plane = c-0x40;
++ *handle = decoder_handle_drcs;
++ }
++ else
++ {
++ *handle = decoder_handle_alnum;
++ }
+ return 1;
+ case 0x40:
+ case 0x41:
+@@ -608,6 +625,7 @@ static int decoder_handle_esc( arib_decoder_t *decoder
+ case 0x4d:
+ case 0x4e:
+ case 0x4f:
++ decoder->drcs_plane = c-0x40;
+ *handle = decoder_handle_drcs;
+ return 1;
+ case 0x6e: //LS2
+@@ -1401,6 +1419,7 @@ void arib_initialize_decoder( arib_decoder_t* decoder
+ decoder->handle_g2 = decoder_handle_hiragana;
+ decoder->handle_g3 = decoder_handle_katakana;
+ decoder->kanji_ku = -1;
++ decoder->drcs_plane = -1;
+
+ decoder->i_control_time = 0;
+
diff --git a/multimedia/aribb24/files/patch-src_drcs.c b/multimedia/aribb24/files/patch-src_drcs.c
new file mode 100644
index 000000000000..10c542158494
--- /dev/null
+++ b/multimedia/aribb24/files/patch-src_drcs.c
@@ -0,0 +1,89 @@
+https://github.com/scimmia9286/aribb24/commit/58a34b8fabf4d0e9e1984fb603a97f52fb934a09
+https://github.com/scimmia9286/aribb24/commit/fa54dee41aa38560f02868b24f911a24c33780a8
+--- src/drcs.c.orig 2019-09-16 15:57:19 UTC
++++ src/drcs.c
+@@ -127,32 +127,39 @@ static bool create_arib_datadir( arib_instance_t *p_in
+
+ bool apply_drcs_conversion_table( arib_instance_t *p_instance )
+ {
+- for( int i = 0; i < p_instance->p->i_drcs_num; i++ )
++ for( int i = 0; i < 15; i++ )
+ {
+- unsigned int uc = 0;
+- drcs_conversion_t *p_drcs_conv = p_instance->p->p_drcs_conv;
+- while( p_drcs_conv != NULL )
++ for( int j = 0; j < p_instance->p->i_drcs_num[i]; j++ )
+ {
+- if( strcmp( p_drcs_conv->hash, p_instance->p->drcs_hash_table[i] ) == 0 )
++ if (p_instance->p->drcs_hash_table[i][j][0] != 0)
+ {
+- uc = p_drcs_conv->code;
+- break;
+- }
+- p_drcs_conv = p_drcs_conv->p_next;
+- }
++ unsigned int uc = 0;
++ drcs_conversion_t *p_drcs_conv = p_instance->p->p_drcs_conv;
++ while( p_drcs_conv != NULL )
++ {
++ if( strcmp( p_drcs_conv->hash, p_instance->p->drcs_hash_table[i][j] ) == 0 )
++ {
++ uc = p_drcs_conv->code;
++ break;
++ }
++ p_drcs_conv = p_drcs_conv->p_next;
++ }
++
+ #ifdef DEBUG_ARIBSUB
+- if( uc )
+- {
+- arib_log( p_instance, "Mapping [%s=U+%04x] will be used.",
+- p_instance->p->drcs_hash_table[i], uc );
+- }
+- else
+- {
+- arib_log( p_instance, "Mapping for hash[%s] is not found.",
+- p_instance->p->drcs_hash_table[i] );
+- }
++ if( uc )
++ {
++ arib_log( p_instance, "Mapping [%s=U+%04x] will be used.",
++ p_instance->p->drcs_hash_table[i][j], uc );
++ }
++ else
++ {
++ arib_log( p_instance, "Mapping for hash[%s] is not found.",
++ p_instance->p->drcs_hash_table[i][j] );
++ }
+ #endif
+- p_instance->p->drcs_conv_table[i] = uc;
++ p_instance->p->drcs_conv_table[i][j] = uc;
++ }
++ }
+ }
+ return true;
+ }
+@@ -406,15 +413,19 @@ png_create_write_struct_failed:
+ void save_drcs_pattern(
+ arib_instance_t *p_instance,
+ int i_width, int i_height,
+- int i_depth, const int8_t* p_patternData )
++ int i_depth, const int8_t* p_patternData,
++ int16_t i_CharacterCode )
+ {
++ int i_drcsPlane = ((i_CharacterCode >> 8) & 0xff) - 0x40;
++ int i_code = (i_CharacterCode & 0xff) - 0x20;
+ char* psz_hash = get_drcs_pattern_data_hash( p_instance,
+ i_width, i_height, i_depth, p_patternData );
+
+- strncpy( p_instance->p->drcs_hash_table[p_instance->p->i_drcs_num], psz_hash, 32 );
+- p_instance->p->drcs_hash_table[p_instance->p->i_drcs_num][32] = '\0';
++ strncpy( p_instance->p->drcs_hash_table[i_drcsPlane-1][i_code-1], psz_hash, 32 );
++ p_instance->p->drcs_hash_table[i_drcsPlane-1][i_code-1][32] = '\0';
+
+- p_instance->p->i_drcs_num++;
++ p_instance->p->i_drcs_num[i_drcsPlane-1] = i_code > p_instance->p->i_drcs_num[i_drcsPlane-1] ?
++ i_code : p_instance->p->i_drcs_num[i_drcsPlane-1];
+
+ save_drcs_pattern_data_image( p_instance, psz_hash,
+ i_width, i_height, i_depth, p_patternData );
diff --git a/multimedia/aribb24/files/patch-src_drcs.h b/multimedia/aribb24/files/patch-src_drcs.h
new file mode 100644
index 000000000000..2fbb9f7f6d80
--- /dev/null
+++ b/multimedia/aribb24/files/patch-src_drcs.h
@@ -0,0 +1,11 @@
+https://github.com/scimmia9286/aribb24/commit/58a34b8fabf4d0e9e1984fb603a97f52fb934a09
+--- src/drcs.h.orig 2019-09-16 15:57:19 UTC
++++ src/drcs.h
+@@ -77,6 +77,6 @@ typedef struct drcs_data_s
+
+ bool apply_drcs_conversion_table( arib_instance_t * );
+ bool load_drcs_conversion_table( arib_instance_t * );
+-void save_drcs_pattern( arib_instance_t *, int, int, int, const int8_t* );
++void save_drcs_pattern( arib_instance_t *, int, int, int, const int8_t*, int16_t );
+
+ #endif
diff --git a/multimedia/aribb24/files/patch-src_parser.c b/multimedia/aribb24/files/patch-src_parser.c
new file mode 100644
index 000000000000..9a8616b32d34
--- /dev/null
+++ b/multimedia/aribb24/files/patch-src_parser.c
@@ -0,0 +1,85 @@
+https://github.com/scimmia9286/aribb24/commit/58a34b8fabf4d0e9e1984fb603a97f52fb934a09
+https://github.com/scimmia9286/aribb24/commit/fa54dee41aa38560f02868b24f911a24c33780a8
+--- src/parser.c.orig 2019-09-16 15:57:19 UTC
++++ src/parser.c
+@@ -79,7 +79,6 @@ static void parse_data_unit_DRCS( arib_parser_t *p_par
+ uint8_t i_data_unit_parameter,
+ uint32_t i_data_unit_size )
+ {
+- p_parser->p_instance->p->i_drcs_num = 0;
+ #ifdef ARIBSUB_GEN_DRCS_DATA
+ if( p_parser->p_drcs_data != NULL )
+ {
+@@ -119,7 +118,7 @@ static void parse_data_unit_DRCS( arib_parser_t *p_par
+
+ for( int i = 0; i < i_NumberOfCode; i++ )
+ {
+- bs_skip( p_bs, 16 ); /* i_character_code */
++ int16_t i_CharacterCode = bs_read( p_bs, 16 ); /* i_character_code */
+ p_parser->i_data_unit_size += 2;
+ uint8_t i_NumberOfFont = bs_read( p_bs, 8 );
+ p_parser->i_data_unit_size += 1;
+@@ -139,7 +138,11 @@ static void parse_data_unit_DRCS( arib_parser_t *p_par
+
+ for( int j = 0; j < i_NumberOfFont; j++ )
+ {
++#ifdef ARIBSUB_GEN_DRCS_DATA
++ int8_t i_fontId = bs_read( p_bs, 4 ); /* i_fontID */
++#else
+ bs_skip( p_bs, 4 ); /* i_fontID */
++#endif //ARUBSUB_GEN_DRCS_DATA
+ uint8_t i_mode = bs_read( p_bs, 4 );
+ p_parser->i_data_unit_size += 1;
+
+@@ -206,18 +209,26 @@ static void parse_data_unit_DRCS( arib_parser_t *p_par
+
+ #ifdef ARIBSUB_GEN_DRCS_DATA
+ save_drcs_pattern( p_parser->p_instance, i_width, i_height, i_depth + 2,
+- p_drcs_pattern_data->p_patternData );
++ p_drcs_pattern_data->p_patternData, i_CharacterCode );
+ #else
+ save_drcs_pattern( p_parser->p_instance, i_width, i_height, i_depth + 2,
+- p_patternData );
++ p_patternData, i_CharacterCode );
+ free( p_patternData );
+ #endif //ARIBSUB_GEN_DRCS_DATA
+ }
+ else
+ {
++#ifdef ARIBSUB_GEN_DRCS_DATA
++ int8_t i_regionX = bs_read( p_bs, 8 ); /* i_regionX */
++#else
+ bs_skip( p_bs, 8 ); /* i_regionX */
++#endif //ARIBSUB_GEN_DRCS_DATA
+ p_parser->i_data_unit_size += 1;
++#ifdef ARIBSUB_GEN_DRCS_DATA
++ int8_t i_regionY = bs_read( p_bs, 8 ); /* i_regionY */
++#else
+ bs_skip( p_bs, 8 ); /* i_regionY */
++#endif //ARIBSUB_GEN_DRCS_DATA
+ p_parser->i_data_unit_size += 1;
+ uint16_t i_geometricData_length = bs_read( p_bs, 16 );
+ p_parser->i_data_unit_size += 2;
+@@ -245,7 +256,11 @@ static void parse_data_unit_DRCS( arib_parser_t *p_par
+
+ for( int k = 0; k < i_geometricData_length ; k++ )
+ {
++#ifdef ARIBSUB_GEN_DRCS_DATA
++ int8_t i_geometricData = bs_read( p_bs, 8 ); /* i_geometric_data */
++#else
+ bs_skip( p_bs, 8 ); /* i_geometric_data */
++#endif //ARIBSUB_GEN_DRCS_DATA
+ p_parser->i_data_unit_size += 1;
+
+ #ifdef ARIBSUB_GEN_DRCS_DATA
+@@ -344,6 +359,10 @@ static void parse_caption_management_data( arib_parser
+ p_parser->i_data_unit_size = 0;
+ p_parser->i_subtitle_data_size = 0;
+ p_parser->psz_subtitle_data = NULL;
++ memset(p_parser->p_instance->p->i_drcs_num, 0,
++ sizeof(p_parser->p_instance->p->i_drcs_num));
++ memset(p_parser->p_instance->p->drcs_hash_table, 0,
++ sizeof(p_parser->p_instance->p->drcs_hash_table));
+ if( i_data_unit_loop_length > 0 )
+ {
+ p_parser->psz_subtitle_data = (unsigned char*) calloc(
diff --git a/multimedia/aribb24/pkg-descr b/multimedia/aribb24/pkg-descr
new file mode 100644
index 000000000000..850a2011641e
--- /dev/null
+++ b/multimedia/aribb24/pkg-descr
@@ -0,0 +1,4 @@
+A library for ARIB STD-B24, decoding JIS 8 bit characters
+and parsing MPEG-TS stream.
+
+WWW: https://github.com/nkoriyama/aribb24
diff --git a/multimedia/aribb24/pkg-plist b/multimedia/aribb24/pkg-plist
new file mode 100644
index 000000000000..4d457e6f4d91
--- /dev/null
+++ b/multimedia/aribb24/pkg-plist
@@ -0,0 +1,11 @@
+include/aribb24/aribb24.h
+include/aribb24/bits.h
+include/aribb24/decoder.h
+include/aribb24/parser.h
+lib/libaribb24.a
+lib/libaribb24.so
+lib/libaribb24.so.0
+lib/libaribb24.so.0.0.0
+libdata/pkgconfig/aribb24.pc
+%%PORTDOCS%%%%DOCSDIR%%/COPYING
+%%PORTDOCS%%%%DOCSDIR%%/README.md