motofan logo
181 страниц V « < 170 171 172 173 174 > »         
> 

Софт для ZN5 и прочих MotoMAGX: MGX и PEP, Разработка, портирование и обсуждение нативного софта

EXL
сообщение 26.8.2011, 12:34 Закрепленное сообщение!


Rock The Microphone
********

Группа: Администраторы
Сообщений: 2 961
Регистрация: 12.5.2007
Из: г. Новосибирск
Пользователь №: 134 652

Рейтинг: 4609



Мануал: Компиляция приложений для MotoMAGX OS, создание пакетов

Прикрепленное изображение

Для портирования и сборки приложений для нашей платформы в первую очередь нам нужны:

1. Компьютер с Linux OS. Или Windows OS с установленным Virtual BOX/VMware Player, в крайнем случае под виндой можно воспользоваться AndLinux'ом или Cygwin'ом.
2. SDK & Toolchains для MotoMagX + Исходники программ/приложений.
3. Программист/Разработчик или начинающий программист (1 шт.).

Я рассмотрю наиболее приемлемый многим начинающим разработчикам способ, с использованием популярного дистрибутива Ubuntu 11 (Linux OS) в виртуальной машине VMware Player в Windows OS. Те пользователи, у которых стоит Linux OS на компе, могут скачать SDK & Toolchains | Зеркало | Зеркало | Зеркало и сразу перескочить на пункт #4.

Итак, начнём:

1. Загрузка необходимых для разработки инструментов и файлов:

1.1. Скачиваем ISO-образ диска Ubuntu 11. Я качал себе в городской сетке, пошарьтесь в своих тоже, может найдёте. На всякий случай, ссылка: [Download | Скачать] на скачивание с официального сайта: http://www.ubuntu.com Там вы можете выбрать любую конфигурацию под свой компьютер (amd/i386) и т.д.

1.2. Скачиваем VMware Player - Скачать можно с официального сайта: [Download | Скачать] или тут: [Mirror | Зеркало]

