Printable Version of Topic
Click here to view this topic in its original format
Forums > Аудио и видеотехника > Переворот иврита в прошивках МТК, На примере APEX DVX - 811


Posted by: moroz on 01-01-2006, 02:37
При сравнении старой и новой прошивки от APEX DVX - 811, которые любезно предоставили мне grif и Rusk, обнаружилась новая функция. Живет она в ARM коде и вызывается непосредственно перед показом субтитра. Содержит в себе длинный цикл, первым действием которго идет сравнение регистра R0 с 0х80, т.е. проверяется - с нижней или верхней таблицей ASCII имеем дело. Все это, а также то что новая прошивка умеет переворачивать иврит, заставило меня предположить, что найденная функция и является ответственной за данный фичер.
Прилагаю листинг дизассемблера.
P.S. Анализ кода сделан на основе документа "MPEG4 Subtitle Display in ARM", автор New Age

Posted by: cax on 01-01-2006, 16:49
Посмотрел. Сложновато мне...

Posted by: moroz on 01-01-2006, 17:28
Сложновато - в смысле внедрить в другие прошивки? Или в смысле досконально понять саму функцию?

Posted by: cax on 01-01-2006, 18:03
Я её вообще не понимаю, какое уж там досконально. Внедрить без понимания тем более не выйдет.

Posted by: moroz on 01-01-2006, 20:11
Ну конечно выйдет. Я в тебя верю! :)
А если серьезно:
1. Функция не принимает никаких аргументов и ничего не возвращает - это видно из того, как ее вызывают.
2. Внутри функции нет НИ ОДНОЙ внешней ссылки, кроме pARM_Shared_Memory - ее найти не проблема.

Т.е. мы имеем вещь в себе, просто создана для того чтобы ее взяли и перенесли как она есть в другую прошивку. Ты ведь на этом собаку съел. А как именно она работает - не все ли равно?

Posted by: cax on 01-01-2006, 22:30
Не так всё просто - она может и получать аргументы и возвращать результаты при помощи этой самой общей памяти, причём что там где находится зависит от прошивки.

Posted by: moroz on 02-01-2006, 00:16
Пардон, функция принимает аргументы и возвращает значение либо через стек, либо через регистры :actu: . Если ты имел в виду, что она может читать и изменять статическую память (в частности общую) - с этим трудно поспорить: должна же такая функция что-нибудь делать :) .
В нашем конкретном случае нас интересует только структура самого субтитра, который лежит в этой памяти. В данной прошивке выглядит она так:
по оффсету 0 - ничего. По крайней мере я не видел, что кто-то пользуется.
по оффсету 1 - длина субтитра.
по оффсету 2 и далее - непосредственно строка.
Может эта структура отличаться в другой прошивке? Теоретически - да. Практически - вряд-ли. Но даже в этом случае можно будет разницу отследить по тому, как другие известные функции пользуются этой памятью.

Posted by: cax on 02-01-2006, 00:58
Слушай, если ты так хорошо во всём разобрался, почему бы тебе самому не попробовать встроить эту функцию ? Вот лично мне неясно как она определяет, включен иврит или русский (а на апексе переворачивать или не переворачивать определяется именно этим). Даже если я знаю где это определено в меню, я ещё не выяснил как в АРМ получают доступ к выбранному значению. А без этого как я проверю работоспособность непонятного мне куска кода ?

Posted by: moroz on 02-01-2006, 19:29
Да нет, такое мне не под силу. Ну, значить, не судьба покаместь...

Posted by: moroz on 23-02-2006, 21:54
QUOTE :
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Дай мне,пожалуйста,если можешь, на проверку случаи со скобками, знаками процента и доллара
Ультимативных проверок у меня нет. Могу предложить простенький тест, на котором я отлаживал свои первые версии. Это "обязательная программа". Каждый уважающий себя алгоритм переворота обязан его выполнить правильно, т.е. на экране строчки должны изображаться точно так же, как они видны, скажем, в ноутпаде. Только обрати внимание, что это неправильный файл. Надо его немного исправить (времена, разбить по 2-3 строчки и т.д)

