moroz
@ 01-01-2006, 02:37
При сравнении старой и новой прошивки от APEX DVX - 811, которые любезно предоставили мне grif и Rusk, обнаружилась новая функция. Живет она в ARM коде и вызывается непосредственно перед показом субтитра. Содержит в себе длинный цикл, первым действием которго идет сравнение регистра R0 с 0х80, т.е. проверяется - с нижней или верхней таблицей ASCII имеем дело. Все это, а также то что новая прошивка умеет переворачивать иврит, заставило меня предположить, что найденная функция и является ответственной за данный фичер.
Прилагаю листинг дизассемблера.
P.S. Анализ кода сделан на основе документа "MPEG4 Subtitle Display in ARM", автор New Age
Посмотрел. Сложновато мне...
moroz
@ 01-01-2006, 17:28
Сложновато - в смысле внедрить в другие прошивки? Или в смысле досконально понять саму функцию?
Я её вообще не понимаю, какое уж там досконально. Внедрить без понимания тем более не выйдет.
moroz
@ 01-01-2006, 20:11
Ну конечно выйдет. Я в тебя верю! :)
А если серьезно:
1. Функция не принимает никаких аргументов и ничего не возвращает - это видно из того, как ее вызывают.
2. Внутри функции нет НИ ОДНОЙ внешней ссылки, кроме pARM_Shared_Memory - ее найти не проблема.
Т.е. мы имеем вещь в себе, просто создана для того чтобы ее взяли и перенесли как она есть в другую прошивку. Ты ведь на этом собаку съел. А как именно она работает - не все ли равно?
Не так всё просто - она может и получать аргументы и возвращать результаты при помощи этой самой общей памяти, причём что там где находится зависит от прошивки.
moroz
@ 02-01-2006, 00:16
Пардон, функция принимает аргументы и возвращает значение либо через стек, либо через регистры :actu: . Если ты имел в виду, что она может читать и изменять статическую память (в частности общую) - с этим трудно поспорить: должна же такая функция что-нибудь делать :) .
В нашем конкретном случае нас интересует только структура самого субтитра, который лежит в этой памяти. В данной прошивке выглядит она так:
по оффсету 0 - ничего. По крайней мере я не видел, что кто-то пользуется.
по оффсету 1 - длина субтитра.
по оффсету 2 и далее - непосредственно строка.
Может эта структура отличаться в другой прошивке? Теоретически - да. Практически - вряд-ли. Но даже в этом случае можно будет разницу отследить по тому, как другие известные функции пользуются этой памятью.
Слушай, если ты так хорошо во всём разобрался, почему бы тебе самому не попробовать встроить эту функцию ? Вот лично мне неясно как она определяет, включен иврит или русский (а на апексе переворачивать или не переворачивать определяется именно этим). Даже если я знаю где это определено в меню, я ещё не выяснил как в АРМ получают доступ к выбранному значению. А без этого как я проверю работоспособность непонятного мне куска кода ?
moroz
@ 02-01-2006, 19:29
Да нет, такое мне не под силу. Ну, значить, не судьба покаместь...
moroz
@ 23-02-2006, 21:54
QUOTE |
если этот файл предварительно перевернуть,например,в subfix и использовать затем в двд в котором нет переворота,то всё будет в порядке?Т.е. subfix сумеет упорядочить знаки препинания? |
Я сабфиксом никогда не пользовался, у меня своя утилитка написана. Она это дело специально отлавливает. Самый надежный способ узнать - проверить на практике. Кривой файл у тебя уже есть.
QUOTE |
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, Дай мне,пожалуйста,если можешь, на проверку случаи со скобками, знаками процента и доллара |
Ультимативных проверок у меня нет. Могу предложить простенький тест, на котором я отлаживал свои первые версии. Это "обязательная программа". Каждый уважающий себя алгоритм переворота обязан его выполнить правильно, т.е. на экране строчки должны изображаться точно так же, как они видны, скажем, в ноутпаде. Только обрати внимание, что это неправильный файл. Надо его немного исправить (времена, разбить по 2-3 строчки и т.д)
moroz
@ 23-02-2006, 22:01
Вот еще. Это файл с субтитрами, в котором одна из моих старых версий давала ошибки. Первой строчкой идут названия файлов, а дальше проблемная строчка.
Скобками я пока не занимался, но вот одна такая строка:
( -תורגם ע"י: חומוס_צ'יפס_סלט ( -חומוס
правая скобка может оказаться зеркально развернутой.
Добавлено
О господи, что стряслось с ивритской строкой!!! Ладно, я ее добавил прямо в файл первым номером.
ivani4
@ 23-02-2006, 22:59
moroz
Спасибо за файлы.
Мне не совсем понятно почему в Errors.srt ты создал такое количество строк?Почему нельзя было сразу сделать его 2-3 строчным?
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Интересуют ли тебя результаты моего тестирования?Это я к тому что бы не писать об этом впустую.
QUOTE (ivani4 @ 23-02-2006, 19:59) |
moroz
Интересуют ли тебя результаты моего тестирования?Это я к тому что бы не писать об этом впустую. |
Лично меня - очень интересуют. Думаю, что не ошибусь, если скажу, что moroz-а тоже.
moroz
@ 24-02-2006, 00:09
QUOTE |
Мне не совсем понятно почему в Errors.srt ты создал такое количество строк? |
Просто я проверял алгоритм на своей утилите, а ей без разницы. Извини что заставил тебя поработать.
А результат, конечно, интересует. Но только чтобы он оказался достаточно плохим! :laugh:
ivani4
@ 24-02-2006, 09:05
moroz
Дело не в том что ты заставил меня работать.Просто я не уверен что изменённый мною файл будет выглядеть так как хотелось бы тебе.
moroz
@ 24-02-2006, 09:34
Уговорил. Вот поправленый вариант Test.srt. Кстати, ты наверно имел в виду его, а не Errors.srt. Errors.srt и так 2-3 строчный.
Добавлено
Поправил важный момент в 7 - м субтитре.
ivani4
@ 24-02-2006, 09:53
moroz
Ты понял правильно.Спасибо.
Сделал поверхностную проверку с файлом Errors.srt и уже нашёл чем тебя обрадовать.
В первой ивритской строке одна скобка наоборот.
В последующих местах присутствие в строке английского слова в конце или начале строки не делает проблем.Но если такое слово находится в середине,то балаган.С цифрами проблем не замечено.Продолжаю проверять.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Test.srt.Тремя программами открывается по разному.Напиши мне здесь хотя бы две первые строки что бы я знал как это выглядит у тебя в оригинале.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
QUOTE (ivani4 @ 24-02-2006, 06:53) |
Напиши мне здесь хотя бы две первые строки что бы я знал как это выглядит у тебя в оригинале. |
По-моему этот форум не умеет отображать ничего, кроме русского и английского...
Щаззз попробуем ещё раз:
אבג
CODE |
אבג
|
В общем, договоритесь о программе (ноутпад или ещё чего) которая есть у вас обоих, и обменивайтесь файлами :)
ivani4
@ 24-02-2006, 11:24
moroz,продолжу тебя радовать.
Errors.srt / Замечены проблемы 2/3/12-субтитрах и мне уже совсем не весело.
moroz
@ 24-02-2006, 11:35
Да, в ноутпаде должно быть как надо.
Сделал для проверки картинку Test.srt.
moroz
@ 24-02-2006, 11:46
QUOTE (ivani4 @ 24-02-2006, 09:53) |
присутствие в строке английского слова в конце или начале строки не делает проблем.Но если такое слово находится в середине,то балаган |
А как выглядит балаган? Ивритские части до и после английского слова меняются местами?
P.S. Ухожу в оффлайн, вернусь вечером. Аревуар.
ivani4
@ 24-02-2006, 11:50
moroz
О.К.Спасибо за картинку.
,,,,,,,,,,,,,,,,,,
Errors.srt
В этом файле 256 субтитров.Каждый из них имеет свою особенность?Т.е. если я хочу сделать условно полный тест этого двд,то нужно проверить все 256 вариантов?
ivani4
@ 24-02-2006, 11:51
QUOTE |
А как выглядит балаган? Ивритские части до и после английского слова меняются местами? |
Да,что то вроде этого.
moroz
@ 24-02-2006, 21:17
Я, наверное, нечетко выразился. Errors.srt - не тест.
Чтобы проверить свой алгоритм я беру файлы с субтитрами и переворачиваю сначала своим, а потом родным виндоусовским алгоритмом - и сравниваю строчки. Если вышли разные - записываю в файл. Так что данный Errors.srt - это ошибки одной специфической версии. Среди них конечно есть ошибки одного о того же сорта. Если твой (китайский) алгоритм делает какие-то другие ошибки - ты их не увидишь в этом файле.
QUOTE (moroz @ 24-02-2006, 18:17) |
переворачиваю родным виндоусовским алгоритмом |
Было бы интересно взглянуть на его исходники или декомпилировать :)
ivani4
@ 24-02-2006, 22:40
moroz
Понято.
Я считаю что свою программу минимум я выполнил.Мне нужно было узнать что называется у тебя кривыми файлами и проверить создают ли они проблемы у меня .Глубже копать,по крайней мере сейчас,нет необходимости.Но если тебя заинтересует какой то конкретный момент,то я буду рад для тебя это проверить.
Большое спасибо за присланные файлы и объяснения.
moroz
@ 24-02-2006, 23:21
cax
Майкрософтовские исходники, чего захотел! Я переворачиваю при помощи функции GetCharacterPlacement (может есть еще что-то, я не силен в Винде). Если ты ее декомпилируешь - я сниму шляпу. Ну если нет, то хотя бы уговори ее разворачивать скобки, я не смог :)
ivani4
К твоим услугам. Тебе тоже спасибо, мне было интересно.
ivani4
@ 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:
Lord KiRon
@ 11-04-2006, 09:03
Кстати, не много не в тему но кто может мне тут написать полный "алгоритм" переворота иврита ?
В смысле чтоб типа и буквы и слова а английский и цифры нет ии как там ?
Код,псевдокод, или просто описание по шагам вполне устроят. В принципе можно сделать и самому но для йетого как минимум надо точно знать что нужно делать :)
Lord KiRon, я не думаю, что moroz выложит исходники после того, как достаточно долго пропыхтел над их написанием. А ассемблерный код уже давно в свободном доступе и с анти-коммерческим копирайтом:)
moroz
@ 11-04-2006, 09:54
QUOTE (Lord KiRon @ 11-04-2006, 09:03) |
Кстати, не много не в тему но кто может мне тут написать полный "алгоритм" переворота иврита ? В смысле чтоб типа и буквы и слова а английский и цифры нет ии как там ? Код,псевдокод, или просто описание по шагам вполне устроят. В принципе можно сделать и самому но для йетого как минимум надо точно знать что нужно делать :) |
Вот
полный алгоритм (без кавычек)
http://www.unicode.org/reports/tr9/ (сейчас линк как на зло не открываетася, но это, наверно, временно)
Моя имплементация не имеет с ним ничего общего - по нескольким причинам, в основном - недостаток места.
Если
Lord KiRon любезно укажет конечную цель своего вопроса, то может смогу посоветовать что-то более конкретное. При необходимости можно выложить и исходники, хотя они в таком виде, что мне за них придется краснеть.
Lord KiRon
@ 11-04-2006, 10:42
Исходники мне нафиг не нужны :), хотя спасибо за предложение.
Нужен именно алгоритм а точнее даже не он а просто описание что и "куда" делать :)
Цель весьма проста, разрабы данного чуда (
Topic Link: Zensonic Z500 в Израиле ! ) в близжайшее время будут добавлять поддержку иврита (так они на форуме написали) но как я понял сами они в иврите не бум-бум (понятное дело - Австралийци) то есть "в слепую" могут добавить только фонт и воспроизведение с право налево.
Однако я то видел что йетого мало, и люди не мало на такое нарывались, вот и хотелось бы им запостить как можно более полную и "правильную" версию "алгоритма".
Можно было бы конечно самому посидеть с компом и "разработать" но зачем изобретать велосипед если есть "готовое" :)
moroz
@ 11-04-2006, 12:23
QUOTE |
Нужен именно алгоритм а точнее даже не он а просто описание что и "куда" делать |
Пардон, не до конца понял фразу. Что же тогда алгоритм, если не "описание что и "куда" делать". Боюсь, что если разрабы подходят к делу серьезно и хотят полную имплементацию - придется им изучить официальный алгоритм. Любое отступление от него будет чревато неправильным отображением текста - в большей или меньшей степени. Надеюсь, ссылка скоро оживет (или это только у меня проблема?)
А по поводу бескорыстной помощи австралийским товарищам - не хочу показаться невежливым, но по моему личному мнению надо проводить четкую грань между коммерческой и энтузиастской деятельностью. Твои разрабы явно представляют первую категорию, а это значит, что они либо должны справиться сами, либо нанять консультанта.
В связи с исторически сложившейся ситуацией с ивритскими субтитрами, во-первых обычного алгоритма с unicode.org будет недостаточно, т.к. есть достаточно много распространённых в сети файлов субтитров, с которыми их алгоритм не справится,
во-вторых у людей на руках уже есть полно дисков с субтитрами, уже перекодированными различными способами, которые тоже желательно поддерживать. Два самых популярных из них - это "развёрнутые субтитры" и т.н. "Encoded", где ивритские субтитры располагаются на месте заглавных английских букв.
Универсальной поддержкой ивритских субтитров будет обладать только тот плейер, который поддерживает всё выше сказанное.
Кроме того, есть ещё нерешённая пока проблема правильного переноса со строки на строку ивритских и смешанных (иврит + английский) субтитров, который также нужно подстраивать под все упомянутые выше случаи...
Кстати, господа хорошие, а вам не кажется странным, что мы, русскоговорящие и русскочитающие, занимаемся решением проблемы показа субтитров на иврите ? Уж кто-кто, а мы в первую очередь, по идее, должны интересоваться русскими субтитрами.
Вот так дела - спасением Израиля от злобных ивритских субтитров занимаются китайцы и русские :)
Lord KiRon
@ 11-04-2006, 13:33
Под "алгоритмом" я имел в виду описание "правильного поведения", то есть например даже я знаю что срочку надо выводить начиная с конца (то есть справа) а английские слова переворачивать не надо, ну и так далее...
Так вот что именно "так далие" мне и надо, а имплементацию пусть они сами делают,за то им и бабки платят.
Просто как люди не читающие иврит понять сами "правильно ли оно выглядит на экране" не смогут.
А насчёт "бескорыстной помощи" , справятся они, а как же, а потом надо будет писать прогу чтоб в "их формат" переводила для нормального отображения.
Как я уже сказал нужен не сам алгоритм а описание "как это правильно должно работать" так сказать для "фиче реквеста".
Lord KiRon
@ 11-04-2006, 13:34
QUOTE (cax @ 11-04-2006, 12:26) |
Уж кто-кто, а мы в первую очередь, по идее, должны интересоваться русскими субтитрами.
|
С рускими то проблем нет - фонты поменял и работает, а с ивритом ...
moroz
@ 11-04-2006, 14:51
Вот, спасибо Гуглу за то, что он кеширует все, что найдет :)
http://72.14.203.104/search?q=cache:qQ1gm7fWdvUJ:www.unic...l=iw&gl=il&ct=clnk&cd=1Здесь написано что, где, куда (кроме всего, что перечислил
cax). Любое другое объяснение - укороченная и неполная версия того же. К тому же нет у меня этого упрощенного набора правил. Я же как: сталкивался с проблемой, разбирался, соответствующе исправлял свой код. Сейчас я всего уже просто не помню.
moroz
@ 11-04-2006, 15:04
QUOTE (cax @ 11-04-2006, 13:26) |
Кстати, господа хорошие, а вам не кажется странным, что мы, русскоговорящие и русскочитающие, занимаемся решением проблемы показа субтитров на иврите ? Уж кто-кто, а мы в первую очередь, по идее, должны интересоваться русскими субтитрами.
Вот так дела - спасением Израиля от злобных ивритских субтитров занимаются китайцы и русские :) |
Кажется, среди нас завелись евреи :fear2:
Что поделать, если великий и могучий в области субтитров представлен гораздо беднее, чем хилый но святой. Предпочитаю ломать глаза, но не слушать гнусавый дубляж.
Lord KiRon
@ 11-04-2006, 16:10
Ладно, спасибо, кину им на форуме линк - пусть мучаются :)
robert7
@ 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, может твоя функция влезет?
В том месте, где "divide by zero", мы проанализировали код и пришли к выводу, что вместе с сообщениями можно откусить и кусок кода, и тогда места становится где-то 0x1C0 байт.
Где и как - наизусть не помню, но если сравнишь, скажем, последнюю прошивку Юндай с оригинальной или предыдущей, то увидишь всё сам.
moroz
@ 08-05-2006, 21:28
robert7
Каким-то образом пропустил твой пост, хотя стараюсь следить. Только сейчас случайно заметил. Виноват.
Надеюсь, совет caxа помог и свободное место нашлось. В любом случае на мой взгляд не стоит употреблять эту функцию. Она же из твоего Апекс 811, народ ее ругал за неверную пунктуацию и еще что-то, ну ты сам знаешь.
Зато, конечно, могу от всей души рекомендовать собственное творение :wink: Скоро выложу коротенькую инструкцию по его внедрению - думаю, тебе будет как раз.
robert7
@ 09-05-2006, 14:15
Moroz, эта функция работает отлично - справляется со всем кроме скобок, точки ставит с нужной стороны, английский и цифры показывает правильно (она из старой версии прошивки, за 12/2005). В новых версиях используется другая функция - плохая. Я хочу просто пересадить эту функцию в новую прошивку вместо плохой функции (котороя ставит точки не с той стороны)- кроме изменения адреса BL и 1 pointer все подходит. Только не влезает, а эксперементировать боюсь - нет кабеля.
и еще вопрос - как искать выбор языка (фонта) - апекс 811 НЕ использует для этого PrefGetChar (я просмотрел все вызова этой функции во всем 8032, больше всего запрашивается OSDlanguage).
Вот поэтому я и боюсь новых прошивок - там всё иначе, и большая часть того, что я умел до сих пор, неприменима к ним. Куда проще пересадить RISC из новой прошивки (не обязательно родной) в старый 8032. За исключением некоторых мелочей, должно всё работать.
А поскольку Апекс 811 имеет 8M DRAM, его можно научить понимать одновременно и Nero Digital, и OGM/OGG, и многое другое. Правда, для таких экспериментов с пересадкой необходим кабель.
По поводу того, какую процедуру использовать: в новом коде Мороза есть перенос со строки на строку как для английского, так и для иврита, плюс поддержка т.н. "Encode". Насколько мне известно, китайцы такое не написали и не напишут.
Мы тоже начинали с попыток пересадки готового кода, а закончили написанием своего.
moroz
@ 09-05-2006, 20:33
robert7
QUOTE |
Только не влезает, а эксперементировать боюсь - нет кабеля. |
Таки плохо. Разбить ее на две части - каторжная работа. Куча переходов. Могу только предложить тебе потерпеть еще чуть-чуть, пока я не выложу инструкцию с моим кодом. Он легко делится на две части - всего один переход.
Помнится мне, кто-то тут очень не хотел облагораживать активно продаваемые плейеры :)
moroz
@ 09-05-2006, 22:58
Ну, поймал меня :actu: Нет, я действительно считаю, что это неправильно, и неоднократно об'яснял почему. С другой стороны, будь у меня такой плеер, я бы наверно для себя его все-таки облагородил. А тогда бы, конечно, и прошивку выложил. Так что осуждать ребят не могу. Хотя и не согласен. В любом случае, глупо по этой причине прятать свою разработку в стол.
moroz
@ 09-05-2006, 23:35
robert7
@ 22-05-2006, 01:38
моя идея отпадает: китайцы уже реализовали ее :hi:
Роберт, и в самом деле всё так хорошо ?
Попроси у Мороза дать тебе парочку сложных примеров.
Интересно, справится ли новый китайский код с ними.
moroz
@ 22-05-2006, 15:09
А чего просить? Вся 2-я страница этому делу посвящена.