1.3. Скачиваем SDK & Toolchains для MotoMagX. [Download | Скачать] - полная версия, включающая в себя 2 тулчейна SDL (От испанцев) + QT (От Ant-On'a) а также python, bennugd, boost и множество различных библиотек. Инструкция по установке есть внутри или ниже можно прочитать подробно.
Тем, кто хочет разрабатывать приложения на SDL, можно скачать небольшой тулчейн для сборки приложений: [Download | Скачать] [Mirror | Зеркало]

2. Мануалы по установке VMware, Ubuntu и SDK & Toolchains в картинках:*
* - картинки открывать лучше всего в новом окне, нажав колёсико мышки. После открытия воспользуйтесь масштабированием, например, в стандартном просмоторщике картинок.

2.1. Установка программы VMware для самых маленьких.
2.2. Установка Linux OS в программу VMware, на примере Ubuntu 11.
2.3. Установка дополнительных инструментов (VMware-tools) в Ubuntu 11. Необходимо для перемещения файлов между Ubuntu в виртуальной машине и виндой.

2.1.:    2.2.:    2.3.:

Прикрепленное изображение Прикрепленное изображение Прикрепленное изображение

3. Мануалы по установке, текстом.

3.1. Установка VMware-tools для Ubuntu 11.
3.1.1. Стартуем Ubuntu 11, вверху нажимаем "Virtual Machine", затем "Install VMware Tools...
3.1.2. Ждём загрузки инструментов (нужно подключение к интернету!), затем снова вверху нажимаем "Virtual Machine" -> "Install VMware Tools...
3.1.3. С открывшегося диска копируем архив в формате *.tar.gz например в /home/user (user - ваше имя при установке Ubuntu), распаковываем его.
3.1.4. Запускаем терминал и выполняем в нём следующее:
Код

cd /home/user/vmware-tools-distrib
sudo ./vmware-install.pl

После команды sudo надо ввести пароль, который мы указывали при установке Ubuntu.
3.1.5. Умный скрипт сам предложит вам вводить нужные значения (в квадратных скобках), вводите их.
3.1.6. После успешной установки инструментов, перезагрузите компьютер.
3.1.7. Данные инструменты помогут с лёгкостью переносить файлы из Windows в Linux Ubuntu, просто копируя их или перенося из окна в окно, как вы это делали в Windows. Кроме того, появится множество разрешений для экрана системы.

3.2. Общие папки между системами для обмена файлами.
3.2.1. Стартуем Ubuntu 11, вверху нажимаем "Virtual Machine", затем "Virtual Machine Settings"
3.2.2. Переходим на вкладку "Options", выбираем "Shared Folders"
3.2.3. Переключатель "Folder sharing" ставим в положение "Always enabled", нажимаем кнопку "Add".
3.2.4. На компьютере выбираем любую папку, добавляем её, жмём ОК.
3.2.5. Теперь в Ubunte, в папке /mnt/hgfs видим добавленную нами папку из Windows.

4. Установка SDK & Toolchains.

4.1. Скачиваем архив тулчейна (*.tar.gz), перемещаем его в папку /home/user (user - ник при установке Ubuntu).
4.2. Выполняем команды, новая строка - Enter, вместо user естественно пишем своё имя, после команды sudo потребуется ввести пароль, который мы указывали при установке Ubuntu.
Код

sudo mkdir /mmc
sudo chown user -R /opt
sudo chown user -R /home
sudo chown user -R /mmc
sudo ln -s -d /opt/toolchains/motomagx/arm-eabi -t /
mkdir /opt/toolchains
mkdir /home/z6
mkdir /mmc/mmca1
tar -C /opt/toolchains -xzvf /home/user/motomagx-toolchains_12_08_2011.tar.gz
cp /opt/toolchains/motomagx/setenv-z6.sh /home/z6
cp /opt/toolchains/motomagx/setenv-z6-2.sh /home/z6

4.3. Обратите внимание на имя скаченного вами архива с тулчейном! Именно его нужно вводить в восьмой строке кода, приведённого выше!
4.4. Установленный тулчейн:
Прикрепленное изображение

5. Запуск окружения, компиляция программ и helloworld'a.

5.1. Чтобы запустить окружение для компиляции под MotoMagx, достаточно выполнить в терминале следующее:
Код

cd /home/z6
. setenv-z6.sh

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

5.2. HelloWorld.
5.2.1. Создаём пустой файл с именем hello.c в папке /home/z6 (Правой клавишей по пустому месту, "Create Document" -> "Empty File")
5.2.2. Редактируем его содержимое следующим образом, сохраняем:
Код

// Hello World for Motorola Magx!

#include <stdio.h>

int main(void)
{
    printf ("Hello Moto!!!\n");
    return 0;
}

5.2.3. Компилируем:
Код

cd /home/z6
arm-linux-gnueabi-gcc hello.c -o hello

5.2.4. Полученный исполнительный файл "hello" кидаем на телефон и запускаем через телнет!
Код

Mobilinux(TM) 4.1
Welcome 2 Motorola ZN5!
[root@Symbiosis ~]
#> /mmc/mmca1/hello
Hello Moto!!!


5.3. Работа с утилитой Make* и SDL библиотекой.
* - Утилита Make позволяет компилировать достаточно сложные проекты. Подробнее тут: http://ru.wikipedia.org/wiki/Make
5.3.1. Скачиваем следующие исходники, распаковываем в папку /home/z6:
Прикрепленный файл ballgame_src.tar.gz   ( 34 килобайт ) Кол-во скачиваний: 21044

5.3.2. Запускаем терминал и окружение для компиляции, переходим в папку с проектом, выполняем команду make:
Код

cd /home/z6/ballgame_src
make

После выполнения команды будет выполнена компиляция проекта и создан mgx пакет. Для очистки проекта от объектного кода и бинарников, следует выполнить make clean. Для создание mgx пакета - команду make mgx.
5.3.3. Теперь можно кинуть пакет на карту памяти и попробовать запустить. (Для SDL приложений вам потребуется установленные SDL-библиотеки!)
5.3.4. Структура простейшего Makefile для компиляции HelloWorld'a:
Код

# MakeFile for HelloWorld
# Motorola MotoMAGX

CC = arm-linux-gnueabi-gcc  
STRIP = arm-linux-gnueabi-strip
  
CFLAGS = # Необходимые флаги
LDFLAGS = # Необходимые флаги
OPTIMIZATION = -march=armv6j -mtune=arm1136jf-s -mfpu=vfp -O2 # Оптимизация под процессор

INCLUDE = $(CFLAGS) $(OPTIMIZATION) -I/dir # Путь к нужным хэдэрам.
LIBS = $(LDFLAGS) -L/dir # Путь к нужным либам

BIN = hello # Бинарник

all:
    $(CC) -c hello.c -o hello.o $(INCLUDE)
    $(CC) -o $(BIN) hello.o $(LIBS)
    $(STRIP) $(BIN)
clean:
    rm -f ./*.o $(BIN)

Если положить данный Makefile рядом с hello.c, и выполнить make, получим исполнительный файл.
5.3.5. Замена строк, для портирования SDL проектов:
Код

CC:=gcc ---> CC:=arm-linux-gnueabi-gcc
cc=gcc ---> CC=arm-linux-gnueabi-gcc
cxx=g++ ---> CXX=arm-linux-gnueabi-g++
ld=ld ---> LD=arm-linux-gnueabi-ld
ar=ar ---> AR=arm-linux-gnueabi-ar
as=as---> AS=arm-linux-gnueabi-as
oc=oc ---> OC=arm-linux-gnueabi-objcopy
ranlib=ranlib ---> RANLIB=arm-linux-gnueabi-ranlib
strip=strip ---> STRIP=arm-linux-gnueabi-strip
В INCLUDE или CFLAGS добавляем `sdl-config --cflags`
В LIBS или LDFLAGS добавляем `sdl-config --libs` -lнеобходимая_библиотека


5.4. Работа с утилитой configure* и SDL библиотекой.
* - Скрипт configure создаёт Makefile и позволяет компилировать сложные проекты, состоящие из множества файлов. Подробнее тут: http://en.wikipedia.org/wiki/Configure_script
5.4.1. Пример работы. Скачиваем исходники, распаковываем в папку /home/z6:
Прикрепленный файл PTC-demos.tar.gz   ( 33.29 килобайт ) Кол-во скачиваний: 21106

5.4.2. Выполняем следующее:
Код

cd /home/z6/PTC-demos
./configure --host=arm-linux-gnueabi
make

После этих команд у нас появятся исполнительные файлы Fire и Tunnel. Копируем их в корень карточки телефона.
5.4.3. Запускаем через телнет следующим образом:
Код

export LD_LIBRARY_PATH=/mmc/mmca1/games/lib:$LD_LIBRARY_PATH
chmod +x /mmc/mmca1/Fire
/mmc/mmca1/Fire

5.4.4. Для установки файлов в нужную директорию используется prefix и команда make install:
Код

mkdir /home/z6/test
cd /home/z6/PTC-demos
./configure --host=arm-linux-gnueabi --prefix=/home/z6/test
make
make install

После этого нужные нам файлы будут в папке /home/z6/test.
5.4.5. Для чистки объектного кода и бинарников используется команда make clean, для удаления сконфигурированных Makefile'ов используется команда make distclean (полная очистка).

5.5. Деббагер "Segmentation fault"
5.5.1. Качаем gdb и распаковываем архив на карту памяти, в папку /mmc/mmca1/games
Исполнительные файлы должны быть собраны с префиксом '-g' и не должны быть пострипаные
5.5.2. Выполняем (gdb):
Код

ulimit -c unlimited
./<bin_app>
Segmentation fault (core dumped)
файл <core> будет создан
../bin/gdb ./<bin_app> <core>

5.5.3 Выполняем (strace):
Код

../bin/strace ./<bin_app>


5.6. Скрипт запуска для SDL приложений:
Код

#!/bin/sh
mypath=${0%/*}
LIBDIR1=/ezxlocal/download/mystuff/games/lib
LIBDIR2=/mmc/mmca1/games/lib
LIBDIR3=$mypath/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$LIBDIR1:$LIBDIR2:$LIBDIR3
export HOME=$mypath
export SDL_QT_INVERT_ROTATION=1
cd $mypath
sleep 1

exec $mypath/<bin_app>

5.6.1. Если нужен вывод лога в файл, заменяем последнюю строку в скрипте на
Код
exec $mypath/bin_app >$mypath/stdout.txt 2>$mypath/stderr.txt


5.7. HelloWorld с использованием GUI и функций телефона.
5.7.1. Скачиваем архив, распаковываем в /home/z6:
Прикрепленный файл Helloworld_GUI.tar.gz   ( 80.01 килобайт ) Кол-во скачиваний: 21327

5.7.2. Выполняем:
Код

cd /home/z6/папка с нужным проектом
make PLATFORM=EZX-ZN5

или просто make
5.7.3. Кидаем исполнительные файлы на телефон и пробуем запустить, должно получиться что-то типа этого:
Прикрепленное изображение

5.8. Собираем MgxBox.
5.8.1. Скачиваем архив, распаковываем в /home/z6:
Прикрепленный файл MgxBox.tar.gz   ( 5.23 мегабайт ) Кол-во скачиваний: 22593

5.8.2. Выполняем:
Код

cd /home/z6/MgxBox/MgxBox_GUI_ru
make PLATFORM=EZX-ZN5
cd /home/z6/MgxBox/p7zip_9.20.1
make all2
make install
cp -r /mmc/mmca1/p7zip/lib/p7zip /home/z6/MgxBox/Release/app/p7zip

5.8.3. Кидаем папку /home/z6/MgxBox/Release на телефон и пробуем запустить бинарник в папке Release/app, если всё нормально, должно получиться что-то типа этого:
Прикрепленное изображение

6. Создание пакетов вручную.

6.1. Создание MGX пакета:
6.1.1. Создаём папку, помещаем в нее необходимые файлы (дата файлы приложения, исполнительные файлы, скрипт запуска, иконку).
6.1.2. Создаём в папке файл "Имя папки".cfg, редактируем его содержимое следующим образом:
Код

Name = Test
Exec = run.sh
Icon = icon.png
Author = Ant-ON
Version = 1.0
Comment = Port for ZN5 by EXL

Где, Name - имя программы, Exec - запускаемый файл, Icon - иконка, Author - Автор программы, Version - Версия программы, Comment - Комментарий.
6.1.3. Запаковываем папку в любой удобный вам архив (RAR, TAR, GZ, 7Z, ZIP), и переименовываем в "имя программы".mgx

6.2. Создание PEP пакета:
6.2.1. Создаём папку с именем "app", помещаем в нее необходимые файлы (дата файлы приложения, исполнительные файлы, скрипт запуска).
6.2.2. Создаём рядом с папкой файл "description.ini", редактируем его содержимое следующим образом:
Код

[Actions]
Silent=0
InstallApp = 1  
AddAppToMenu = 1

[InstallApp]
Name = Jump n Blob
Exec = run.sh
InstallPath = ../../mmc/mmca1/.Programs/jump_n_blob/
AppLockable = 1
Author = http://www.2d-retroperspectives.org | Philipp. Port by -=Strelok=-, EXL (c) MotoFan.Ru 08.01.2010
Version = 0.1
Daemon = 1
BigIcon= icon.png
AniIcon= icon.png
Icon= icon.png

[AddAppToMenu]
ParentFolder= root

Где, Name - имя программы, Exec - запускаемый файл, Icon | AniIcon | BigIcon - иконка, Author - Автор программы, Version - Версия программы, InstallPath - Путь установки.
6.2.3. Создаём иконку, рядом с папкой "app" и "description.ini".
6.2.4. Запаковываем иконку, папку "app" и "description.ini" в архив формата TAR, затем сжимаем его в GZ переименовываем в "имя программы".pep

7. Полезные ссылки, документация, наши проекты.

7.1. Исходники, сайты с исходниками. Множество интересных проектов есть на code.google.com и sf.net
7.1.1. Исходники проектов, базирующихся на SDL:
libsdl.org/games
libsdl.org/demos
http://dl.openhandhelds.org/cgi-bin/gp2x.cgi?0,0,0,0,46
http://dl.openhandhelds.org/cgi-bin/dingoo.cgi?0,0,0,0,46
7.1.2. Исходники проектов, базирующихся на QT:
http://www.elsix.org/index.php?w=browse - В основном там под Sharp Zaurus, но идеи создания приложений и сорцы найти можно.

7.2. Документация, темы для прочтения:
Пробуем портировать игры и проги сами
Разработка софта под MOTOMAGX, начну небольшой HOWTO
Компиляция нативных приложений под E6/A1200, Создание окружения для компиляции
SDL библиотека
http://plg.lrn.ru/wiki/Заглавная_Страница
http://plg.lrn.ru/doc/sdl/index.html
http://doc.qt.nokia.com

7.3. Проекты:
http://code.google.com/p/open-mgx/ - исходники программ от Ant-On'a
http://code.google.com/p/sdl-magx/ - библиотека SDL HW для MotoMAgx от Ant-On'a
http://code.google.com/p/zmessanger/ - нативная аська, автор Ant-On
http://sourceforge.net/projects/qte2console/ - qte2console от DoomChisel
http://code.google.com/p/motocakerteam/ - исходники программ от испанцев MotoCakerTeam
http://code.google.com/p/zsoft/

8. Мануалы данной темы:

Если кто не может запустить ZN5Encoder в Magic box - пост #290
Нативные заставки на основе портированных мной и Neomoto демок! - пост #291
Мануал по установке Tmake в тулчейн, и правки созданного им MakeFile - пост #484
Изучение разделяемых библиотек (so) - пост #1440
Эмуляция нажатия клавиш на Motorola ZN5 - пост #1684


© EXL for MotoFan.Ru 27.08.2011
Прикрепленный файл ballgame_src.tar.gz   ( 34 килобайт ) Кол-во скачиваний: 21044
Прикрепленный файл PTC-demos.tar.gz   ( 33.29 килобайт ) Кол-во скачиваний: 21106
Прикрепленный файл Helloworld_GUI.tar.gz   ( 80.01 килобайт ) Кол-во скачиваний: 21327
Прикрепленный файл MgxBox.tar.gz   ( 5.23 мегабайт ) Кол-во скачиваний: 22593
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
EXL
сообщение 26.11.2021, 5:45


Rock The Microphone
********

Группа: Администраторы
Сообщений: 2 961
Регистрация: 12.5.2007
Из: г. Новосибирск
Пользователь №: 134 652

Рейтинг: 4609



VINRARUS, Отлично, что для камеры тоже заработало. А для игр на SDL HW это тоже работает? Там наверное должен этот же буфер использоваться. Проверь ради интереса.

Немного оптимизировал код в jgrab, обнови у себя нужные исполняемые файлы. Ещё добавил утилиту pgrab по типу fbgrab и jgrab, но для снятия скриншотов в PNG, уровень компрессии регулируется в пределах 0-9:

Код
./pgrab /dev/fb/0 screenshot1.png 0
./pgrab /dev/fb/0 screenshot2.png 2
./pgrab /dev/fb/0 screenshot3.png 9

Бенчмарк на эмуляторе показал следующую картину, в самом конце размер файла в байтах:

Код
for i in $(seq 1 5); do busybox time ./pgrab /dev/fb/0 scr.png 9; sleep 1; rm scr.png; done;

+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+
|  PNG 0   |  PNG 1   |  PNG 2   |  PNG 3   |  PNG 4   |  PNG 5   |  PNG 6   |  PNG 7   |  PNG 8   |  PNG 9   |
+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+
| 0m 0.02s | 0m 0.06s | 0m 0.05s | 0m 0.07s | 0m 0.09s | 0m 0.08s | 0m 0.12s | 0m 0.14s | 0m 0.27s | 0m 0.50s |
| 0m 0.00s | 0m 0.00s | 0m 0.00s | 0m 0.01s | 0m 0.00s | 0m 0.01s | 0m 0.02s | 0m 0.04s | 0m 0.03s | 0m 0.03s |
| 0m 0.00s | 0m 0.04s | 0m 0.02s | 0m 0.03s | 0m 0.06s | 0m 0.06s | 0m 0.09s | 0m 0.08s | 0m 0.22s | 0m 0.43s |
+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+
| 0m 0.07s | 0m 0.04s | 0m 0.06s | 0m 0.06s | 0m 0.07s | 0m 0.09s | 0m 0.12s | 0m 0.15s | 0m 0.31s | 0m 0.43s |
| 0m 0.00s | 0m 0.00s | 0m 0.00s | 0m 0.01s | 0m 0.00s | 0m 0.00s | 0m 0.01s | 0m 0.01s | 0m 0.00s | 0m 0.04s |
| 0m 0.06s | 0m 0.00s | 0m 0.05s | 0m 0.04s | 0m 0.02s | 0m 0.09s | 0m 0.09s | 0m 0.12s | 0m 0.29s | 0m 0.35s |
+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+
| 0m 0.05s | 0m 0.08s | 0m 0.04s | 0m 0.09s | 0m 0.10s | 0m 0.10s | 0m 0.13s | 0m 0.14s | 0m 0.34s | 0m 0.50s |
| 0m 0.00s | 0m 0.00s | 0m 0.00s | 0m 0.01s | 0m 0.01s | 0m 0.02s | 0m 0.00s | 0m 0.02s | 0m 0.00s | 0m 0.08s |
| 0m 0.05s | 0m 0.06s | 0m 0.02s | 0m 0.06s | 0m 0.07s | 0m 0.08s | 0m 0.11s | 0m 0.11s | 0m 0.31s | 0m 0.40s |
+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+
| 0m 0.03s | 0m 0.07s | 0m 0.08s | 0m 0.09s | 0m 0.09s | 0m 0.09s | 0m 0.12s | 0m 0.10s | 0m 0.33s | 0m 0.52s |
| 0m 0.00s | 0m 0.01s | 0m 0.00s | 0m 0.00s | 0m 0.01s | 0m 0.00s | 0m 0.00s | 0m 0.02s | 0m 0.06s | 0m 0.02s |
| 0m 0.03s | 0m 0.05s | 0m 0.06s | 0m 0.07s | 0m 0.06s | 0m 0.09s | 0m 0.11s | 0m 0.07s | 0m 0.24s | 0m 0.46s |
+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+
| 0m 0.03s | 0m 0.06s | 0m 0.08s | 0m 0.08s | 0m 0.10s | 0m 0.11s | 0m 0.12s | 0m 0.14s | 0m 0.32s | 0m 0.49s |
| 0m 0.00s | 0m 0.01s | 0m 0.00s | 0m 0.00s | 0m 0.00s | 0m 0.00s | 0m 0.00s | 0m 0.00s | 0m 0.07s | 0m 0.03s |
| 0m 0.02s | 0m 0.04s | 0m 0.07s | 0m 0.07s | 0m 0.09s | 0m 0.10s | 0m 0.11s | 0m 0.13s | 0m 0.22s | 0m 0.41s |
+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+
|  231154  |  68689   |  66579   |  63552   |  60778   |  59231   |  58129   |  57665   |  56473   |  56033   |
+----------+----------+----------+----------+----------+----------+----------+----------+----------+----------+

Как видно, время снятия скриншота с повышением уровня компрессии возрастает, но не особо быстро. Исключения последние два уровня 8 и 9. Даже минимальный уровень сжатия 1 неплохо жмёт картинку и при этом не особо прожорлив. Возможно следует попробовать заюзать его вместо JPEG, но нужно смотреть как оно на реальном устройстве будет сжиматься, там разница может быть более драматическая.

Если будешь в Web-сервер встраивать всё это, не забудь сделать снятие скриншота именно в PNG-формате, например, по отдельной кнопке. Сделать именно lossless скриншот бывает очень полезно.

Прикреплённые файлы:
Прикрепленный файл MagxScreenshot.zip   ( 59.02 килобайт ) Кол-во скачиваний: 8
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Unreal_man
сообщение 26.11.2021, 17:01


Гуру
******

Группа: Разработчики
Сообщений: 727
Регистрация: 16.12.2009
Из: Другого Края Земли
Пользователь №: 211 211
Модель телефона: Motorola Moto Z Play


Настроение:
:-I



Рейтинг: 557



Пнг скриншоты на телефоне это зло, у нас просмотрщик кривой по части открытия пнг. Лучше джипег.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 26.11.2021, 17:20


Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044
Модель телефона: WX160 & L7 & Z6 & ZN5-128
Прошивка: 740 MHz: Z6 and ZN5


Настроение:
youtu.be/A_yQLYLiSGQ



Рейтинг: 1211



Unreal_man, а оно не для просмотра на телефоне в даном случае. wink.gif



Добавлено позже (26.11.2021, 20:21):
... если конешно мова не про управление зиной чирез другую зину. dribble.gif
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
EXL
сообщение 27.11.2021, 5:30


Rock The Microphone
********

Группа: Администраторы
Сообщений: 2 961
Регистрация: 12.5.2007
Из: г. Новосибирск
Пользователь №: 134 652

Рейтинг: 4609



VINRARUS, Ага, это удобно для публикации постов со скриншотами на форум в первую очередь laugh.gif
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 27.11.2021, 10:46


Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044
Модель телефона: WX160 & L7 & Z6 & ZN5-128
Прошивка: 740 MHz: Z6 and ZN5


Настроение:
youtu.be/A_yQLYLiSGQ



Рейтинг: 1211



Цитата(EXL @ Вчера, 8:45)
* Ещё добавил утилиту pgrab по типу fbgrab и jgrab, но для снятия скриншотов в PNG, уровень компрессии регулируется в пределах 0-9

А шо у неё с размером случилось, шо в 10 раз больше чем другие?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
EXL
сообщение 27.11.2021, 11:21


Rock The Microphone
********

Группа: Администраторы
Сообщений: 2 961
Регистрация: 12.5.2007
Из: г. Новосибирск
Пользователь №: 134 652

Рейтинг: 4609



VINRARUS,
Причина этого как всегда обрезанная Qt-библиотека у ZN5. Например её сравнение с той, что у VE66 по части PNG-функций:

Код
$ cd /arm-eabi/lib/ezx-zn5/lib/
$ readelf -s -w libqte-mt.so.2.3.8 | grep -i png_ | c++filt
readelf: libqte-mt.so.2.3.8: warning: local symbol 465 found at index >= .dynsym's sh_info value of 10
   236: 416c6870    92 func    global default   11 png_error@@version
   520: 416cadf4    16 func    global default   11 png_set_strip_16@@version
   624: 416c5d90   144 func    global default   11 png_sig_cmp@@version
   656: 416c8fd0   620 func    global default   11 png_create_read_struct@@version
  1032: 416cabb0   136 func    global default   11 png_set_read_fn@@version
  1066: 416d4f58    32 func    global default   11 png_set_packing@@version
  1155: 416c64b0     8 func    global default   11 png_get_io_ptr@@version
  1726: 416c6914    28 func    global default   11 png_get_valid@@version
  2400: 416c71e0    72 func    global default   11 png_get_plte@@version
  2631: 416c6f1c   260 func    global default   11 png_get_ihdr@@version
  3005: 416c941c  1620 func    global default   11 png_read_info@@version
  3207: 416ca840   192 func    global default   11 png_destroy_read_struct@@version
  3329: 416c9ff8   100 func    global default   11 png_read_image@@version
  3386: 416c72e4   132 func    global default   11 png_get_trns@@version
  3439: 416c5f14    56 func    global default   11 png_create_info_struct@@version
  3962: 416c68fc    16 func    global default   11 png_set_error_fn@@version
  3989: 416ca05c  1360 func    global default   11 png_read_end@@version

$ cd /arm-eabi/lib/ezx-ve66/lib/
$ readelf -s -w libqte-mt.so.2.3.8 | grep -i png_write_ | c++filt
   153: 41791a68    72 func    global default   10 png_write_gama_fixed
   585: 41792898   288 func    global default   10 png_write_iccp
   668: 41791ab0    96 func    global default   10 png_write_srgb
   989: 41792e34   252 func    global default   10 png_write_scal
  1207: 417914c8   960 func    global default   10 png_write_ihdr
  1258: 417929b8   220 func    global default   10 png_write_text
  1655: 41790f18    52 func    global default   10 png_write_chunk_end
  1660: 41791c04   920 func    global default   10 png_write_chrm
  2162: 41791f9c   496 func    global default   10 png_write_chrm_fixed
  2316: 417930a8   480 func    global default   10 png_write_start_row
  2532: 41792a94   292 func    global default   10 png_write_ztxt
  2536: 41791888   224 func    global default   10 png_write_plte
  2616: 4178fb10   292 func    global default   10 png_write_init_2
  2940: 41792298   228 func    global default   10 png_write_bkgd
  3095: 41791b10   244 func    global default   10 png_write_sbit
  3435: 417937a8   252 func    global default   10 png_write_filtered_row
  3960: 417926dc   444 func    global default   10 png_write_splt
  3999: 417938a4  3276 func    global default   10 png_write_find_filter
  4089: 4178fee8    64 func    global default   10 png_write_rows
  5437: 4178eea0   528 func    global default   10 png_write_info_before_plte
  5642: 4178fc64   540 func    global default   10 png_write_row
  5908: 4178f0b0   908 func    global default   10 png_write_info
  5991: 41791968    76 func    global default   10 png_write_idat
  6799: 41790f4c    52 func    global default   10 png_write_chunk_data
  6909: 41792fe0   200 func    global default   10 png_write_time
  6918: 41790fe0    52 func    global default   10 png_write_chunk
  7050: 41790f80    96 func    global default   10 png_write_chunk_start
  7089: 4179237c   172 func    global default   10 png_write_hist
  7120: 41793288   576 func    global default   10 png_write_finish_row
  7240: 417919b4    68 func    global default   10 png_write_iend
  7328: 4178f43c   452 func    global default   10 png_write_end
  7340: 41790538   284 func    global default   10 png_write_png
  7709: 41792c68   460 func    global default   10 png_write_pcal
  8256: 41792bb8   176 func    global default   10 png_write_offs
  8510: 417919f8   112 func    global default   10 png_write_gama
  8660: 41790014   260 func    global default   10 png_write_destroy
  9198: 4178fe80   104 func    global default   10 png_write_image
  9890: 4178ff38   220 func    global default   10 png_write_flush
  9954: 41792f30   176 func    global default   10 png_write_phys
10183: 41791014   144 func    global default   10 png_write_sig
10542: 4179218c   268 func    global default   10 png_write_trns
10910: 4178fc34    48 func    global default   10 png_write_init
10947: 4178ed38    60 func    global default   10 png_write_data

Как видно, у ZN5 библиотека Qt может только читать PNG изображения. Не знаю где там в прошивке ZN5 код сохранения PNG-изображений, возможно в самой либе Qt собственная внутренняя приватная реализация этой функциональности, поэтому приходится этот код таскать с собой и линковать его статически. Что, конечно, увеличивает размер исполняемого файла на десятки килобайт.

Поищи, есть ли libpng.so где-нибудь в /lib, например?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 27.11.2021, 11:56


Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044
Модель телефона: WX160 & L7 & Z6 & ZN5-128
Прошивка: 740 MHz: Z6 and ZN5


Настроение:
youtu.be/A_yQLYLiSGQ



Рейтинг: 1211



Цитата(EXL @ Сегодня, 14:21)
* Не знаю где там в прошивке ZN5 код сохранения PNG-изображений

А может его и нет, ведь сохранять в png это так не по американски... no2.gif
Цитата(EXL @ Сегодня, 14:21)
* Поищи, есть ли libpng.so где-нибудь в /lib, например?

Нету.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
EXL
сообщение 27.11.2021, 12:04


Rock The Microphone
********

Группа: Администраторы
Сообщений: 2 961
Регистрация: 12.5.2007
Из: г. Новосибирск
Пользователь №: 134 652

Рейтинг: 4609



Цитата(VINRARUS @ Сегодня, 18:56)
* А может его и нет, ведь сохранять в png это так не по американски... no2.gif

Хех, но Qt ведь как-то сохраняет PNG через тот же dgrab и zgrab?! smile.gif

А это значит что где-то всё-таки нужный код есть, но только он хорошо прикопан. Либо вообще какая-то внутренняя реализация в Qt мимо libpng. И кстати эта либа примерно так же статически вкомпилена в libqte-mt.so.2 разных телефонов. Просто в случае с ZN5 в каком-то обрезанном варианте.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
VINRARUS
сообщение 27.11.2021, 12:27


Термоядерный
********

Группа: Пользователи
Сообщений: 3 496
Регистрация: 12.12.2009
Из: Чорнобиль
Пользователь №: 211 044
Модель телефона: WX160 & L7 & Z6 & ZN5-128
Прошивка: 740 MHz: Z6 and ZN5


Настроение:
youtu.be/A_yQLYLiSGQ



Рейтинг: 1211



Цитата(EXL @ Вчера, 8:45)
* А для игр на SDL HW это тоже работает? Там наверное должен этот же буфер использоваться. Проверь ради интереса.

на /dev/fb/1 висит последний кадр камеры
А на /dev/fb/0 такие картинки:
Прикрепленный файл 00.bmp   ( 225.05 килобайт ) Кол-во скачиваний: 10
Прикрепленный файл 000.bmp   ( 225.05 килобайт ) Кол-во скачиваний: 11
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
EXL
сообщение 27.11.2021, 14:25


Rock The Microphone
********

Группа: Администраторы
Сообщений: 2 961
Регистрация: 12.5.2007
Из: г. Новосибирск
Пользователь №: 134 652

Рейтинг: 4609



VINRARUS, Понял, спасибо за тесты.

Цитата(VINRARUS @ Сегодня, 19:27)
* А на /dev/fb/0 такие картинки:

Примерно понял почему. Там в SDL видимо переводится видео режим с 18 bpp на 16 bpp или какой-то другой, поэтому такие вот артефакты. Может быть когда-нибудь сделаю снятие картинки в режиме 16 bpp, но пока руки до этого не доходят.

Кстати, вот отличия в качестве картинки на 16-bit'ах (RGB565) и 18-bit'ах (RGB666). Лично я эту разницу немного вижу.
Прикрепленное изображение Прикрепленное изображение
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Софт для ZN5 и прочих MotoMAGX: MGX и PEP, Разработка, портирование и обсуждение нативного софта · Motorola ZINE ZN5, ZN5 T-Mobile · Forum
 

181 страниц V « < 170 171 172 173 174 > » 
Ответ в темуСоздание новой темы
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 16.4.2024, 18:22

Форум живёт: