• Добро пожаловать на форум умных покупателей! Присоединяйтесь к нашей уютной компании и участвуйте в обсуждениях – Регистрация

Обзор Car DVR Eeeyelog Китай Full HD 1080pх30 Ambarella-5 и Ambarella-7 1080pх60

M

Mi81

Новичок
Регистрация
1 Янв 2013
Сообщения
1 070
Баллы
0
Кучу прог ставить как тут
Чтобы читать SDK кучу прог ставить не нужно, достаточно скачать саму SDK и просто пялиться до покраснения глаз в исходники, пытаясь понять принцип. Правда для этого нужно понимать язык Cи у читывать, что SDK, которую мне удалось стянуть почти 2 года назад и сделать достоянием общественности написана для конкретной платформы и BSP, поэтому у других аппаратов реализация может быть другой, но важно понять принцип.
чёб не создать тему и туда всё сложить
Соседняя ветка по редактированию прошивок на форуме, ссылку на который вы приводите, и была той темой, где я складывал все свои посты и результаты исследований.
Но они, эти многочисленные посты, не без умысла модераторов, куда-то "испарились". Видать кому-то из модеров не очень хочется, что бы информация стала общим достоянием, а была доступна лишь узкому кругу "избранных", которые затем шарятся по все форумам и "блещут" знаниями, зарабатывая репутатцию и очки. Поэтому я практически перестал писать в той теме, да и вообще, выкладывать информацию. Потому что изначально она была выложена для всех, а не для тех, кто смог приватизировать и комерциализировать ее, кромсая прошивки по готовому шаблону и устанавливая их людям за деньги либо выдавать "свои" откровения на dashcamtalk.com.
Кое-что, но не очень много, дублировальсь на этом форуме в ветке по Caмуну A2 и в этой ветке. Вот оно в основном и сохранилось, но найти его не так просто из-за объема веток.
По-скольку, я не сохраняю свои посты, то писать их по новой у меня просто нет времени.
 
V

vvs49

Новичок
Регистрация
24 Ноя 2012
Сообщения
189
Баллы
0
Местоположение
Украина
что SDK, которую мне удалось стянуть почти 2 года назад и сделать достоянием общественности
А где она, SDK, выложена?
Или, что antonkam в шапке Ambarella SDK выложил - оно?
Видать кому-то из модеров не очень хочется, что бы информация стала общим достоянием, а была доступна лишь узкому кругу
Кошмар, ну, что за народ!!!
 
M

Mi81

Новичок
Регистрация
1 Янв 2013
Сообщения
1 070
Баллы
0
G

GoshanV

Новичок
Регистрация
30 Сен 2012
Сообщения
9
Баллы
0
Mi81, странное затишье в теме по редактированию прошек прорвалось здесь... :)
Соседняя ветка по редактированию прошивок на форуме, ссылку на который вы приводите, и была той темой, где я складывал все свои посты и результаты исследований.
Но они, эти многочисленные посты, не без умысла модераторов, куда-то "испарились". Видать кому-то из модеров не очень хочется, что бы информация стала общим достоянием, а была доступна лишь узкому кругу "избранных", которые затем шарятся по все форумам и "блещут" знаниями, зарабатывая репутатцию и очки.
Mi81, не ожидал от тебя такой подлянки, зачем сыпать беспочвенные обвинения, более того... это легко проверить и кто, где и чем блещит и что зарабатывает... :)
Поэтому я практически перестал писать в той теме, да и вообще, выкладывать информацию. Потому что изначально она была выложена для всех, а не для тех, кто смог приватизировать и комерциализировать ее, кромсая прошивки по готовому шаблону и устанавливая их людям за деньги либо выдавать "свои" откровения на dashcamtalk.com.
По какой причине ты перестал писать и какую цель приследуешь сейчас, в данном случае понося ресурс и модераторов - неизвестно, но это тоже можно выяснить, а по поводу денег - это уже серьёзное обвинение... так что - велкам в личку... будем разбираться - кому заплатили или не доплатили... :)
ЗЫ как бы там не было, с твоей стороны это подло и такие высказывания и беспочвенные обвинения, в любом случае это не для паблики!
 
avi32

avi32

Новичок
Регистрация
11 Дек 2010
Сообщения
956
Баллы
0
Местоположение
Санкт-Петербург
устанавливая их людям за деньги либо выдавать "свои" откровения на dashcamtalk.com.
Чето я ни разу не видел, чтобы кто-то на этом рубил капусту... Да и про "выдавать "свои" откровения на dashcamtalk.com" тоже непонятно - там вроде никто свое авторство и не утверждает...
 
