Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-ports-kde
Path: blob/main/multimedia/aribb24/files/patch-src_decoder.c
16461 views
1
https://github.com/scimmia9286/aribb24/commit/fa54dee41aa38560f02868b24f911a24c33780a8
2
--- src/decoder.c.orig 2019-09-16 15:57:19 UTC
3
+++ src/decoder.c
4
@@ -82,6 +82,7 @@ struct arib_decoder_t
5
int (*handle_g2)(arib_decoder_t *, int);
6
int (*handle_g3)(arib_decoder_t *, int);
7
int kanji_ku;
8
+ int drcs_plane;
9
10
int i_control_time;
11
12
@@ -448,11 +449,8 @@ static int decoder_handle_drcs( arib_decoder_t *decode
13
{
14
unsigned int uc;
15
16
- uc = 0;
17
- if( c < decoder->p_instance->p->i_drcs_num )
18
- {
19
- uc = decoder->p_instance->p->drcs_conv_table[c];
20
- }
21
+ uc = decoder->p_instance->p->drcs_conv_table[decoder->drcs_plane-1][c];
22
+
23
if( uc == 0 )
24
{
25
/* uc = 0x3000; */ /* WHITESPACE */
26
@@ -555,6 +553,7 @@ static int decoder_handle_esc( arib_decoder_t *decoder
27
{
28
int c;
29
int (**handle)(arib_decoder_t *, int);
30
+ int drcs = 0;
31
32
handle = &decoder->handle_g0;
33
while( decoder_pull( decoder, &c ) != 0 )
34
@@ -562,6 +561,7 @@ static int decoder_handle_esc( arib_decoder_t *decoder
35
switch( c )
36
{
37
case 0x20: // DRCS
38
+ drcs = 1;
39
break;
40
case 0x24:
41
case 0x28:
42
@@ -585,12 +585,29 @@ static int decoder_handle_esc( arib_decoder_t *decoder
43
return 1;
44
case 0x39:
45
case 0x3b:
46
- case 0x42:
47
*handle = decoder_handle_kanji;
48
return 1;
49
+ case 0x42:
50
+ if (drcs==1)
51
+ {
52
+ decoder->drcs_plane = c-0x40;
53
+ *handle = decoder_handle_drcs;
54
+ }
55
+ else
56
+ {
57
+ *handle = decoder_handle_kanji;
58
+ }
59
case 0x36:
60
case 0x4a:
61
- *handle = decoder_handle_alnum;
62
+ if (drcs==1)
63
+ {
64
+ decoder->drcs_plane = c-0x40;
65
+ *handle = decoder_handle_drcs;
66
+ }
67
+ else
68
+ {
69
+ *handle = decoder_handle_alnum;
70
+ }
71
return 1;
72
case 0x40:
73
case 0x41:
74
@@ -608,6 +625,7 @@ static int decoder_handle_esc( arib_decoder_t *decoder
75
case 0x4d:
76
case 0x4e:
77
case 0x4f:
78
+ decoder->drcs_plane = c-0x40;
79
*handle = decoder_handle_drcs;
80
return 1;
81
case 0x6e: //LS2
82
@@ -1401,6 +1419,7 @@ void arib_initialize_decoder( arib_decoder_t* decoder
83
decoder->handle_g2 = decoder_handle_hiragana;
84
decoder->handle_g3 = decoder_handle_katakana;
85
decoder->kanji_ku = -1;
86
+ decoder->drcs_plane = -1;
87
88
decoder->i_control_time = 0;
89
90
91