Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 15 Feb 2022 20:10:33 GMT
From:      Dries Michiels <driesm@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: ebf7717569bd - main - multimedia/aribb24: New port
Message-ID:  <202202152010.21FKAXbX004639@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202202152010.21FKAXbX004639>