V

vvs49

Новичок
Регистрация
24 Ноя 2012
Сообщения
189
Баллы
0
Местоположение
Украина
зачем сыпать беспочвенные обвинения
Это вы должны доказать, что обвинение беспочвенны, а не наоборот.
Если посты "испарились", докажите, что не так и нет проблемы.
Не будет вам Mi81 ничего доказывать, указывать ...., напрасно вы так ....!! - ИМХО


Просто так и комар не кусает.
 
96902

96902

Продвинутый
Регистрация
15 Июл 2011
Сообщения
2 431
Баллы
163
Местоположение
Өфө
ребят - ДАВАЙТЕ ЖИТЬ ДРУЖНО :) хотя бы в инете...
 
avi32

avi32

Новичок
Регистрация
11 Дек 2010
Сообщения
956
Баллы
0
Местоположение
Санкт-Петербург
А чем бы графическое содержимое bitmaps.bin от Каркам Смарт посмотреть/отредактировать? Есть для этого проги? F500tool-A7 почему-то не взлетел Файл bitmaps.bin от смарта - почти 5мб, и похоже там структура отличается.

Кстати, а в чем разница между RLE x1 и RLE икс3?
 
M

Mi81

Новичок
Регистрация
1 Янв 2013
Сообщения
1 070
Баллы
0
в чем разница между RLE x1 и RLE икс3?
Абревиатура RLE имеет около полутора десятков значений. Чтобы понять о чем идет речь, желательно уточнить контекст, в котором она используется в вашем случае.
Полагаю, что речь идет об алгоритме сжатия данных, известном как Run-Length Encoding ?
Если да, то тем более желательно знать контекст, т.к. вообще-то x1 и xтри по отношению к самому алгоритму никакого документированного значения не имеют.

Добавлено спустя 1 ч. 3 мин. 19 сек.
В версии прошивки для смарта, которая на оффсайте датирована 28.10.14, bitmaps.bin имеет длину около 2.2 MB.

Добавлено спустя 1 ч. 50 мин. 16 сек.
Вроде разобрался со структурой заголовка запакованного рисунка (первые 16 байт):
ImageHeader.jpg
Некоторые поля были известны и ранее, однако полагаю, что 1, 2, 5 и 6 поля ранее нигде не описывались, по крайней мере я не нашел, поэтому пришлось напрягать череп, ибо замена картинок это то, что меня интересует меньше всего.
Выражаю благодарность horror_x за начальную информацию, которая оказалась полезной.
 
avi32

avi32

Новичок
Регистрация
11 Дек 2010
Сообщения
956
Баллы
0
Местоположение
Санкт-Петербург
Полагаю, что речь идет об алгоритме сжатия данных, известном как Run-Length Encoding ?
Да, речь именно об этом. Есть желание модифицировать F500tool под Смарт. Она изначально делалась под А2 и RLE x1, а на А7 - RLE x3. Вот тут есть кое-какая инфа, но чем отличаются эти алгоритмы компрессии - непонятно. И гугление ответа тоже чего-то не дает...
 
M

Mi81

Новичок
Регистрация
1 Янв 2013
Сообщения
1 070
Баллы
0
Да, речь именно об этом.
Как я понимаю, документированного стандарта на RLE не существует. Это лишь алгоритм, который любой программист может использовать и модифицировать по своему усмотрению в зависимости от структуры того, что нужно сжать.
Вот вам ссылка на исходники библиотеки, в которой есть 5 вариантов компресии и декомпрессии (RLE, RLE1, RLE2, RLE3, RLE4). Посмотрите, может поможет понять принцип, хотя автор, как я понимаю, затачивал их под сжатие текстов и вероятность того, что это и есть упоминаемый вами x1, x2... не высока.
Меня, как я уже сказал, возможность замены картинок не особо интересует, ибо корень зла не в них.

Добавлено спустя 1 ч. 15 мин. 23 сек.
Попробуйте еще интерпретировать RLE как 2 байта счетчик, 2 байта данные. Внешне очень похоже на это: массив байтов сильно прорежен. Кроме того, при 16 битах на пиксель это очень удобно, т.к. считаются и сжимаются именно пиксели целиком. Сколько пикселей имеют одинаковый цвет, столько и заносится в счетчик.