Posted by: moroz on 23-02-2006, 22:01
Вот еще. Это файл с субтитрами, в котором одна из моих старых версий давала ошибки. Первой строчкой идут названия файлов, а дальше проблемная строчка.
Скобками я пока не занимался, но вот одна такая строка:
( -תורגם ע"י: חומוס_צ'יפס_סלט ( -חומוס
правая скобка может оказаться зеркально развернутой.

Добавлено
О господи, что стряслось с ивритской строкой!!! Ладно, я ее добавил прямо в файл первым номером.

Posted by: ivani4 on 23-02-2006, 22:59
moroz
Спасибо за файлы.
Мне не совсем понятно почему в Errors.srt ты создал такое количество строк?Почему нельзя было сразу сделать его 2-3 строчным?
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Интересуют ли тебя результаты моего тестирования?Это я к тому что бы не писать об этом впустую.

Posted by: cax on 23-02-2006, 23:53
QUOTE (ivani4 @ 23-02-2006, 19:59):
moroz

Интересуют ли тебя результаты моего тестирования?Это я к тому что бы не писать об этом впустую.
Лично меня - очень интересуют. Думаю, что не ошибусь, если скажу, что moroz-а тоже.

Posted by: moroz on 24-02-2006, 00:09
QUOTE:
Мне не совсем понятно почему в Errors.srt ты создал такое количество строк?
Просто я проверял алгоритм на своей утилите, а ей без разницы. Извини что заставил тебя поработать.
А результат, конечно, интересует. Но только чтобы он оказался достаточно плохим! :laugh:

Posted by: ivani4 on 24-02-2006, 09:05
moroz
Дело не в том что ты заставил меня работать.Просто я не уверен что изменённый мною файл будет выглядеть так как хотелось бы тебе.

Posted by: moroz on 24-02-2006, 09:34
Уговорил. Вот поправленый вариант Test.srt. Кстати, ты наверно имел в виду его, а не Errors.srt. Errors.srt и так 2-3 строчный.

Добавлено
Поправил важный момент в 7 - м субтитре.

Posted by: ivani4 on 24-02-2006, 09:53
moroz
Ты понял правильно.Спасибо.
Сделал поверхностную проверку с файлом Errors.srt и уже нашёл чем тебя обрадовать.
В первой ивритской строке одна скобка наоборот.
В последующих местах присутствие в строке английского слова в конце или начале строки не делает проблем.Но если такое слово находится в середине,то балаган.С цифрами проблем не замечено.Продолжаю проверять.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Test.srt.Тремя программами открывается по разному.Напиши мне здесь хотя бы две первые строки что бы я знал как это выглядит у тебя в оригинале.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Posted by: cax on 24-02-2006, 11:02
QUOTE (ivani4 @ 24-02-2006, 06:53):
Напиши мне здесь хотя бы две первые строки что бы я знал как это выглядит у тебя в оригинале.
По-моему этот форум не умеет отображать ничего, кроме русского и английского...

Щаззз попробуем ещё раз:

אבג
CODE


אבג


В общем, договоритесь о программе (ноутпад или ещё чего) которая есть у вас обоих, и обменивайтесь файлами :)

Posted by: ivani4 on 24-02-2006, 11:24
moroz,продолжу тебя радовать.
Errors.srt / Замечены проблемы 2/3/12-субтитрах и мне уже совсем не весело.

Posted by: moroz on 24-02-2006, 11:35
Да, в ноутпаде должно быть как надо.
Сделал для проверки картинку Test.srt.

Posted by: moroz on 24-02-2006, 11:46
QUOTE (ivani4 @ 24-02-2006, 09:53):
присутствие в строке английского слова в конце или начале строки не делает проблем.Но если такое слово находится в середине,то балаган
А как выглядит балаган? Ивритские части до и после английского слова меняются местами?

P.S. Ухожу в оффлайн, вернусь вечером. Аревуар.

Posted by: ivani4 on 24-02-2006, 11:50
moroz
О.К.Спасибо за картинку.
,,,,,,,,,,,,,,,,,,
Errors.srt
В этом файле 256 субтитров.Каждый из них имеет свою особенность?Т.е. если я хочу сделать условно полный тест этого двд,то нужно проверить все 256 вариантов?

Posted by: ivani4 on 24-02-2006, 11:51
QUOTE:
А как выглядит балаган? Ивритские части до и после английского слова меняются местами?
Да,что то вроде этого.

Posted by: moroz on 24-02-2006, 21:17
Я, наверное, нечетко выразился. Errors.srt - не тест.
Чтобы проверить свой алгоритм я беру файлы с субтитрами и переворачиваю сначала своим, а потом родным виндоусовским алгоритмом - и сравниваю строчки. Если вышли разные - записываю в файл. Так что данный Errors.srt - это ошибки одной специфической версии. Среди них конечно есть ошибки одного о того же сорта. Если твой (китайский) алгоритм делает какие-то другие ошибки - ты их не увидишь в этом файле.

Posted by: cax on 24-02-2006, 22:39
QUOTE (moroz @ 24-02-2006, 18:17):
переворачиваю родным виндоусовским алгоритмом
Было бы интересно взглянуть на его исходники или декомпилировать :)

Posted by: ivani4 on 24-02-2006, 22:40
moroz
Понято.
Я считаю что свою программу минимум я выполнил.Мне нужно было узнать что называется у тебя кривыми файлами и проверить создают ли они проблемы у меня .Глубже копать,по крайней мере сейчас,нет необходимости.Но если тебя заинтересует какой то конкретный момент,то я буду рад для тебя это проверить.
Большое спасибо за присланные файлы и объяснения.

Posted by: moroz on 24-02-2006, 23:21
cax
Майкрософтовские исходники, чего захотел! Я переворачиваю при помощи функции GetCharacterPlacement (может есть еще что-то, я не силен в Винде). Если ты ее декомпилируешь - я сниму шляпу. Ну если нет, то хотя бы уговори ее разворачивать скобки, я не смог :)

ivani4
К твоим услугам. Тебе тоже спасибо, мне было интересно.

Posted by: cax on 26-03-2006, 20:43
moroz, мы с тобой уже прославились ;)

http://pioneerisrael.co.il/Pioneer/news.asp?id=59 (http://pioneerisrael.co.il/Pioneer/news.asp?id=59

Posted by: ivani4 on 11-04-2006, 08:14
cax&moroz
:handup: :clap1: :handup: :clap1: :handup: :clap1: :handup:
Я проверил прошивку для Premier 890 которую moroz выложил на Lionetwork.Всё работает отлично. Поддерживает и srt и sub.Не потребовалось выключать плеер из сети и не было потребности в reset.
:handup: :clap1: :handup: :clap1: :handup: :clap1: :handup:

Posted by: Lord KiRon on 11-04-2006, 09:03
Кстати, не много не в тему но кто может мне тут написать полный "алгоритм" переворота иврита ?
В смысле чтоб типа и буквы и слова а английский и цифры нет ии как там ?
Код,псевдокод, или просто описание по шагам вполне устроят. В принципе можно сделать и самому но для йетого как минимум надо точно знать что нужно делать :)

Posted by: cax on 11-04-2006, 09:15
Lord KiRon, я не думаю, что moroz выложит исходники после того, как достаточно долго пропыхтел над их написанием. А ассемблерный код уже давно в свободном доступе и с анти-коммерческим копирайтом:)

Posted by: moroz on 11-04-2006, 09:54
QUOTE (Lord KiRon @ 11-04-2006, 09:03):
Кстати, не много не в тему но кто может мне тут написать полный "алгоритм" переворота иврита ?
В смысле чтоб типа и буквы и слова а английский и цифры нет ии как там ?
Код,псевдокод, или просто описание по шагам вполне устроят. В принципе можно сделать и самому но для йетого как минимум надо точно знать что нужно делать :)
Вот полный алгоритм (без кавычек)
http://www.unicode.org/reports/tr9/ (http://www.unicode.org/reports/tr9/ (сейчас линк как на зло не открываетася, но это, наверно, временно)
Моя имплементация не имеет с ним ничего общего - по нескольким причинам, в основном - недостаток места.
Если Lord KiRon любезно укажет конечную цель своего вопроса, то может смогу посоветовать что-то более конкретное. При необходимости можно выложить и исходники, хотя они в таком виде, что мне за них придется краснеть.

Posted by: Lord KiRon on 11-04-2006, 10:42
Исходники мне нафиг не нужны :), хотя спасибо за предложение.
Нужен именно алгоритм а точнее даже не он а просто описание что и "куда" делать :)

