Open scimmia9286 opened 3 years ago
DRCSデータの内容によっては不具合が生じるケースがありました。 "ARIB STD-B24 Table D-1 DRCS structure syntax" の値を例に正常動作するケース、不具合が生じるケースを記載します。
CharacerCodeが0x4121から始まり、抜けなく0x4122, 0x4123, ... のように並んでいるケースでは正常に動作します。
正常ケース1 { "NumberOfCode":1, "Codes": [ {"CharacterCode":0x4121, ...} ] } 正常ケース2 { "NumberOfCode":2, "Codes": [ {"CharacterCode":0x4121, ...}, {"CharacterCode":0x4122, ...} ] }
{ "NumberOfCode":1, "Codes": [ {"CharacterCode":0x4121, ...} ] }
{ "NumberOfCode":2, "Codes": [ {"CharacterCode":0x4121, ...}, {"CharacterCode":0x4122, ...} ] }
一方、CharacterCodeが0x4121以外で始まるか、途中に抜けがあるケースでは正常に動作しません(下駄に変換される)。
正常に動作しないケース1 { "NumberOfCode":1, "Codes": [ {"CharacterCode":0x4122, ...} ] } 正常に動作しないケース2 { "NumberOfCode":2, "Codes": [ {"CharacterCode":0x4121, ...}, {"CharacterCode":0x4123, ...} ] }
{ "NumberOfCode":1, "Codes": [ {"CharacterCode":0x4122, ...} ] }
{ "NumberOfCode":2, "Codes": [ {"CharacterCode":0x4121, ...}, {"CharacterCode":0x4123, ...} ] }
正常に動作させるためには、CharacerCodeの上位・下位のバイトを見て、ハッシュテーブルに登録する必要があります。 現在のaribb24ライブラリでは、DRCS0-15のページは区別して扱っていないため、ページは無視して下位のバイトのみを見てハッシュテーブルに格納する添字を計算しました。
parse_caption_management_data()からparse_data_unit()が複数回呼ばれるケースでは、parse_data_unit_DRCS()も複数回呼ばれるため、parse_data_unit_DRCS()でp_parser->p_instance->p->i_drcs_num = 0 をすると処理中にハッシュテーブル件数が初期化されてしまいます。
初期化を parse_data_unit() に移動しました。
DRCSデータのパース不具合
DRCSデータの内容によっては不具合が生じるケースがありました。 "ARIB STD-B24 Table D-1 DRCS structure syntax" の値を例に正常動作するケース、不具合が生じるケースを記載します。
CharacerCodeが0x4121から始まり、抜けなく0x4122, 0x4123, ... のように並んでいるケースでは正常に動作します。
正常ケース1
{ "NumberOfCode":1, "Codes": [ {"CharacterCode":0x4121, ...} ] }
正常ケース2{ "NumberOfCode":2, "Codes": [ {"CharacterCode":0x4121, ...}, {"CharacterCode":0x4122, ...} ] }
一方、CharacterCodeが0x4121以外で始まるか、途中に抜けがあるケースでは正常に動作しません(下駄に変換される)。
正常に動作しないケース1
{ "NumberOfCode":1, "Codes": [ {"CharacterCode":0x4122, ...} ] }
正常に動作しないケース2{ "NumberOfCode":2, "Codes": [ {"CharacterCode":0x4121, ...}, {"CharacterCode":0x4123, ...} ] }
修正内容
正常に動作させるためには、CharacerCodeの上位・下位のバイトを見て、ハッシュテーブルに登録する必要があります。 現在のaribb24ライブラリでは、DRCS0-15のページは区別して扱っていないため、ページは無視して下位のバイトのみを見てハッシュテーブルに格納する添字を計算しました。
DRCSハッシュテーブルの初期化不具合
parse_caption_management_data()からparse_data_unit()が複数回呼ばれるケースでは、parse_data_unit_DRCS()も複数回呼ばれるため、parse_data_unit_DRCS()でp_parser->p_instance->p->i_drcs_num = 0 をすると処理中にハッシュテーブル件数が初期化されてしまいます。
修正内容
初期化を parse_data_unit() に移動しました。