Добавлено спустя 1 ч. 5 мин. 53 сек.
Именно битовая размерность пикселя является наиболее целесообразным размером квантования при сжатии BMP, имхо.
Китайцы, думаю, пришли к такому же выводу.
Т.о. 8-битовые картинки наболее целесообразно жать в формат 1 байт - счетчик, 1 байт - цвет.
16-битовые - 2 байта счетчик, 2 байта цвет.
24-битовый - 1 байт счетчик, 3 байта цвет.
Правда 16-битныйе будут сжиматься процентов до 25 хуже чем другие, т.к. в реальных картинках один и тот же цвет 256 раз подряд встречается не так часто, но в любом случае этот алгоритм лучше, чем алгоритм с другим квантованием.
Так что с вас, скорее всего, пиво :)
 
M

Mi81

Новичок
Регистрация
1 Янв 2013
Сообщения
1 070
Баллы
0
Скомпилил небольшую тестовую программку. Проверил. Работает.
 
avi32

avi32

Новичок
Регистрация
11 Дек 2010
Сообщения
956
Баллы
0
Местоположение
Санкт-Петербург
Скомпилил небольшую тестовую программку. Проверил. Работает.
Со смартовским файлом работает? У е750 (на А7) битмапы в 256 цветах, а у смарта похоже в RGB1555.

У меня получается вот такая первая картинка 2х2 пикселя.

01 10 02 00 02 00 03 00 00 00 00 00 08 00 00 00 01 00 88 0F 01 00 88 0F
Только вот 03 как-то не вписывается в картину. И со цветом фигня какая-то - 880F или 10001 000000 01111, а он вроде должен быть белый (в 8-битной палитре Е750 - FF FF FF FF).
 
M

Mi81

Новичок
Регистрация
1 Янв 2013
Сообщения
1 070
Баллы
0
Со смартовским файлом работает?
Именно со смартовским.
По-скольку, я при разборке-сборке прошивок не пользуюсь никакими программами и инструментами, а делаю все руками, то писать полную разборку мне влом.
Поэтому вот утилита, закрученная на допотопных делфях, которая берет сжатый файл картинки и превращает его в обычный BMP.
Ногами не пинать: писал на скорую руку, а делфи это, чтоб приколоться и вспомнить его.
Для проверки на вирусяки оригинальная длина 396 800 байт.
второй битмап почему-то вот так конвертится
ДОБАВЛЕНО: Виноват, накосячил в спешке, закачал не тот файл. Кто скачал, до пояления этого дополнения - перекачайте. КОнтрольная длина указана правильно.
 
avi32

avi32

Новичок
Регистрация
11 Дек 2010
Сообщения
956
Баллы
0
Местоположение
Санкт-Петербург
Поэтому вот утилита, закрученная на допотопных делфях, которая берет сжатый файл картинки и превращает его в обычный BMP.
У меня второй битмап почему-то вот так конвертится.

111.jpg
 
M

Mi81

Новичок
Регистрация
1 Янв 2013
Сообщения
1 070
Баллы
0
вот так конвертится
Перекачайте из того же поста. По ошибке закачал недописанную версию. Суббота, пиво... :)
Когда будете писать кодер/декодер, не забудте следующие вещи:
  • массив данных рисунка после заголовка файла и структуры описания должен начинаться с адреса кратного 4-м;
  • если количество пикселей в строке не кратно 4, то следует дополнять каждую строку 1-3-мя нулями, чтобы выровнять начало следующей строки на адрес кратный 4-м, при кодировании эти нули выбрасываются;
  • строки растра в запакованном файле записываются в обратном порядке, т.е. сразу за заголовком последняя (нижняя) строка рисунка, затем предпоследняя и т.д. и последней записывается первая (самая верхняя) строка, т.о. картинка при распаковывании окажется вверх ногами.
Выложенная утилитка меняет порядок строк и таким образом файл смотрится нормально, но при запаковывании его опять нужно перевернуть вверх ногами, либо перевернуть его еще на этапе редактирования, тогда перепаковку строк можно не делать.


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

Успехов.
 
M

Mi81

