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 |