Микроконтроллеры STM32 - тонкости работы, отладочные платы
Я уже разобрался, на самом деле джипеги не нужны, прост интиресно стало запустить
- Реклама
- Сообщения: 865
- Зарегистрирован: Пн фев 16, 2026 17:30:02
Блоки декодируются размером 8х8, а некратный размер обрезается модулем DMA2D при конвертировании из YCbCr в RGB.
Да, я понял как оно работает. Смог запустить декодирование по частям через DMA, но некоторые изображения получаются битыми, но не все, понять не могу почему, размер на фото 48 на 110, в маленьких цифрах ориентироваться проще, в функции HAL_JPEG_DataReadyCallback размер приходит меньше чем нужно только у самого последнего блока, у предыдущих всё ровно байт в байт. Тут у меня вообще идей нет в чем может быть причина.
(Фото из жернала плейбой 5 1958 года, если друг будет интиресоваться
)
(Фото из жернала плейбой 5 1958 года, если друг будет интиресоваться
- Вложения
-
- 20260921_202538287~2 (1).jpg
- (147.84 КБ) 41 скачивание
- Сообщения: 865
- Зарегистрирован: Пн фев 16, 2026 17:30:02
Да вы не сиськи декодируйте, а подготовьте тестовую картинку квадратного размера например 64х64. Ну и почитайте, что такое субдискретизация 4:2:0 и 4:2:2.
Конечно, у меня несколько штук разных картинок чтоб тестировать обрезание дорисованных пикселей и сейчас оно работает во всех вариантах, но не более чем разрешение экрана, а чтобы искать проблему, я думаю нужно разбирать функцию декодирования HAL_JPEG_Decode и совместно изучать как работает сжатие, таблицы квантования и т.д., наверное предыдущие блоки несут информацию для следующих или это проеб ST с халом. Очень не хочется ковыряться в стандартных библиотеках, наверное так и оставлю в таком виде, мне интиреснее сделать перелистывание изображений влево и вправо, а не открыл - закрыл - открыл другую, сейчас падает оно в хардфаулт, когда подключу внешнюю память появится возможность обрабатывать изображения покрупнее, нужно будет уменьшать разрешение, может позже вернусь к этому вопросу
- Реклама
- Сообщения: 865
- Зарегистрирован: Пн фев 16, 2026 17:30:02
Чтобы сделать анимированное пролистывание вперед-назад, нужно декодировать два jpeg-файла и поместить в память две картинки. Поскольку внутри файла закодированные данные идут сплошным потоком и блоки 8х8 пикс связаны друг с другом (дифференциальное кодирование по таблицам Хаффмана), не получится произвольно выбрать пиксель в координатах изображения.
Поэтому, когда надо сделать анимацию перелистывания - декодируем и получаем следующую (предыдущую) картинку и средствами DMA2D в каждом шаге анимации передвигаем текущую картинку с обрезкой и копируем часть второй картинки.
Для экспериментов с внешней SDRAM памятью лучше купить на Алиэкспрессе готовую плату с STM32H743 и SDRAM. Потому как проводками соединять на частотах под сотню мегагерц - эт фигня выйдет.
Поэтому, когда надо сделать анимацию перелистывания - декодируем и получаем следующую (предыдущую) картинку и средствами DMA2D в каждом шаге анимации передвигаем текущую картинку с обрезкой и копируем часть второй картинки.
Для экспериментов с внешней SDRAM памятью лучше купить на Алиэкспрессе готовую плату с STM32H743 и SDRAM. Потому как проводками соединять на частотах под сотню мегагерц - эт фигня выйдет.