Новичок
Регистрация
1 Янв 2013
Сообщения
1 070
Баллы
0
А вот и код с подробными коментариями.
Естественно на современных языках высокого уровня строк будет значительно меньше.
Код:
procedure TForm1.Button1Click(Sender: TObject); var fs: integer; fd: integer; i: integer; sname: string; dname: string; bufferS: Array[0..1] of SHORT; bufferD: Array[0..32565] of SHORT; cnt: integer; color: SHORT; ii: integer; width: integer; addon: integer; height: integer; begin OpenD.Filter:='Compressed Image (*.*)|*.*'; //Готвоим if OpenD.Execute then //и выполняем диалог выбора файла begin sname:=OpenD.FileName; if Trim(OpenD.FileName)<>'' then //Если файл выбран begin //открываем его для чтения fs:=FileOpen(OpenD.FileName,fmOpenRead); if fs=-1 then //Если не открылся begin //выходим из процедуры Application.MessageBox(PChar('Невозможно открыть исходный файл '+PChar(OpenD.FileName)),'Ошибка'); Exit; end; SaveD.Filter:='BMP Image File (*.bmp)|*.bmp'; //Готовим и if SaveD.Execute then //запускаем диалог сохранения файла begin if Trim(SaveD.FileName)<>'' then begin //Если имя для сохранения файла задано, if FileExists(SaveD.FileName+'.bmp') then //проверяем наличие такого файла на диске begin //Если файл существует, выводим диалог if Application.MessageBox(PChar('Файл '+PChar(SaveD.FileName)+'.bmp'+' существует. Переписать?'), 'Внимание!',MB_OKCANCEL)=IDCANCEL then begin FileClose(fs); //и в соответствии с выбором пользователя Exit; //либо прекращаем дальнейшую обработку end else //либо продолжаем ее DeleteFile(SaveD.FileName+'.bmp'); //удалив существующий файл end; fd:=FileCreate(SaveD.FileName+'.tmp'); //Создаем временный файл TMP, куда будем распаковывать данные if fd=-1 then //Если неудачно, begin Application.MessageBox(PChar('Невозможно создать файл '+PChar(SaveD.FileName)+'.bmp'),'Ошибка'); FileClose(fd); //закрываем запакованный файл Exit; //и прекращаем обработку end; end; FillChar(bufferD, 56, 0); //Фомируем буфер для записи заголовока файла TMP bufferD[0]:=$4D42; //Записываем в буфер сигнатуру 'BM' bufferD[5]:=$38; //затем - смещение начала растрового массива, которое должно быть кратно 4 bufferD[7]:=$28; //размер структуры BITMAPINFOHEADER FileSeek(fs,1,0); //Читаем из упакованного файла и FileRead(fs,bufferD[14],1); //записываем в буфер количество битов на пиксел FileSeek(fs,2,0); //Читаем и FileRead(fs,bufferD[9],2); //записываем в буфер ширину картинки (длину строки) width:=bufferD[9]*2; //Сохраняем для дальнейшей обработки длину строки растра в байтах addon:=width mod 4; //Определяем ее кратность 4-м if addon<>0 then //Если длина строки не кратна 4-м, определяем сколько addon:=4-addon; //нулевых байтов нужно добавить в конец строки для выравнивания FileSeek(fs,4,0); //Читаем из заголовка упакованного файла и FileRead(fs,bufferD[11],2); //записываем в буфер высоту картинки (количество строк растра) height:=bufferD[11]; //Сохраняем высоту картинки для дальнейшей обработки bufferD[13]:=1; //Записывем количество планов (для BMP всегда 1 ?) FileWrite(fd,bufferD,56); //Записываем сформированный заголовок из буфера в файл TMP FileSeek(fs,12,0); //Читаем длину запакованного тела FileRead(fs,bufferS,4); //сжатого файла и определяем i:=Integer(Addr(bufferS)^); //его длину в DWORD, (т.к читать будем по 4 байта) одновременно i:=i div 4; //позиционируем на начало данных. FileSeek(fd,0,2); //Позиционируем BMP на начало тела. if i>0 then //Если длина тела запакованного файла в DWORD > 0 begin //приступаем к распаковке файла в цикле, пока не будет прочитано i значений. repeat FileRead(fs,bufferS,4); //Читаем в буфер очередную пару счетчик-цвет (4 байта) из упакованного файла cnt:=Integer(bufferS[0])+1; //Определяем счетчик и увеличиваем его значение на единицу, как это принято в RLE color:=bufferS[1]; //Определяем цвет пикселя. for ii:=0 to cnt-1 do //Записываем в буфер значение цвета, повтороив его столько раз, begin //сколько задано в счетчике bufferD[ii]:=color; end; FileWrite(fd,bufferD,cnt*2); //Записываем данные из буфера в файл TMP. i:=i-1; //Уменьшаем значение пар "счетчик-цвет", которые осталось прочитать until i=0; end; FileClose(fs); //Закрываем исходный упакованный файл - он больше нам не нужен. //Вы полним перестановку строк растра, чтобы перевернуть их снизу вверх // и выполнить выравнивание, если оно необходимо, для чего: FileSeek(fd,0,0); //Ставим указатель в файле TMP на его начало fs:=FileCreate(SaveD.FileName+'.BMP'); //Создаем файл BMP, куда будем записывать окончательный результат i:=56+(width+addon)*height; //Вычисляем будущую длину файла BMP c учетом выравнивания строк по формуле //(длина заголовка + длина дополненной нулями строки * количество строк) ii:=i; //Сохраняем длину файла для дальнейших вычислений while i> SizeOf(bufferD) do //Увеличиваем длину файла BМP до вычисленного рамера begin //записав в него любую лабуду из нашего буфера (в цикле потому, FileWrite(fs,bufferD,SizeOf(bufferD)); //что FileWrite за раз может записать не более 65 535 байт, i:=i-SizeOf(bufferD); //а файл может оказаться и длинее end; if i>0 then //Если после цикла отсался хвост, FileWrite(fs,bufferD,i); //дописываем его FileSeek(fs,0,0); //Позиционируем указатель в файле BМP на его начало FileRead(fd,bufferD,56); //Читаем заголовок из файла TMP FileWrite(fs,bufferD,56); //и записываем его в файл BMP. FileSeek(fs,2,0); //Позиционируем указатель в файле BMP и FileWrite(fs,Addr(ii)^,4); //исправляем длину в заголовке, воспользовавшись ранее сохраненным значением ii FileSeek(fs,56,0); //Передвигаем указатель на начало данных растра в файле BMP FileSeek(fd,0,2); //Передвигаем указательв конец файла TMP и начинаем перемещение строк из конца в начало, for i:=1 to height do //выполняя чтение из TMP и запись в BMP в цикле: begin FileSeek(fd,-width,1); //Отодвигаем указатель в файле TMP назад на длину одной строки FileRead(fd,bufferD,width); //читаем строку в буфер FileSeek(fd,-width,1); //и отодвигаем указатель назад на количество только что прочитанных байтов. FileWrite(fs,bufferD,width+addon); //Записываем данные из буффера в файл BMP с учетом необходимого выравнивания end; FileClose(fs); //Закрываем FileClose(fd); //оба файла DeleteFile(SaveD.FileName+'.tmp'); //Удаляем временный файл TMP end; end; end; end;
И еще раз сама утилита, т.к предыдущая ссылка прибита. Длина архива 167 361 байт.
 