Цель весьма проста, разрабы данного чуда ( Topic Link: Zensonic Z500 в Израиле ! (http://netlab.e2k.ru/forum/index.php?showtopic=63784 ) в близжайшее время будут добавлять поддержку иврита (так они на форуме написали) но как я понял сами они в иврите не бум-бум (понятное дело - Австралийци) то есть "в слепую" могут добавить только фонт и воспроизведение с право налево.
Однако я то видел что йетого мало, и люди не мало на такое нарывались, вот и хотелось бы им запостить как можно более полную и "правильную" версию "алгоритма".
Можно было бы конечно самому посидеть с компом и "разработать" но зачем изобретать велосипед если есть "готовое" :)

Posted by: moroz on 11-04-2006, 12:23
QUOTE:
Нужен именно алгоритм а точнее даже не он а просто описание что и "куда" делать
Пардон, не до конца понял фразу. Что же тогда алгоритм, если не "описание что и "куда" делать". Боюсь, что если разрабы подходят к делу серьезно и хотят полную имплементацию - придется им изучить официальный алгоритм. Любое отступление от него будет чревато неправильным отображением текста - в большей или меньшей степени. Надеюсь, ссылка скоро оживет (или это только у меня проблема?)
А по поводу бескорыстной помощи австралийским товарищам - не хочу показаться невежливым, но по моему личному мнению надо проводить четкую грань между коммерческой и энтузиастской деятельностью. Твои разрабы явно представляют первую категорию, а это значит, что они либо должны справиться сами, либо нанять консультанта.

Posted by: cax on 11-04-2006, 13:22
В связи с исторически сложившейся ситуацией с ивритскими субтитрами, во-первых обычного алгоритма с unicode.org будет недостаточно, т.к. есть достаточно много распространённых в сети файлов субтитров, с которыми их алгоритм не справится,
во-вторых у людей на руках уже есть полно дисков с субтитрами, уже перекодированными различными способами, которые тоже желательно поддерживать. Два самых популярных из них - это "развёрнутые субтитры" и т.н. "Encoded", где ивритские субтитры располагаются на месте заглавных английских букв.

Универсальной поддержкой ивритских субтитров будет обладать только тот плейер, который поддерживает всё выше сказанное.

Кроме того, есть ещё нерешённая пока проблема правильного переноса со строки на строку ивритских и смешанных (иврит + английский) субтитров, который также нужно подстраивать под все упомянутые выше случаи...

Posted by: cax on 11-04-2006, 13:26
Кстати, господа хорошие, а вам не кажется странным, что мы, русскоговорящие и русскочитающие, занимаемся решением проблемы показа субтитров на иврите ? Уж кто-кто, а мы в первую очередь, по идее, должны интересоваться русскими субтитрами.

Вот так дела - спасением Израиля от злобных ивритских субтитров занимаются китайцы и русские :)

Posted by: Lord KiRon on 11-04-2006, 13:33
Под "алгоритмом" я имел в виду описание "правильного поведения", то есть например даже я знаю что срочку надо выводить начиная с конца (то есть справа) а английские слова переворачивать не надо, ну и так далее...
Так вот что именно "так далие" мне и надо, а имплементацию пусть они сами делают,за то им и бабки платят.
Просто как люди не читающие иврит понять сами "правильно ли оно выглядит на экране" не смогут.

А насчёт "бескорыстной помощи" , справятся они, а как же, а потом надо будет писать прогу чтоб в "их формат" переводила для нормального отображения.
Как я уже сказал нужен не сам алгоритм а описание "как это правильно должно работать" так сказать для "фиче реквеста".

Posted by: Lord KiRon on 11-04-2006, 13:34
QUOTE (cax @ 11-04-2006, 12:26):
Уж кто-кто, а мы в первую очередь, по идее, должны интересоваться русскими субтитрами.
С рускими то проблем нет - фонты поменял и работает, а с ивритом ...

Posted by: moroz on 11-04-2006, 14:51
Вот, спасибо Гуглу за то, что он кеширует все, что найдет :)
http://72.14.203.104/search?q=cache:qQ1gm7fWdvUJ:www.unic...l=iw&gl=il&ct=clnk&cd=1 (http://72.14.203.104/search?q=cache:qQ1gm7fWdvUJ:www.unicode.org/reports/tr9/+bidi+&hl=iw&gl=il&ct=clnk&cd=1
Здесь написано что, где, куда (кроме всего, что перечислил cax). Любое другое объяснение - укороченная и неполная версия того же. К тому же нет у меня этого упрощенного набора правил. Я же как: сталкивался с проблемой, разбирался, соответствующе исправлял свой код. Сейчас я всего уже просто не помню.

Posted by: moroz on 11-04-2006, 15:04
QUOTE (cax @ 11-04-2006, 13:26):
Кстати, господа хорошие, а вам не кажется странным, что мы, русскоговорящие и русскочитающие, занимаемся решением проблемы показа субтитров на иврите ? Уж кто-кто, а мы в первую очередь, по идее, должны интересоваться русскими субтитрами.

Вот так дела - спасением Израиля от злобных ивритских субтитров занимаются китайцы и русские :)
Кажется, среди нас завелись евреи :fear2:

Что поделать, если великий и могучий в области субтитров представлен гораздо беднее, чем хилый но святой. Предпочитаю ломать глаза, но не слушать гнусавый дубляж.

Posted by: Lord KiRon on 11-04-2006, 16:10
Ладно, спасибо, кину им на форуме линк - пусть мучаются :)

Posted by: robert7 on 26-04-2006, 00:43
посмотрел на эту функцию... понравилась... долго искал куда надо BL на нее воткнуть, воткнул, но она занимает 350 байтов, а

