Initial firmware commit as of 24/11/2011
|
@ -0,0 +1,15 @@
|
||||||
|
[submodule "src/contrib/libdvdnav"]
|
||||||
|
path = src/contrib/libdvdnav
|
||||||
|
url = https://github.com/xbmc/libdvdnav
|
||||||
|
[submodule "src/contrib/libdvdcss"]
|
||||||
|
path = src/contrib/libdvdcss
|
||||||
|
url = https://github.com/xbmc/libdvdcss
|
||||||
|
[submodule "src/contrib/libid3tag"]
|
||||||
|
path = src/contrib/libid3tag
|
||||||
|
url = https://github.com/tenacityteam/libid3tag
|
||||||
|
[submodule "src/contrib/libjpeg"]
|
||||||
|
path = src/contrib/libjpeg
|
||||||
|
url = https://github.com/thorfdbg/libjpeg
|
||||||
|
[submodule "src/contrib/libmad"]
|
||||||
|
path = src/contrib/libmad
|
||||||
|
url = https://github.com/markjeee/libmad
|
|
@ -0,0 +1,92 @@
|
||||||
|
Индексы в АВИ.
|
||||||
|
|
||||||
|
ВНИМАНИЕ!!!!!!!!!!!! ИНДЕКС - БЕЗ ДЫРОК!!!!!!!!!
|
||||||
|
|
||||||
|
Варианты:
|
||||||
|
1) у файла нет индексов
|
||||||
|
2) есть только расширенный индекс (indx)
|
||||||
|
3) есть обычный индекс:
|
||||||
|
а)
|
||||||
|
- оффсеты относительные (с начала movi)
|
||||||
|
- оффсеты абсолютные (с начала файла)
|
||||||
|
б)
|
||||||
|
- кейфреймам можно доверять
|
||||||
|
- кейфреймам нельзя доверять
|
||||||
|
|
||||||
|
Из этого всего нам нужно строить наш внутренний индекс.
|
||||||
|
|
||||||
|
---------------------------------
|
||||||
|
индекс нужен:
|
||||||
|
1) для перемотки вперед
|
||||||
|
2) для перемотки назад
|
||||||
|
3) для поиска
|
||||||
|
|
||||||
|
ВСЕ ключевые кадры, на которых мы были (при проигрывании), попадают в индекс!
|
||||||
|
|
||||||
|
------------------------------
|
||||||
|
А МОЖЕТ, НАМ НУЖЕН ЕДИНЫЙ СВЯЗАННЫЙ СПИСОК КЛЮЧЕВЫХ КАДРОВ??!
|
||||||
|
- плюсы:
|
||||||
|
- легко вставлять кадры произвольно, не надо аллокейтить лишнее место
|
||||||
|
- можно использовать единую кучу-хранилище кадров, и делать ссылки на неё в связанном списке
|
||||||
|
- список только растёт, не надо ничего удалять.
|
||||||
|
- минусы:
|
||||||
|
- нужна доп. инфа о том, является ли след./пред. кадр действительно следующим, или между ними
|
||||||
|
могут быть ещё кадры
|
||||||
|
- для поиска нужно обойти в цикле весь список
|
||||||
|
= ДА!
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
ИНДЕКС = связанный список КЛЮЧЕВЫХ КАДРОВ
|
||||||
|
|
||||||
|
КЛЮЧЕВОЙ КАДР:
|
||||||
|
- абс. номер кадра, int
|
||||||
|
* по номеру определяем время кадра (pts)
|
||||||
|
* находим данные в индексах AVI
|
||||||
|
- смещение к этому кадру относительно начала файла, int64
|
||||||
|
- индексы к next,prev, int
|
||||||
|
* старший бит = 1 --> между ними больше нет кадров
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
ЗАДАЧИ:
|
||||||
|
1) добавлять в индекс текущий (проигрываемый) ключевой кадр
|
||||||
|
2) искать и добавлять следующий(-ие)/предыдущий(-ие) КК
|
||||||
|
3) искать и добавлять КК по временной метке
|
||||||
|
|
||||||
|
ЗАДАЧА 1.
|
||||||
|
- храним указатель на последний проигрываемый кадр
|
||||||
|
- ищем след. кадр в индексе, больший по номеру, чем текущий.
|
||||||
|
- если текущего в индексе нет, вставляем его перед следущим.
|
||||||
|
- присваиваем: последний = текущий.
|
||||||
|
|
||||||
|
ЗАДАЧА 2.
|
||||||
|
1) Если AVI-индекса нет, то:
|
||||||
|
- предыдущий кадр искать не надо - он уже должен быть в списке
|
||||||
|
(мы не могли прыгнуть, не заполнив весь индекс от начала до текущего момента)
|
||||||
|
- для след.кадра - идём по файлу вперёд, кадр за кадром, ищем ключевой
|
||||||
|
- добавляем его в индекс, если его ещё нет (см. флаг в next/prev).
|
||||||
|
2) Если есть AVI-индекс, то:
|
||||||
|
- прыгаем к данным индекса по номеру текущего кадра
|
||||||
|
- читаем блок данных для последующих/предыдущих индексов
|
||||||
|
- находим в блоке все ключевые кадры
|
||||||
|
- добавляем их в наш индекс, если их там ещё нет (см. флаги в next/prev).
|
||||||
|
|
||||||
|
ЗАДАЧА 3.
|
||||||
|
- вначале пробегаем индекс и ищем 2 КК, между которыми должна находится временная метка.
|
||||||
|
если между ними больше нет кадров, возвращаем 1-й.
|
||||||
|
- иначе:
|
||||||
|
1) Если AVI-индекса нет, то:
|
||||||
|
- в индексе ищем ближайший к временной метке КК (перед).
|
||||||
|
- сканируем, начиная с него, вперёд все кадры, и ищем КК _после_ временной метки.
|
||||||
|
- добавляем всех их в индекс
|
||||||
|
- возвращаем предпоследний КК.
|
||||||
|
2) Если есть AVI-индекс, то:
|
||||||
|
- в индексе ищем ближайший к временной метке КК (перед).
|
||||||
|
- прыгаем к данным индекса по этому номеру КК
|
||||||
|
- загружаем весь индекс, начиная с него блоками
|
||||||
|
- парсим блоки и добавляем все КК, пока не встретим номер кадра, больший чем временная метка
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
Задача: транскодировать поток дивх3 в мпег4.
|
||||||
|
Поток состоит из отдельных кадров, каждый из которых транскодируется независимо. Задача сводится к транскодированию кадра.
|
||||||
|
|
||||||
|
Чтобы это сделать, надо дать ответы на 2 вопроса:
|
||||||
|
1) Что именно хранится в кадре
|
||||||
|
2) Как именно хранится.
|
||||||
|
Ответ на 1-й вопрос _почти_ одинаков для дивх3 и мпег4.
|
||||||
|
Ответ на 2-й вопрос - существенные отличия.
|
||||||
|
|
||||||
|
Хранятся данные в виде последовательности битов. Суть процесса - прочитать биты кадра дивх3, понять, что именно там хранится, и записать это в виде битов в формате мпег4
|
||||||
|
|
||||||
|
Кадр делится на макроблоки размером 16 x 16 пикселей.
|
||||||
|
Кадр хранит:
|
||||||
|
- заголовок (хранится тип кадра, индексы в таблицы с данными, необходимые для работы и т.п.)
|
||||||
|
- данные всех макроблоков.
|
||||||
|
|
||||||
|
Т.е. фильм разрешения 640x480 содержит 40*30=1200 макроблоков в каждом кадре.
|
||||||
|
|
||||||
|
Каждый макроблок (в дальнейшем - МБ) хранит:
|
||||||
|
- заголовок МБ
|
||||||
|
- 6 каналов данных (4 на яркость и 2 на цветность)
|
||||||
|
|
||||||
|
МБ может быть двух видов:
|
||||||
|
- интра (независим от других кадров)
|
||||||
|
- интер (строится на основе предыдущих кадров)
|
||||||
|
Кадры I-frame состоят только из интра-макроблоков, а кадры P-frame могут иметь как те, так и другие.
|
||||||
|
|
||||||
|
Данные каждого канала МБ зависят от типа МБ:
|
||||||
|
- для интра-МБ хранится DC-уровень (что-то типа "усреднённого цвета" блока) и AC-коэффициенты (отклонения от этого уровня)
|
||||||
|
- для интер-МБ хранится вектор движения (т.е. куда мы должны передвинуть старый МБ, чтобы получить нынешний) и AC-коэффициенты (чтобы устранить огрехи при таком передвижении и добавить новые детали картинки)
|
||||||
|
Т.е. общий принцип хранения данных - базовое значение и данные для его коррекции.
|
||||||
|
|
||||||
|
И это справедливо и для дивх3, и для мпег4. Более того, похожий принцип работает и в mpeg1-2.
|
||||||
|
|
||||||
|
Стандарт мпег4 умеет больше, но мы это не рассматриваем. Я рассказываю лишь в рамках, необходимых для транскодера.
|
||||||
|
|
||||||
|
АС-коэффициенты - это как раз то, где заложен "битрейт". Чем больше этих коэффициентов, тем более качественное видео, и тем больше оно занимает. Эти коэффициенты как бы распределяются между всеми пикселями - каждому пикселю достаётся чуть-чуть. Если захочешь узнать про это побольше, вот ключевые слова:
|
||||||
|
- дискретное косинусное преобразование (DCT)
|
||||||
|
- преобразование Фурье
|
||||||
|
|
||||||
|
Далее. Основные уровни DC и motion vectors (MV) записываются не напрямую. Для каждого нового МБ по специальному алгоритму определяется "предсказание" - т.е. какое бы там могло бы быть значение DC или MV (на основании соседних МБ и МБ нескольких прошлых кадров). И записывается разница между предсказанным и реальным.
|
||||||
|
Поэтому, для декодирования, чтобы получить реальное значение этих уровней, нужно параллельно тоже делать предсказания, чтобы прибавить к ним записанную разницу.
|
||||||
|
|
||||||
|
Все эти исхищрения делаются только с одной целью - чтобы записанные в файл данные занимали как можно меньше. Достигается это с помощью особого метода кодирования этих всех чисел. Называется оно: "код переменной длины" (VLC), и используется во всех алгоритмах сжатия данных. Смысл в том, что разные числа кодируются разным количеством бит.
|
||||||
|
|
||||||
|
Все числа в потоке бит идут одно за другим, но, поскольку каждое занимает разное число бит, нам необходимо читать их все подряд. Если хотя бы в одном числе ошибка - все остальные числа будут прочитаны совершенно другими.
|
||||||
|
|
||||||
|
Для работы этого кодирования нужны VLC-таблицы, которые говорят, какие числа какой последовательностью бит кодировать.
|
||||||
|
Вот вроде бы и всё.
|
||||||
|
Теперь какие отличия. Отличаются:
|
||||||
|
- формат записи заголовков кадров и МБ
|
||||||
|
- методы предсказания DC и MV
|
||||||
|
- порядок следования AC-коэффициентов
|
||||||
|
- VLC-таблицы
|
||||||
|
|
||||||
|
-------------------------------------
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
|
||||||
|
В рамках тестирования плеерного кода нашей прошивки провёл
|
||||||
|
маленький эксперимент, связанный с программным отключением.
|
||||||
|
(см. также опрос на сайте).
|
||||||
|
|
||||||
|
Померял (косвенно и очень грубо, погрешность оценить трудно ;-))
|
||||||
|
потребляемую мощность плеера (даю средние значения):
|
||||||
|
1. "Родная" прошивка.
|
||||||
|
- включен, в ждущем режиме: [b]12.5[/b] Вт
|
||||||
|
- проигрывание DVD: [b]14..15[/b] Вт (*)
|
||||||
|
- отключен по кнопке пульта ДУ
|
||||||
|
- с диском: [b]13,2[/b] Вт
|
||||||
|
- без диска: [b]11,4[/b] Вт
|
||||||
|
|
||||||
|
2. Наша прошивка.
|
||||||
|
- включен, в ждущем режиме: [b]12,6[/b] Вт
|
||||||
|
- проигрывание DVD: [b]14..15[/b] Вт (*)
|
||||||
|
- отключен по кнопке пульта ДУ
|
||||||
|
- с диском: [b]11,4[/b] Вт (**)
|
||||||
|
- без диска: [b]11,4[/b] Вт
|
||||||
|
|
||||||
|
3. Процесс прошивки (flash): [b]14.5[/b] Вт
|
||||||
|
|
||||||
|
(*) - сильно колеблется в зависимости от потребления DVD-привода.
|
||||||
|
(**) - это стало возможным благодаря специально сделанной программной
|
||||||
|
остановке шпинделя привода при переходе в спящий режим.
|
||||||
|
|
||||||
|
Температурные режимы процессора не мерял, но на ощупь, в спящем режиме
|
||||||
|
процессор заметно холоднее, как и должно быть (и как у родной прошивки)
|
||||||
|
- в основном, я думаю, за счёт отключения видео-тракта.
|
||||||
|
|
||||||
|
Выводы:
|
||||||
|
1) Энергосберегающие возможности спящего режима нашей прошивки не хуже
|
||||||
|
"родной", и кнопкой Power можно пользоваться.
|
||||||
|
2) При выключении с пульта (спящий режим) с диском внутри
|
||||||
|
энергопотребление у нашей прошивки сравнимо со спящим режимом без диска,
|
||||||
|
шум также отсутствует. Это, как мне кажется, - очко в пользу нашей прошивки
|
||||||
|
по сравнению с "родной".
|
||||||
|
3) Кое-какие тонкости отключения, сделанные в "родной" прошивке, могли быть
|
||||||
|
упущены. В первую очередь, это касается DVI-выхода, которого у меня нет.
|
||||||
|
Также не уверен на счёт SCART'а.
|
|
@ -0,0 +1,183 @@
|
||||||
|
ÀËÃÎÐÈÒÌ:
|
||||||
|
- ÷èòàåì âåñü ôàéë â ïàìÿòü
|
||||||
|
- äåòåêòèì òèì ïóáòèòðîâ ïî ïåðâûì 512 áàéòàì. Ïðîáåãàåì ïîáàéòîâî ïî äàííûì, äëÿ êàæäîãî èç ôîðìàòîâ ñóáòèòðà.
|
||||||
|
- òîò ôîðìàò, êîòîðûé îêàçàëñÿ _ïåðâûì_ è åñòü èñêîìûé ôîðìàò.
|
||||||
|
- åñëè ÍÅÏÓÑÒÛÅ ñóáòèòðû ïåðåñåêàþòñÿ, íàäî ñêëåèâàòü èõ (ïðîâåðÿòü â îòäåëüíîì ïðîõîäå).
|
||||||
|
- åñëè 2 ñóáòèòðà èäóò â îäíî è òî æå âðåìÿ, òî íàäî ïîêàçûâàòü èõ ïî î÷åðåäè êàäð çà êàäðîì (à íå âñå ñðàçó)
|
||||||
|
(íåêîòîðûå ñóáòèòðû â ôàéëàõ - ñ òî÷íîñòüþ äî ñåêóíäû, è ïðîèñõîäÿò íàêëàäêè)
|
||||||
|
- ðàáîòàåì ïðèìåðíî òàê:
|
||||||
|
1) çàäà¸ì ôèëüòð äëÿ ïîèñêà çàïèñè â âèäå íàáîðà ëåêñåì (ìàññèâ).
|
||||||
|
- ëåêñåìà = íàáîð ñïåö.ñèìâîëîâ ìàñêè:
|
||||||
|
0 = ÷èñëî
|
||||||
|
1 = 1 öèôðà
|
||||||
|
2 = 2 öèôðû
|
||||||
|
...
|
||||||
|
" " = ïðîáåë
|
||||||
|
\n = \n
|
||||||
|
- ñòðîêà?
|
||||||
|
- äëÿ êàæäîé ëåêñåìû çàäà¸ì:
|
||||||
|
- êàê òðàêòîâàòü çíà÷åíèå
|
||||||
|
- íèêàê
|
||||||
|
- ñåêóíäà íà÷àëà
|
||||||
|
- ìèíèñåêóíäà êîíöà
|
||||||
|
- äåëüòà âðåìåíè íà÷àëà
|
||||||
|
...
|
||||||
|
- ôëàãè
|
||||||
|
- îáÿçàòåëüíî ëè äîëæíà ïðèñóòñòâîâàòü
|
||||||
|
-
|
||||||
|
|
||||||
|
===========================================================
|
||||||
|
Ðàçäåëèòåëè ñòðîê:
|
||||||
|
"\n", "|", "[br]", "\\N"
|
||||||
|
|
||||||
|
===========================
|
||||||
|
|
||||||
|
ÂÈÄÛ ÑÓÁÒÈÒÐÎÂ:
|
||||||
|
|
||||||
|
1) SubRip (.srt)
|
||||||
|
------------------------------------
|
||||||
|
408
|
||||||
|
00:57:23,678 --> 00:57:29,845
|
||||||
|
I've been looking for you for two days. There are five
|
||||||
|
wraiths behind you. Where the other four are I do not know.
|
||||||
|
|
||||||
|
------------------------------------
|
||||||
|
SUB_SECTION_START:
|
||||||
|
{ SUB_TOKEN_HOUR1, ":", SUB_TOKEN_MIN1, ":", SUB_TOKEN_SEC1, SUB_TOKEN_OPTIONAL_NEXT, ",", SUB_TOKEN_OPTIONAL_NEXT, SUB_TOKEN_MSEC1," --> ",
|
||||||
|
SUB_TOKEN_HOUR2, ":", SUB_TOKEN_MIN2, ":", SUB_TOKEN_SEC2, SUB_TOKEN_OPTIONAL_NEXT, ",", SUB_TOKEN_OPTIONAL_NEXT, SUB_TOKEN_MSEC2, "\n",
|
||||||
|
NULL
|
||||||
|
}
|
||||||
|
|
||||||
|
SUB_SECTION_END:
|
||||||
|
"\n\n"
|
||||||
|
|
||||||
|
2) SubViewer 1.0 (.sub)
|
||||||
|
------------------------------------
|
||||||
|
[00:57:23]
|
||||||
|
I've been looking for you for two days. There are five |wraiths behind you. Where the other four are I do not know.
|
||||||
|
------------------------------------
|
||||||
|
SUB_SECTION_START:
|
||||||
|
{ "[", SUB_TOKEN_HOUR1, ":", SUB_TOKEN_MIN1, ":", SUB_TOKEN_SEC1, "]\n",
|
||||||
|
NULL
|
||||||
|
}
|
||||||
|
|
||||||
|
SUB_SECTION_END:
|
||||||
|
"\n["
|
||||||
|
|
||||||
|
3) SubViewer 2.0 (.sub)
|
||||||
|
------------------------------------
|
||||||
|
00:57:23.67,00:57:29.84
|
||||||
|
I've been looking for you for two days. There are five [br]wraiths behind you. Where the other four are I do not know.
|
||||||
|
|
||||||
|
------------------------------------
|
||||||
|
SUB_SECTION_START:
|
||||||
|
{ SUB_TOKEN_HOUR1, ":", SUB_TOKEN_MIN1, ":", SUB_TOKEN_SEC1, ".", SUB_TOKEN_DSEC1, ",",
|
||||||
|
SUB_TOKEN_HOUR2, ":", SUB_TOKEN_MIN2, ":", SUB_TOKEN_SEC2, ".", SUB_TOKEN_DSEC2, "\n",
|
||||||
|
NULL
|
||||||
|
}
|
||||||
|
|
||||||
|
SUB_SECTION_END:
|
||||||
|
"\n\n"
|
||||||
|
|
||||||
|
4) DVDSubtitle (.sub)
|
||||||
|
------------------------------------
|
||||||
|
{T 00:00:21:51
|
||||||
|
this is a test!
|
||||||
|
}
|
||||||
|
------------------------------------
|
||||||
|
SUB_SECTION_START:
|
||||||
|
{ "{T ", SUB_TOKEN_HOUR1, ":", SUB_TOKEN_MIN1, ":", SUB_TOKEN_SEC1, ":", SUB_TOKEN_DSEC1, "\n",
|
||||||
|
NULL
|
||||||
|
}
|
||||||
|
SUB_SECTION_END:
|
||||||
|
"}"
|
||||||
|
|
||||||
|
5) DVD Architect (.sub)
|
||||||
|
------------------------------------
|
||||||
|
0407 00:57:23:67 00:57:29:84 I've been looking for you for two days. There are five
|
||||||
|
wraiths behind you. Where the other four are I do not know.
|
||||||
|
------------------------------------
|
||||||
|
SUB_SECTION_START:
|
||||||
|
{ SUB_TOKEN_SKIP_DIGITS_4, "\t", SUB_TOKEN_HOUR1, ":", SUB_TOKEN_MIN1, ":", SUB_TOKEN_SEC1, ":", SUB_TOKEN_DSEC1, "\t",
|
||||||
|
SUB_TOKEN_HOUR2, ":", SUB_TOKEN_MIN2, ":", SUB_TOKEN_SEC2, ":", SUB_TOKEN_DSEC2, "\t",
|
||||||
|
NULL
|
||||||
|
}
|
||||||
|
|
||||||
|
SUB_SECTION_END:
|
||||||
|
"\n\n"
|
||||||
|
|
||||||
|
6) MicroDVD (.sub)
|
||||||
|
------------------------------------
|
||||||
|
{1}{1}29.997
|
||||||
|
{103300}{103485}I've been looking for you for two days. There are five |wraiths behind you. Where the other four are I do not know.
|
||||||
|
------------------------------------
|
||||||
|
* N = secs*25.000+msecs*25.000/1000
|
||||||
|
SUB_SECTION_START:
|
||||||
|
{ "{", SUB_TOKEN_FRAMES1, "}{", SUB_TOKEN_FRAMES2, "}",
|
||||||
|
NULL
|
||||||
|
}
|
||||||
|
SUB_SECTION_END:
|
||||||
|
"\n"
|
||||||
|
|
||||||
|
7) MPSub (.sub)
|
||||||
|
------------------------------------
|
||||||
|
1.67 6.17
|
||||||
|
I've been looking for you for two days. There are five
|
||||||
|
wraiths behind you. Where the other four are I do not know.
|
||||||
|
|
||||||
|
------------------------------------
|
||||||
|
* 1st - delta_T (in secs) to wait
|
||||||
|
* 2nd - delta_T (in secs) to display
|
||||||
|
SUB_SECTION_START:
|
||||||
|
{ SUB_TOKEN_DELTA_SECS1, " ", SUB_TOKEN_DELTA_SECS2, "\n",
|
||||||
|
NULL
|
||||||
|
}
|
||||||
|
SUB_SECTION_END:
|
||||||
|
"\n\n"
|
||||||
|
|
||||||
|
=================================================
|
||||||
|
|
||||||
|
8) TMPlayer (.sub)
|
||||||
|
------------------------------------
|
||||||
|
00:57:23,1=I've been looking for you for two days. There are five
|
||||||
|
00:57:23,2=wraiths behind you. Where the other four are I do not know.
|
||||||
|
00:57:29,1=
|
||||||
|
00:57:29,2=
|
||||||
|
------------------------------------
|
||||||
|
SUB_SECTION_START:
|
||||||
|
{
|
||||||
|
SUB_TOKEN_HOUR1, ":", SUB_TOKEN_MIN1, ":", SUB_TOKEN_SEC1, ",", SUB_TOKEN_LINE_NUMBER, "=",
|
||||||
|
NULL
|
||||||
|
}
|
||||||
|
SUB_SECTION_END:
|
||||||
|
"\n"
|
||||||
|
|
||||||
|
9) SubSonic (.sub)
|
||||||
|
------------------------------------
|
||||||
|
1 115.68 \ ~:\I've been looking for you for two days. There are five wraiths behind you. Where the other four are I do not know.
|
||||||
|
1 121.84
|
||||||
|
------------------------------------
|
||||||
|
***** ïåðèîä â 256 ñåêóíä?
|
||||||
|
SUB_SECTION_START:
|
||||||
|
{
|
||||||
|
"1 ", SUB_TOKEN_SEC1_256, ".", SUB_TOKEN_DSEC1_256, SUB_TOKEN_SKIP_NEXT_FOR_2, " \ ~:\",
|
||||||
|
NULL
|
||||||
|
}
|
||||||
|
SUB_SECTION_END:
|
||||||
|
"\n"
|
||||||
|
|
||||||
|
10) SubStation Alpha (.ssa)
|
||||||
|
------------------------------------
|
||||||
|
Dialogue: Marked=0,0:57:23.67,0:57:29.84,Default,NTP,0000,0000,0000,!Effect,I've been looking for you for two days. There are five \Nwraiths behind you. Where the other four are I do not know.
|
||||||
|
------------------------------------
|
||||||
|
SUB_SECTION_START:
|
||||||
|
{
|
||||||
|
SUB_TOKEN_SKIP_TO_NEXT, ",", SUB_TOKEN_HOUR1_1, ":", SUB_TOKEN_MIN1, ":", SUB_TOKEN_SEC1, ".", SUB_TOKEN_DSEC1, ",",
|
||||||
|
SUB_TOKEN_HOUR2_1, ":", SUB_TOKEN_MIN2, ":", SUB_TOKEN_SEC2, ".", SUB_TOKEN_DSEC2, ",",
|
||||||
|
SUB_TOKEN_SKIP_TO_NEXT, ",", SUB_TOKEN_SKIP_TO_NEXT, ",", SUB_TOKEN_SKIP_TO_NEXT, ",",
|
||||||
|
SUB_TOKEN_SKIP_TO_NEXT, ",", SUB_TOKEN_SKIP_TO_NEXT, ",", SUB_TOKEN_SKIP_TO_NEXT, ",",
|
||||||
|
NULL
|
||||||
|
}
|
||||||
|
SUB_SECTION_END:
|
||||||
|
"\n"
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
- возможность подключить жёсткий диск к вашему плееру: полноценная поддержка нескольких разделов в NTFS и FAT
|
||||||
|
- поддержка файлов AVI размером более 2 Гбайт
|
||||||
|
- окошко поиска по фильмам AVI и DVD имеет расширенный интерфейс
|
||||||
|
- более быстрая перемотка для фильмов AVI
|
||||||
|
- более быстрое воспроизведение фильмов с видео-кодеком DivX3
|
||||||
|
- при выключении плеера с пульта, плеер не шумит (если был вставлен диск) и меньше греется во время сна
|
||||||
|
- список файлов имеет полосу прокрутки для более удобной навигации
|
||||||
|
- главное: непрекращающаяся поддержка прошивки со стороны разработчиков :-)
|
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 927 B |
After Width: | Height: | Size: 982 B |
After Width: | Height: | Size: 906 B |
After Width: | Height: | Size: 44 KiB |
After Width: | Height: | Size: 69 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 932 B |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 896 B |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 930 B |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 990 B |
After Width: | Height: | Size: 3.8 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 7.6 KiB |
After Width: | Height: | Size: 838 B |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 1014 B |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 71 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 917 B |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 902 B |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.6 KiB |