mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2026-01-31 14:51:11 +03:00
Tweak for JPEG - release
This commit is contained in:
@@ -24,6 +24,7 @@ typedef struct {
|
|||||||
const unsigned char *InData; // Pointer to jpeg data
|
const unsigned char *InData; // Pointer to jpeg data
|
||||||
int InPos; // Current position in jpeg data
|
int InPos; // Current position in jpeg data
|
||||||
int Width, Height;
|
int Width, Height;
|
||||||
|
uint32_t Pixels;
|
||||||
uint8_t Mode;
|
uint8_t Mode;
|
||||||
union {
|
union {
|
||||||
void *OutData;
|
void *OutData;
|
||||||
@@ -143,6 +144,8 @@ static unsigned OutHandlerDirect(JDEC *Decoder, void *Bitmap, JRECT *Frame) {
|
|||||||
uint8_t *Pixels = (uint8_t*) Bitmap;
|
uint8_t *Pixels = (uint8_t*) Bitmap;
|
||||||
int Shift = 8 - Context->Depth;
|
int Shift = 8 - Context->Depth;
|
||||||
|
|
||||||
|
Context->Pixels += (Frame->bottom - Frame->top + 1) * (Frame->right - Frame->left + 1); \
|
||||||
|
|
||||||
// decoded image is RGB888, shift only make sense for grayscale
|
// decoded image is RGB888, shift only make sense for grayscale
|
||||||
if (Context->Mode == GDS_RGB888) {
|
if (Context->Mode == GDS_RGB888) {
|
||||||
OUTHANDLERDIRECT(Scaler888, 0);
|
OUTHANDLERDIRECT(Scaler888, 0);
|
||||||
@@ -418,10 +421,11 @@ bool GDS_DrawJPEG(struct GDS_Device* Device, uint8_t *Source, int x, int y, int
|
|||||||
Context.XMin = x - Context.XOfs;
|
Context.XMin = x - Context.XOfs;
|
||||||
Context.YMin = y - Context.YOfs;
|
Context.YMin = y - Context.YOfs;
|
||||||
Context.Mode = Device->Mode;
|
Context.Mode = Device->Mode;
|
||||||
|
Context.Pixels = 0;
|
||||||
|
|
||||||
// do decompress & draw
|
// do decompress & draw
|
||||||
Res = jd_decomp(&Decoder, OutHandlerDirect, N);
|
Res = jd_decomp(&Decoder, OutHandlerDirect, N);
|
||||||
if (Res == JDR_OK) {
|
if (Res == JDR_OK && Context.Pixels == Context.Width * Context.Height) {
|
||||||
Device->Dirty = true;
|
Device->Dirty = true;
|
||||||
Ret = true;
|
Ret = true;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -891,7 +891,11 @@ static void grfa_handler(u8_t *data, int len) {
|
|||||||
artwork.size += size;
|
artwork.size += size;
|
||||||
if (artwork.size == length) {
|
if (artwork.size == length) {
|
||||||
GDS_ClearWindow(display, artwork.x, artwork.y, -1, -1, GDS_COLOR_BLACK);
|
GDS_ClearWindow(display, artwork.x, artwork.y, -1, -1, GDS_COLOR_BLACK);
|
||||||
GDS_DrawJPEG(display, artwork.data, artwork.x, artwork.y, artwork.y < displayer.height ? (GDS_IMAGE_RIGHT | GDS_IMAGE_TOP) : GDS_IMAGE_CENTER);
|
xSemaphoreTake(displayer.mutex, portMAX_DELAY);
|
||||||
|
for (int i = 0; i < 2 && !GDS_DrawJPEG(display, artwork.data, artwork.x, artwork.y, artwork.y < displayer.height ? (GDS_IMAGE_RIGHT | GDS_IMAGE_TOP) : GDS_IMAGE_CENTER); i++) {
|
||||||
|
LOG_WARN("JPEG decoding error, pass %d", i+1);
|
||||||
|
}
|
||||||
|
xSemaphoreGive(displayer.mutex);
|
||||||
free(artwork.data);
|
free(artwork.data);
|
||||||
artwork.data = NULL;
|
artwork.data = NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user