Abnormal termination Arithmetic exception: Illegal instruction Interrupt received
Illegal address Termination request Stack overflow Redirect: can't
open: Out of heap memory User-defined signal 1 User-defined signal 2 Pure
virtual fn called C++ library exception

занимает только 300 байтов.
есть еще одно освободившеeся место, на 170 байтов. (в другом конце ARMа)

есть ли другие способы кроме как разбить функцию на 2 куска и переделать все jmp на BCALC?

moroz, может твоя функция влезет?

Posted by: cax on 26-04-2006, 01:17
В том месте, где "divide by zero", мы проанализировали код и пришли к выводу, что вместе с сообщениями можно откусить и кусок кода, и тогда места становится где-то 0x1C0 байт.

Где и как - наизусть не помню, но если сравнишь, скажем, последнюю прошивку Юндай с оригинальной или предыдущей, то увидишь всё сам.

Posted by: moroz on 08-05-2006, 21:28
robert7
Каким-то образом пропустил твой пост, хотя стараюсь следить. Только сейчас случайно заметил. Виноват.
Надеюсь, совет caxа помог и свободное место нашлось. В любом случае на мой взгляд не стоит употреблять эту функцию. Она же из твоего Апекс 811, народ ее ругал за неверную пунктуацию и еще что-то, ну ты сам знаешь.
Зато, конечно, могу от всей души рекомендовать собственное творение :wink: Скоро выложу коротенькую инструкцию по его внедрению - думаю, тебе будет как раз.

Posted by: robert7 on 09-05-2006, 14:15
Moroz, эта функция работает отлично - справляется со всем кроме скобок, точки ставит с нужной стороны, английский и цифры показывает правильно (она из старой версии прошивки, за 12/2005). В новых версиях используется другая функция - плохая. Я хочу просто пересадить эту функцию в новую прошивку вместо плохой функции (котороя ставит точки не с той стороны)- кроме изменения адреса BL и 1 pointer все подходит. Только не влезает, а эксперементировать боюсь - нет кабеля.

и еще вопрос - как искать выбор языка (фонта) - апекс 811 НЕ использует для этого PrefGetChar (я просмотрел все вызова этой функции во всем 8032, больше всего запрашивается OSDlanguage).

Posted by: cax on 09-05-2006, 14:50
Вот поэтому я и боюсь новых прошивок - там всё иначе, и большая часть того, что я умел до сих пор, неприменима к ним. Куда проще пересадить RISC из новой прошивки (не обязательно родной) в старый 8032. За исключением некоторых мелочей, должно всё работать.

А поскольку Апекс 811 имеет 8M DRAM, его можно научить понимать одновременно и Nero Digital, и OGM/OGG, и многое другое. Правда, для таких экспериментов с пересадкой необходим кабель.

По поводу того, какую процедуру использовать: в новом коде Мороза есть перенос со строки на строку как для английского, так и для иврита, плюс поддержка т.н. "Encode". Насколько мне известно, китайцы такое не написали и не напишут.
Мы тоже начинали с попыток пересадки готового кода, а закончили написанием своего.

Posted by: moroz on 09-05-2006, 20:33
robert7
QUOTE:
Только не влезает, а эксперементировать боюсь - нет кабеля.
Таки плохо. Разбить ее на две части - каторжная работа. Куча переходов. Могу только предложить тебе потерпеть еще чуть-чуть, пока я не выложу инструкцию с моим кодом. Он легко делится на две части - всего один переход.

Posted by: cax on 09-05-2006, 20:56
Помнится мне, кто-то тут очень не хотел облагораживать активно продаваемые плейеры :)

Posted by: moroz on 09-05-2006, 22:58
Ну, поймал меня :actu: Нет, я действительно считаю, что это неправильно, и неоднократно об'яснял почему. С другой стороны, будь у меня такой плеер, я бы наверно для себя его все-таки облагородил. А тогда бы, конечно, и прошивку выложил. Так что осуждать ребят не могу. Хотя и не согласен. В любом случае, глупо по этой причине прятать свою разработку в стол.

Posted by: moroz on 09-05-2006, 23:35
Выложил инструкцию:
http://morozd.nm.ru/Firmware/ (http://morozd.nm.ru/Firmware/

Posted by: robert7 on 22-05-2006, 01:38
моя идея отпадает: китайцы уже реализовали ее :hi:

Posted by: cax on 22-05-2006, 10:41
Роберт, и в самом деле всё так хорошо ?
Попроси у Мороза дать тебе парочку сложных примеров.
Интересно, справится ли новый китайский код с ними.

Posted by: moroz on 22-05-2006, 15:09
А чего просить? Вся 2-я страница этому делу посвящена.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)