V

vvs49

Новичок
Регистрация
24 Ноя 2012
Сообщения
189
Баллы
0
Местоположение
Украина
Mi81!!
Нужна ваша помощь, бо чёта я уже бр-р….
Есть таблица выдержек, которая участвует в процессах рега.
Пусть значение этой таблицы находятся от Х до У
Такая таблица есть во всех прошивка моих V7х7W.
Меняю данные(Ctrl + L) в Х – У на FF – 8 секунд, запускаю рег в темноте – 23-00 м. в.(на свету рег виснет).
https://yadi.sk/i/AjcIEe0Md2EMy
И так происходит во всех прошивках у 737!!
(прошки 737 отличаются от 747 только данными матриц, меню, управление - 1:1)
У 747 так происходит во всех прошивках, кроме последней, замена на FF, ни на что не влияет.
(Проверил ещё раз на таблицы и все ~ похожие данные меняю на FF – не влияет)
Считаю, что это ошибка производителя. Видимо идёт обращение не на тот адрес.

Ещё, что заметил!!
В меню есть параметр 50/60 герц.
Во всех прошках, он влияет при съёмке вкл. лампочки, при 60 герц сильное мерцание света, а вот в этой, последней для 747, пофигу - мерцает при любом значении.
Я в рабочей прошивке, «ломал» эту таблицу, брал данные с др. рега и получал, то же самое, всё работает, а вот 50/60 герц, пофигу - мерцает при любом значении.
Я сделал основу – длина прошивки со всеми объявлениями блоков от нерабочей, последней, а вставил блок ПРИ от рабочей, добавил в конец блока нули, что бы выровняться, исправил везде КС….
Всё заработало.
Я думал, что меняя блоками с нерабочей прошивки, найду ошибку, но опять забыл за внутренние адресации…
Короче стал и не знаю куда двигаться…
Ваш совет, можно?
Спасибо.
 
Yoorez

Yoorez

Крутой иБаер
Регистрация
24 Фев 2011
Сообщения
2 197
Баллы
588
Местоположение
Saratov
R

RaulRR

Новичок
Регистрация
18 Ноя 2014
Сообщения
5
Баллы
0
Люди как можно сделать так что бы координаты GPS выводились на экран и записывались на видео файл? Регистратор Е720.
 
Live

Similar threads




Вверх
Live