OSD на ATmega1281
Сергей, подскажите, как переназначить вывод MCI вместо окна в какую-нибудь переменную типа TImage?
Написал плеер, выковыривающий телеметрию из видео. Видео воспроизводится через TMediaPlayer, в котором в качестве Display можно назначить только оконный элемент: форму, панель, кнопку… Все бы хорошо, но если окно закрыто другим окошком или свернуто, информацию с кадра считать невозможно.
Вроде для MCI нужно передавать HWND окна для отображения. Вероятно по этому TMediaPlayer.Display может быть только наследник от TWinControl, имеющий свойство Handle- по сути HWND. Конечно всех возможностей MCI не помню, но вполне может оказаться, что эта задача нерешаема…
Есть повод окунуться в DirectShow 😃, там эта задача легко решается. Даже можно не писать свой фильтр, пользовать готовый SampleGrabber.
ага, там черт ногу сломит.
Нашел такой код:
#ifndef DIBSIZE
#define WIDTHBYTES(bits) ((DWORD)(((bits)+31) & (~31)) / 8)
#define DIBWIDTHBYTES(bi) (DWORD)WIDTHBYTES((DWORD)(bi).biWidth * (DWORD)(bi).biBitCount)
#define _DIBSIZE(bi) (DIBWIDTHBYTES(bi) * (DWORD)(bi).biHeight)
#define DIBSIZE(bi) ((bi).biHeight < 0 ? (-1)*(_DIBSIZE(bi)) : _DIBSIZE(bi))
#endif
void PlayAvi(LPCSTR pszFile, HWND hWndOutput)
{
AVIFileInit();
PAVIFILE paf;
AVIFileOpen(&paf, pszFile, OF_READ, 0);
AVIFILEINFO afi;
AVIFileInfo(paf, &afi, sizeof(AVIFILEINFO));
PAVISTREAM pas;
AVIFileGetStream(paf, &pas, streamtypeVIDEO, 0);
AVISTREAMINFO asi;
AVIStreamInfo(pas, &asi, sizeof(AVISTREAMINFO));
long nFormatSize;
AVIStreamReadFormat(pas, asi.dwStart, NULL, &nFormatSize);
BITMAPINFOHEADER* pbihIn = (BITMAPINFOHEADER*)malloc(nFormatSize);
AVIStreamReadFormat(pas, asi.dwStart, pbihIn, &nFormatSize);
BITMAPINFOHEADER bihDec;
memcpy(&bihDec, pbihIn, sizeof(BITMAPINFOHEADER));
bihDec.biCompression = BI_RGB;
bihDec.biBitCount = 24;
bihDec.biSizeImage = DIBSIZE(bihDec);
BYTE* pDecData = (BYTE*)malloc(bihDec.biSizeImage);
memset(pDecData, 0, bihDec.biSizeImage);
HIC hic = ICDecompressOpen(ICTYPE_VIDEO, pbihIn->biCompression, pbihIn, &bihDec);
ICDecompressBegin(hic, pbihIn, &bihDec);
HDC hdc = GetDC(hWndOutput);
RECT rc;
GetClientRect(hWndOutput, &rc);
HDRAWDIB hdd = DrawDibOpen();
BYTE* pInData = NULL;
long nBufSize = 0, nSampleSize = 0;
for (int nSample = asi.dwStart; nSample <= asi.dwStart + asi.dwLength; nSample++)
{
AVIStreamSampleSize(pas, nSample, &nSampleSize);
if (nSampleSize > nBufSize)
{
pInData = (BYTE*)realloc(pInData, nSampleSize);
nBufSize = nSampleSize;
}
AVIStreamRead(pas, nSample, 1, pInData, nBufSize, NULL, NULL);
ICDecompress(hic, 0, pbihIn, pInData, &bihDec, pDecData);
// ñåé÷àñ â pDecData òåêóùèé êàäð â âèäå áèòìàïêè, ðèñóåì åãî
DrawDibDraw(hdd, hdc, 0, 0, rc.right - rc.left, rc.bottom - rc.top, &bihDec, pDecData, 0, 0, bihDec.biWidth, bihDec.biHeight, 0);
Application->ProcessMessages();
}
DrawDibClose(hdd);
ReleaseDC(hWndOutput, hdc);
ICDecompressEnd(hic);
ICClose(hic);
AVIStreamRelease(pas);
AVIFileRelease(paf);
AVIFileExit();
free(pInData);
free(pDecData);
free(pbihIn);
}
При указании пути файла и хендла формы/панельки должен воспроизводить файл. Нифига, вылетает на строке ICDecompress(hic, 0, pbihIn, pInData, &bihDec, pDecData); с ексепшеном ffdshow.ax. Удалил ffdshow - дает просто черный экран.
===
еще нашел dspack, попробую его.
Олег, имхо все эти библиотеки (в тч. MCI) по сути софтовые интерфейсы к этому. А зачем нам посредники? 😃 Конечно реальное приложение будет посложнее, вместо RenderFile придется свой граф собирать, но Intelligent Connect сделает всю самую сложную работу.
//-------------------------------------
Обновление FPVcap_1.2(beta). Исправлен тексты сообщений о ошибках, и вылеты на исключения при отсутствии железки захвата. Никаких принципиальных изменений.
А чертёжик антенны можно?
ну и на модельке диполь с gain 2-5dB
И на самолете, обычный четверть волновый диполь?
Разве есть разница между, просто штырьком четверть волны?
И как определили 2-5 db.
И ещё вопрос, поляризация какая подразумевается?
А я во какой коаксиал на 434 забабахал:
Подробности здесь.
Сверхзадача была уменьшить объемные габариты классической GP с тремя противовесами, торчащими во все стороны, для удобства хранения транспортировки.
-----
Самым неудобным моментом системы сейчас является привязка проводом пульта к передатчику, установленному на крыше авто… Может есть какие дешевенькие RF-модули желательно на 2.4 обеспечивающие уверенный цифровой линк до 15-20м? Интерфес… не знаю… UART что-ли…
А чертёжик антенны можно?
И на самолете, обычный четверть волновый диполь?
Разве есть разница между, просто штырьком четверть волны?
И как определили 2-5 db.И ещё вопрос, поляризация какая подразумевается?
я подразумевал 3/4 ( 5/8 ) диполь у того гейн поболее а штырь на 400МГц нужна крыша ( пара кв метров ) в качестве противовеса иначе не работает. У штыря импеданс (36 + j20) Ом главное отмерить и прилепить к крыше по центру.
Поляризация ессно линейная.
Имхо 5/8 имеет скромные 2-3db по сравнению с GP только в узком секторе. Зато на вполне “ходовых” углах возвышения имеет жуткие провалы…
Имхо 5/8 имеет скромные 2-3db по сравнению с GP только в узком секторе. Зато на вполне “ходовых” углах возвышения имеет жуткие провалы…
Я собственно считал, как вариант 5/8 диполь, изогнутый буквой V. Он имеет вполне цивильную диаграмму, типо серпа, перекрывающую всю нижнюю полусферу а gein там около 5-6 dBi получается. Но это так, для коллекции. А провалы характерны для монопля ( штырь ) без противоеса.
… изогнутый буквой V…
Хотелось бы ммана-модельку… Там бы и ДН поглядел…
Добрый вечер.
Извините, что встреваю в дискуссию, но уже голова квадратная.
Решил повторить проект Сергея. Собрал ОСД, но что-то не заладилось у меня совсем 😦
Мега после 3-5 включений перестает видится программатором (isp). Кажется слетают фьюзы, потому что фьюз-доктор в режиме параллельного программирования мегу поднимает. У меня последовательность действий такая:
- Подключаю isp программатор
- Заливаю бутлоадер
- Ставлю фьюзы на внешний кварц и бутлоадер, а также brownout protection
- Подключаюсь к ногам 28, 29 меги при помощи кабеля USB-UART
- Пытаюсь при помощи MegaLoad залить прошивку - выбираю hex и ставлю скорость 38400
- Как только MegaLoad пишет, что Waiting for device - подаю питание на ОСД. Ничего не происходит. Зеленый светодиод моргает.
- После пары-пятерки передергиваний питания саетодиод не мигает.
- Мегу считать/записать при помощи isp программатора невозможно. Подключаю фьюз доктор, сброшу фьюзы и все по-новой.
Вот такая история на тему как я провел субботу 😃
UPD.
Залил просто хекс без бутлоадера. К конфигуратору коннектится, пока все пишет и читает.
Константин, без паники! 😃
- На всякий скачайте последнее обновление OSD.rar, разархивируйте.
- Программатором залейте в OSD cvmegaload.hex и установите фузы согласно fuse.JPG.
- Запустите OSDcnf.exe. Выберете порт вашего USB-UART, нажмите Open.
- Подключите USB-UART вместо GPS-модуля ( к 28,29 ногам меги). Питание OSD отключено!
- Нажмите кнопка Flash, выберите файл osd.hex.
- В течении ~5сек(не помню точно, но без того чтобы кофейку попить), пока статус “Ready from target”, включите питание OSD.
- Несколько секунд наслаждайтесь процессом загрузки прошивки.
В принципе загрузка через бутлоадер сделана для возможности заливать прошивку прямо в поле, с ноута, без программатора (чем неоднократно пользовался). А так, конечно, можно сразу залить osd.hex сразу программатором, не заливая предварительно бутлоадер (только скорректировать фузы…)…
Удачи!
ЗЫ О! уже догадались сразу залить… 😃
Сергей, спасибо!
С таким порядком действий все работает в лучшем виде. GPS (mtk3329) нашелся сразу. Красотища, и плавненько вся анимация. Не налюбуюсь. Теперь жду когда приедет IMU и погоду.
Сергей, а подробнее про кнопки расскажите, пожалуйста.
S1 - если подержать секунды две - моргнет красный светодиод и запишется позиция home. А если подержать еще секунды две, то красный светодиод моргнет два раза и кажется тоже запишется home. Что-то со временем еще происходит 😃 Получалось его запустить на счет
Назначение S2 не выявил.
Отлично! Теперь стоит пройти процедуру калибровок… Вещь неприятная, благо ее надо сделать только один раз.
Ну и проверить PPM, честно говоря в последних прошивках даже не проверял, пользуюсь только LRS.
Если будут вопросы, конечно спрашивайте.
По кнопкам: одна кнопка пока чисто для отладки, не заморачивайтесь.
Вторая, все правильно:
- нажатие до 1 мигания -уточнение home (позиция, высота, итп). У меня такой ритуал запуска: после того как все включил, проверил, наловил спутники, похожу с моделью вокруг машины ( заодно проверяю работу антенного трекера… ). Затем ложу модель на несколько сек и смотрю насколько ушло показания расстояние до база, высота. Значения могут сильно отличаться от 0 (GPS уточнил высоту и положение), и если это так, жму кнопку до одного мигания- ура, опять все нолях…
- продолжать держать до двух миганий- режим “продолжения полета”. Тут такая штука…
АП определяет момент взлета после увеличения GPS-скорости больше минимальной (по конфигурации) и поднимает флаг- “Полет”. По этому флагу начинает работать таймер полетного времени. Если после этого скорость GPS станет равна 0, АП считает что самолет приземлился и записывает автоматом в eeprom значения таймера полетного времени, пройденное растояние и (главное!) количество съеденных мАч. Естественно отключаю батарею, прихожу в себя… Затем, если решу сделать еще полет на том-же акке, есть смысл при уточнении home подержать кнопку подольше и к текущему расходу акка, времени полета и пройденному пути будут добавлены значения из eeprom. Те система считает это продолжением полета и будет показывать реальное состояние батареи. А в конце полета можно оценить сколько км и сколько мин пролетели на одном акке, даже с промежуточными посадками.
-----
Самым неудобным моментом системы сейчас является привязка проводом пульта к передатчику, установленному на крыше авто… Может есть какие дешевенькие RF-модули желательно на 2.4 обеспечивающие уверенный цифровой линк до 15-20м? Интерфес… не знаю… UART что-ли…
Посмотрите на www.ebay.com/itm/…/251120188388 , есть разные варианты исполнения, но лучше использовать м/сх с + - nRF24L01+
Есть форум по ней - kazus.ru/forums/showthread.php?t=19992&page=1
Успехов!!!
Тут как раз и обновление поспело: FPVCap 1.1(beta)… Со “спасибами” не торопитесь, все-таки сыровато наверное…
Слишком старое сообщение - мое спасибо не подоспело 😃 Пришел новый китайский изикап - дорогая вещь, 6 баксов платил, однако 😃 С предыдущим прекрасно справлялся StkATVAp - тоже программа безо всяких плюшек. Новый не переварила. Ваша программа успешно переварила их по очереди - правда, когда перетыкаешь платки - информация берется из ini файла про старый модуль и приходится все перенастраивать, настройки на старый, соответственно, пропадают.
Но это так, к слову - а программа чем проще и меньше ресурсов кушать изволит - тем лучше.
То, что ini лежит на виду, а не зарыт в реестре - еще один громадный плюс.
Давным давно пользуюсь чьей-то Quick Start Menu - программа, которая работает под Windows размером 20кбайт (не мега или гига!) - это правильная программа.
Может, в FPV ветке напишите про нее (про свою, конечно, а не QSM) - то в одном, то в другом месте возникают у людей вопросы, на которые Ваши программа - отличный ответ. Сюда-то большинство народа не заглядывает.
Начал паять IMU Сергея. Посмотрим что получитсья…
Аналогично. Со дня на день получаю 9DOF. Думаю, то ли платку свою разводить под IMU, то ли попросить у Сергея. Сколько думал, уже б свою сделал, но пока отсутствие в руках датчиков останавливает 😃