193 #ifdef HAL_JPEG_MODULE_ENABLED 195 #if defined (STM32F767xx) || defined (STM32F769xx) || defined (STM32F777xx) || defined (STM32F779xx) 201 #define JPEG_TIMEOUT_VALUE ((uint32_t)1000U) 202 #define JPEG_AC_HUFF_TABLE_SIZE ((uint32_t)162U) 203 #define JPEG_DC_HUFF_TABLE_SIZE ((uint32_t)12U) 205 #define JPEG_FIFO_SIZE ((uint32_t)8U) 207 #define JPEG_INTERRUPT_MASK ((uint32_t)0x0000007EU) 209 #define JPEG_DMA_MASK ((uint32_t)0x00001800U) 210 #define JPEG_DMA_IDMA ((uint32_t)JPEG_CR_IDMAEN) 211 #define JPEG_DMA_ODMA ((uint32_t)JPEG_CR_ODMAEN) 213 #define JPEG_CONTEXT_ENCODE ((uint32_t)0x00000001U) 214 #define JPEG_CONTEXT_DECODE ((uint32_t)0x00000002U) 215 #define JPEG_CONTEXT_OPERATION_MASK ((uint32_t)0x00000003U) 217 #define JPEG_CONTEXT_POLLING ((uint32_t)0x00000004U) 218 #define JPEG_CONTEXT_IT ((uint32_t)0x00000008U) 219 #define JPEG_CONTEXT_DMA ((uint32_t)0x0000000CU) 220 #define JPEG_CONTEXT_METHOD_MASK ((uint32_t)0x0000000CU) 223 #define JPEG_CONTEXT_CONF_ENCODING ((uint32_t)0x00000100U) 225 #define JPEG_CONTEXT_PAUSE_INPUT ((uint32_t)0x00001000U) 226 #define JPEG_CONTEXT_PAUSE_OUTPUT ((uint32_t)0x00002000U) 228 #define JPEG_CONTEXT_CUSTOM_TABLES ((uint32_t)0x00004000U) 230 #define JPEG_CONTEXT_ENDING_DMA ((uint32_t)0x00008000U) 232 #define JPEG_PROCESS_ONGOING ((uint32_t)0x00000000U) 233 #define JPEG_PROCESS_DONE ((uint32_t)0x00000001U) 252 uint8_t HuffVal[162];
255 }JPEG_ACHuffTableTypeDef;
265 }JPEG_DCHuffTableTypeDef;
269 uint8_t CodeLength[JPEG_AC_HUFF_TABLE_SIZE];
271 uint32_t HuffmanCode[JPEG_AC_HUFF_TABLE_SIZE];
273 }JPEG_AC_HuffCodeTableTypeDef;
277 uint8_t CodeLength[JPEG_DC_HUFF_TABLE_SIZE];
279 uint32_t HuffmanCode[JPEG_DC_HUFF_TABLE_SIZE];
281 }JPEG_DC_HuffCodeTableTypeDef;
290 #define JPEG_ENABLE_DMA(__HANDLE__,__DMA__) ((__HANDLE__)->Instance->CR |= ((__DMA__) & JPEG_DMA_MASK)) 293 #define JPEG_DISABLE_DMA(__HANDLE__,__DMA__) MODIFY_REG((__HANDLE__)->Instance->CR, ((__DMA__) & JPEG_DMA_MASK), 0) 304 static const JPEG_DCHuffTableTypeDef JPEG_DCLUM_HuffTable =
306 { 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 },
308 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xa, 0xb }
312 static const JPEG_DCHuffTableTypeDef JPEG_DCCHROM_HuffTable =
314 { 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 },
316 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xa, 0xb }
319 static const JPEG_ACHuffTableTypeDef JPEG_ACLUM_HuffTable =
321 { 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d },
323 { 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
324 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
325 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,
326 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,
327 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16,
328 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,
329 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
330 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
331 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
332 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
333 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
334 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
335 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
336 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
337 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
338 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
339 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,
340 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,
341 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
342 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
346 static const JPEG_ACHuffTableTypeDef JPEG_ACCHROM_HuffTable =
348 { 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77 },
350 { 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
351 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
352 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
353 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,
354 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34,
355 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,
356 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38,
357 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
358 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
359 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
360 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
361 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
362 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96,
363 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,
364 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,
365 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,
366 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2,
367 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
368 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
369 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
377 static const uint8_t JPEG_LUM_QuantTable[JPEG_QUANT_TABLE_SIZE] =
379 16, 11, 10, 16, 24, 40, 51, 61,
380 12, 12, 14, 19, 26, 58, 60, 55,
381 14, 13, 16, 24, 40, 57, 69, 56,
382 14, 17, 22, 29, 51, 87, 80, 62,
383 18, 22, 37, 56, 68, 109, 103, 77,
384 24, 35, 55, 64, 81, 104, 113, 92,
385 49, 64, 78, 87, 103, 121, 120, 101,
386 72, 92, 95, 98, 112, 100, 103, 99
388 static const uint8_t JPEG_CHROM_QuantTable[JPEG_QUANT_TABLE_SIZE] =
390 17, 18, 24, 47, 99, 99, 99, 99,
391 18, 21, 26, 66, 99, 99, 99, 99,
392 24, 26, 56, 99, 99, 99, 99, 99,
393 47, 66, 99, 99, 99, 99, 99, 99,
394 99, 99, 99, 99, 99, 99, 99, 99,
395 99, 99, 99, 99, 99, 99, 99, 99,
396 99, 99, 99, 99, 99, 99, 99, 99,
397 99, 99, 99, 99, 99, 99, 99, 99
400 static const uint8_t JPEG_ZIGZAG_ORDER[JPEG_QUANT_TABLE_SIZE] =
402 0, 1, 8, 16, 9, 2, 3, 10,
403 17, 24, 32, 25, 18, 11, 4, 5,
404 12, 19, 26, 33, 40, 48, 41, 34,
405 27, 20, 13, 6, 7, 14, 21, 28,
406 35, 42, 49, 56, 57, 50, 43, 36,
407 29, 22, 15, 23, 30, 37, 44, 51,
408 58, 59, 52, 45, 38, 31, 39, 46,
409 53, 60, 61, 54, 47, 55, 62, 63
420 static HAL_StatusTypeDef JPEG_Bits_To_SizeCodes(uint8_t *Bits, uint8_t *Huffsize, uint32_t *Huffcode, uint32_t *LastK);
421 static HAL_StatusTypeDef JPEG_DCHuff_BitsVals_To_SizeCodes(JPEG_DCHuffTableTypeDef *DC_BitsValsTable, JPEG_DC_HuffCodeTableTypeDef *DC_SizeCodesTable);
422 static HAL_StatusTypeDef JPEG_ACHuff_BitsVals_To_SizeCodes(JPEG_ACHuffTableTypeDef *AC_BitsValsTable, JPEG_AC_HuffCodeTableTypeDef *AC_SizeCodesTable);
423 static HAL_StatusTypeDef JPEG_Set_HuffDC_Mem(JPEG_HandleTypeDef *hjpeg, JPEG_DCHuffTableTypeDef *HuffTableDC, uint32_t *DCTableAddress);
424 static HAL_StatusTypeDef JPEG_Set_HuffAC_Mem(JPEG_HandleTypeDef *hjpeg, JPEG_ACHuffTableTypeDef *HuffTableAC, uint32_t *ACTableAddress);
425 static HAL_StatusTypeDef JPEG_Set_HuffEnc_Mem(JPEG_HandleTypeDef *hjpeg, JPEG_ACHuffTableTypeDef *HuffTableAC0, JPEG_DCHuffTableTypeDef *HuffTableDC0 , JPEG_ACHuffTableTypeDef *HuffTableAC1, JPEG_DCHuffTableTypeDef *HuffTableDC1);
426 static void JPEG_Set_Huff_DHTMem(JPEG_HandleTypeDef *hjpeg, JPEG_ACHuffTableTypeDef *HuffTableAC0, JPEG_DCHuffTableTypeDef *HuffTableDC0 , JPEG_ACHuffTableTypeDef *HuffTableAC1, JPEG_DCHuffTableTypeDef *HuffTableDC1);
427 static HAL_StatusTypeDef JPEG_Set_Quantization_Mem(JPEG_HandleTypeDef *hjpeg, uint8_t *QTable, uint32_t *QTableAddress);
428 static void JPEG_SetColorYCBCR(JPEG_HandleTypeDef *hjpeg);
429 static void JPEG_SetColorGrayScale(JPEG_HandleTypeDef *hjpeg);
430 static void JPEG_SetColorCMYK(JPEG_HandleTypeDef *hjpeg);
432 static void JPEG_Init_Process(JPEG_HandleTypeDef *hjpeg);
433 static uint32_t JPEG_Process(JPEG_HandleTypeDef *hjpeg);
434 static void JPEG_ReadInputData(JPEG_HandleTypeDef *hjpeg, uint32_t nbRequestWords);
435 static void JPEG_StoreOutputData(JPEG_HandleTypeDef *hjpeg, uint32_t nbOutputWords);
436 static uint32_t JPEG_GetQuality(JPEG_HandleTypeDef *hjpeg);
439 static uint32_t JPEG_DMA_ContinueProcess(JPEG_HandleTypeDef *hjpeg);
440 static uint32_t JPEG_DMA_EndProcess(JPEG_HandleTypeDef *hjpeg);
479 uint32_t acLum_huffmanTableAddr = (uint32_t)(&JPEG_ACLUM_HuffTable);
480 uint32_t dcLum_huffmanTableAddr = (uint32_t)(&JPEG_DCLUM_HuffTable);
481 uint32_t acChrom_huffmanTableAddr = (uint32_t)(&JPEG_ACCHROM_HuffTable);
482 uint32_t dcChrom_huffmanTableAddr = (uint32_t)(&JPEG_DCCHROM_HuffTable);
490 if(hjpeg->State == HAL_JPEG_STATE_RESET)
496 HAL_JPEG_MspInit(hjpeg);
500 hjpeg->State = HAL_JPEG_STATE_BUSY;
503 __HAL_JPEG_ENABLE(hjpeg);
509 __HAL_JPEG_DISABLE_IT(hjpeg,JPEG_INTERRUPT_MASK);
512 JPEG_DISABLE_DMA(hjpeg,JPEG_DMA_MASK);
519 __HAL_JPEG_CLEAR_FLAG(hjpeg,JPEG_FLAG_ALL);
521 hjpeg->QuantTable0 = (uint8_t *)JPEG_LUM_QuantTable;
522 hjpeg->QuantTable1 = (uint8_t *)JPEG_CHROM_QuantTable;
523 hjpeg->QuantTable2 =
NULL;
524 hjpeg->QuantTable3 =
NULL;
527 if(JPEG_Set_HuffEnc_Mem(hjpeg, (JPEG_ACHuffTableTypeDef *)acLum_huffmanTableAddr, (JPEG_DCHuffTableTypeDef *)dcLum_huffmanTableAddr, (JPEG_ACHuffTableTypeDef *)acChrom_huffmanTableAddr, (JPEG_DCHuffTableTypeDef *)dcChrom_huffmanTableAddr) !=
HAL_OK)
529 hjpeg->ErrorCode = HAL_JPEG_ERROR_HUFF_TABLE;
538 hjpeg->JpegInCount = 0;
539 hjpeg->JpegOutCount = 0;
542 hjpeg->State = HAL_JPEG_STATE_READY;
545 hjpeg->ErrorCode = HAL_JPEG_ERROR_NONE;
569 HAL_JPEG_MspDeInit(hjpeg);
572 hjpeg->State = HAL_JPEG_STATE_BUSY;
575 hjpeg->ErrorCode = HAL_JPEG_ERROR_NONE;
578 hjpeg->JpegInCount = 0;
579 hjpeg->JpegOutCount = 0;
582 hjpeg->State = HAL_JPEG_STATE_RESET;
600 __weak
void HAL_JPEG_MspInit(JPEG_HandleTypeDef *hjpeg)
616 __weak
void HAL_JPEG_MspDeInit(JPEG_HandleTypeDef *hjpeg)
656 HAL_StatusTypeDef HAL_JPEG_ConfigEncoding(JPEG_HandleTypeDef *hjpeg, JPEG_ConfTypeDef *pConf)
659 uint32_t numberMCU, hfactor, vfactor,hMCU, vMCU;
662 if( (hjpeg ==
NULL) || (pConf ==
NULL) )
670 assert_param(IS_JPEG_CHROMASUBSAMPLING(pConf->ChromaSubsampling));
671 assert_param(IS_JPEG_IMAGE_QUALITY(pConf->ImageQuality));
676 if(hjpeg->State == HAL_JPEG_STATE_READY)
678 hjpeg->State = HAL_JPEG_STATE_BUSY;
680 hjpeg->Conf.ColorSpace = pConf->ColorSpace;
681 hjpeg->Conf.ChromaSubsampling = pConf->ChromaSubsampling;
682 hjpeg->Conf.ImageHeight = pConf->ImageHeight;
683 hjpeg->Conf.ImageWidth = pConf->ImageWidth;
684 hjpeg->Conf.ImageQuality = pConf->ImageQuality;
690 if(hjpeg->Conf.ColorSpace == JPEG_GRAYSCALE_COLORSPACE)
693 hjpeg->Conf.ChromaSubsampling = JPEG_444_SUBSAMPLING;
695 JPEG_SetColorGrayScale(hjpeg);
697 error = JPEG_Set_Quantization_Mem(hjpeg, hjpeg->QuantTable0, (uint32_t *)(hjpeg->Instance->QMEM0));
699 else if(hjpeg->Conf.ColorSpace == JPEG_YCBCR_COLORSPACE)
707 JPEG_SetColorYCBCR(hjpeg);
710 error = JPEG_Set_Quantization_Mem(hjpeg, hjpeg->QuantTable0, (uint32_t *)(hjpeg->Instance->QMEM0));
712 error |= JPEG_Set_Quantization_Mem(hjpeg, hjpeg->QuantTable1, (uint32_t *)(hjpeg->Instance->QMEM1));
714 if((hjpeg->Context & JPEG_CONTEXT_CUSTOM_TABLES) != 0)
720 error |= JPEG_Set_Quantization_Mem(hjpeg, hjpeg->QuantTable2, (uint32_t *)(hjpeg->Instance->QMEM2));
731 else if(hjpeg->Conf.ColorSpace == JPEG_CMYK_COLORSPACE)
733 JPEG_SetColorCMYK(hjpeg);
736 error = JPEG_Set_Quantization_Mem(hjpeg, hjpeg->QuantTable0, (uint32_t *)(hjpeg->Instance->QMEM0));
739 if((hjpeg->Context & JPEG_CONTEXT_CUSTOM_TABLES) != 0)
744 error |= JPEG_Set_Quantization_Mem(hjpeg, hjpeg->QuantTable1, (uint32_t *)(hjpeg->Instance->QMEM1));
745 error |= JPEG_Set_Quantization_Mem(hjpeg, hjpeg->QuantTable2, (uint32_t *)(hjpeg->Instance->QMEM2));
746 error |= JPEG_Set_Quantization_Mem(hjpeg, hjpeg->QuantTable3, (uint32_t *)(hjpeg->Instance->QMEM3));
761 hjpeg->ErrorCode = HAL_JPEG_ERROR_QUANT_TABLE;
767 hjpeg->State = HAL_JPEG_STATE_READY;
772 hjpeg->Instance->CONFR1 |= ((hjpeg->Conf.ImageHeight & 0x0000FFFF) << 16);
773 hjpeg->Instance->CONFR3 |= ((hjpeg->Conf.ImageWidth & 0x0000FFFF) << 16);
775 if(hjpeg->Conf.ChromaSubsampling == JPEG_420_SUBSAMPLING)
780 else if(hjpeg->Conf.ChromaSubsampling == JPEG_422_SUBSAMPLING)
791 hMCU = (hjpeg->Conf.ImageWidth / hfactor);
792 if((hjpeg->Conf.ImageWidth % hfactor) != 0)
797 vMCU = (hjpeg->Conf.ImageHeight / vfactor);
798 if((hjpeg->Conf.ImageHeight % vfactor) != 0)
803 numberMCU = (hMCU * vMCU) - 1;
807 hjpeg->Context |= JPEG_CONTEXT_CONF_ENCODING;
813 hjpeg->State = HAL_JPEG_STATE_READY;
837 HAL_StatusTypeDef HAL_JPEG_GetInfo(JPEG_HandleTypeDef *hjpeg, JPEG_ConfTypeDef *pInfo)
839 uint32_t yblockNb, cBblockNb, cRblockNb;
842 if((hjpeg ==
NULL) || (pInfo ==
NULL))
850 pInfo->ColorSpace = JPEG_YCBCR_COLORSPACE;
854 pInfo->ColorSpace = JPEG_GRAYSCALE_COLORSPACE;
858 pInfo->ColorSpace = JPEG_CMYK_COLORSPACE;
861 pInfo->ImageHeight = (hjpeg->Instance->CONFR1 & 0xFFFF0000U) >> 16;
862 pInfo->ImageWidth = (hjpeg->Instance->CONFR3 & 0xFFFF0000U) >> 16;
864 if((pInfo->ColorSpace == JPEG_YCBCR_COLORSPACE) || (pInfo->ColorSpace == JPEG_CMYK_COLORSPACE))
870 if((yblockNb == 1) && (cBblockNb == 0) && (cRblockNb == 0))
872 pInfo->ChromaSubsampling = JPEG_422_SUBSAMPLING;
874 else if((yblockNb == 0) && (cBblockNb == 0) && (cRblockNb == 0))
876 pInfo->ChromaSubsampling = JPEG_444_SUBSAMPLING;
878 else if((yblockNb == 3) && (cBblockNb == 0) && (cRblockNb == 0))
880 pInfo->ChromaSubsampling = JPEG_420_SUBSAMPLING;
884 pInfo->ChromaSubsampling = JPEG_444_SUBSAMPLING;
889 pInfo->ChromaSubsampling = JPEG_444_SUBSAMPLING;
892 pInfo->ImageQuality = JPEG_GetQuality(hjpeg);
909 if(hjpeg->State == HAL_JPEG_STATE_READY)
912 hjpeg->State = HAL_JPEG_STATE_BUSY;
921 hjpeg->State = HAL_JPEG_STATE_READY;
945 if(hjpeg->State == HAL_JPEG_STATE_READY)
948 hjpeg->State = HAL_JPEG_STATE_BUSY;
957 hjpeg->State = HAL_JPEG_STATE_READY;
987 HAL_StatusTypeDef HAL_JPEG_SetUserQuantTables(JPEG_HandleTypeDef *hjpeg, uint8_t *QTable0, uint8_t *QTable1, uint8_t *QTable2, uint8_t *QTable3)
992 if(hjpeg->State == HAL_JPEG_STATE_READY)
995 hjpeg->State = HAL_JPEG_STATE_BUSY;
997 hjpeg->Context |= JPEG_CONTEXT_CUSTOM_TABLES;
999 hjpeg->QuantTable0 = QTable0;
1000 hjpeg->QuantTable1 = QTable1;
1001 hjpeg->QuantTable2 = QTable2;
1002 hjpeg->QuantTable3 = QTable3;
1008 hjpeg->State = HAL_JPEG_STATE_READY;
1061 HAL_StatusTypeDef HAL_JPEG_Encode(JPEG_HandleTypeDef *hjpeg, uint8_t *pDataInMCU, uint32_t InDataLength, uint8_t *pDataOut, uint32_t OutDataLength, uint32_t Timeout)
1063 uint32_t tickstart = 0;
1070 if((hjpeg ==
NULL) || (pDataInMCU ==
NULL) || (pDataOut ==
NULL) || \
1071 (InDataLength == 0) || (OutDataLength == 0))
1078 if(hjpeg->State != HAL_JPEG_STATE_READY)
1086 if(hjpeg->State == HAL_JPEG_STATE_READY)
1088 if((hjpeg->Context & JPEG_CONTEXT_CONF_ENCODING) == JPEG_CONTEXT_CONF_ENCODING )
1091 hjpeg->State = HAL_JPEG_STATE_BUSY_ENCODING;
1094 hjpeg->Context &= ~(JPEG_CONTEXT_OPERATION_MASK | JPEG_CONTEXT_METHOD_MASK);
1095 hjpeg->Context |= (JPEG_CONTEXT_ENCODE | JPEG_CONTEXT_POLLING);
1100 InDataLength = InDataLength - (InDataLength % 4);
1101 OutDataLength = OutDataLength - (OutDataLength % 4);
1104 hjpeg->pJpegInBuffPtr = pDataInMCU;
1105 hjpeg->pJpegOutBuffPtr = pDataOut;
1106 hjpeg->InDataLength = InDataLength;
1107 hjpeg->OutDataLength = OutDataLength;
1110 hjpeg->JpegInCount = 0;
1111 hjpeg->JpegOutCount = 0;
1114 JPEG_Init_Process(hjpeg);
1117 while((JPEG_Process(hjpeg) == JPEG_PROCESS_ONGOING))
1121 if((Timeout == 0)||((
HAL_GetTick() - tickstart ) > Timeout))
1125 hjpeg->ErrorCode |= HAL_JPEG_ERROR_TIMEOUT;
1131 hjpeg->State= HAL_JPEG_STATE_READY;
1142 hjpeg->State= HAL_JPEG_STATE_READY;
1167 HAL_StatusTypeDef HAL_JPEG_Decode(JPEG_HandleTypeDef *hjpeg ,uint8_t *pDataIn ,uint32_t InDataLength ,uint8_t *pDataOutMCU ,uint32_t OutDataLength, uint32_t Timeout)
1169 uint32_t tickstart = 0;
1176 if((hjpeg ==
NULL) || (pDataIn ==
NULL) || (pDataOutMCU ==
NULL) || \
1177 (InDataLength == 0) || (OutDataLength == 0))
1188 if(hjpeg->State == HAL_JPEG_STATE_READY)
1191 hjpeg->State = HAL_JPEG_STATE_BUSY_DECODING;
1195 hjpeg->Context &= ~(JPEG_CONTEXT_OPERATION_MASK | JPEG_CONTEXT_METHOD_MASK);
1196 hjpeg->Context |= (JPEG_CONTEXT_DECODE | JPEG_CONTEXT_POLLING);
1199 InDataLength = InDataLength - (InDataLength % 4);
1200 OutDataLength = OutDataLength - (OutDataLength % 4);
1203 hjpeg->pJpegInBuffPtr = pDataIn;
1204 hjpeg->pJpegOutBuffPtr = pDataOutMCU;
1205 hjpeg->InDataLength = InDataLength;
1206 hjpeg->OutDataLength = OutDataLength;
1209 hjpeg->JpegInCount = 0;
1210 hjpeg->JpegOutCount = 0;
1213 JPEG_Init_Process(hjpeg);
1216 while((JPEG_Process(hjpeg) == JPEG_PROCESS_ONGOING))
1220 if((Timeout == 0)||((
HAL_GetTick() - tickstart ) > Timeout))
1224 hjpeg->ErrorCode |= HAL_JPEG_ERROR_TIMEOUT;
1230 hjpeg->State= HAL_JPEG_STATE_READY;
1241 hjpeg->State= HAL_JPEG_STATE_READY;
1264 HAL_StatusTypeDef HAL_JPEG_Encode_IT(JPEG_HandleTypeDef *hjpeg, uint8_t *pDataInMCU, uint32_t InDataLength, uint8_t *pDataOut, uint32_t OutDataLength)
1271 if((hjpeg ==
NULL) || (pDataInMCU ==
NULL) || (pDataOut ==
NULL) || \
1272 (InDataLength == 0) || (OutDataLength == 0))
1280 if(hjpeg->State != HAL_JPEG_STATE_READY)
1289 if((hjpeg->Context & JPEG_CONTEXT_CONF_ENCODING) == JPEG_CONTEXT_CONF_ENCODING )
1292 hjpeg->State = HAL_JPEG_STATE_BUSY_ENCODING;
1295 hjpeg->Context &= ~(JPEG_CONTEXT_OPERATION_MASK | JPEG_CONTEXT_METHOD_MASK);
1296 hjpeg->Context |= (JPEG_CONTEXT_ENCODE | JPEG_CONTEXT_IT);
1299 InDataLength = InDataLength - (InDataLength % 4);
1300 OutDataLength = OutDataLength - (OutDataLength % 4);
1303 hjpeg->pJpegInBuffPtr = pDataInMCU;
1304 hjpeg->pJpegOutBuffPtr = pDataOut;
1305 hjpeg->InDataLength = InDataLength;
1306 hjpeg->OutDataLength = OutDataLength;
1309 hjpeg->JpegInCount = 0;
1310 hjpeg->JpegOutCount = 0;
1313 JPEG_Init_Process(hjpeg);
1338 HAL_StatusTypeDef HAL_JPEG_Decode_IT(JPEG_HandleTypeDef *hjpeg ,uint8_t *pDataIn ,uint32_t InDataLength ,uint8_t *pDataOutMCU ,uint32_t OutDataLength)
1345 if((hjpeg ==
NULL) || (pDataIn ==
NULL) || (pDataOutMCU ==
NULL) || \
1346 (InDataLength == 0) || (OutDataLength == 0))
1354 if(hjpeg->State == HAL_JPEG_STATE_READY)
1357 hjpeg->State = HAL_JPEG_STATE_BUSY_DECODING;
1360 hjpeg->Context &= ~(JPEG_CONTEXT_OPERATION_MASK | JPEG_CONTEXT_METHOD_MASK);
1361 hjpeg->Context |= (JPEG_CONTEXT_DECODE | JPEG_CONTEXT_IT);
1364 InDataLength = InDataLength - (InDataLength % 4);
1365 OutDataLength = OutDataLength - (OutDataLength % 4);
1368 hjpeg->pJpegInBuffPtr = pDataIn;
1369 hjpeg->pJpegOutBuffPtr = pDataOutMCU;
1370 hjpeg->InDataLength = InDataLength;
1371 hjpeg->OutDataLength = OutDataLength;
1374 hjpeg->JpegInCount = 0;
1375 hjpeg->JpegOutCount = 0;
1378 JPEG_Init_Process(hjpeg);
1402 HAL_StatusTypeDef HAL_JPEG_Encode_DMA(JPEG_HandleTypeDef *hjpeg, uint8_t *pDataInMCU, uint32_t InDataLength, uint8_t *pDataOut, uint32_t OutDataLength)
1409 if((hjpeg ==
NULL) || (pDataInMCU ==
NULL) || (pDataOut ==
NULL) || \
1410 (InDataLength == 0) || (OutDataLength == 0))
1418 if(hjpeg->State != HAL_JPEG_STATE_READY)
1427 if((hjpeg->Context & JPEG_CONTEXT_CONF_ENCODING) == JPEG_CONTEXT_CONF_ENCODING )
1430 hjpeg->State = HAL_JPEG_STATE_BUSY_ENCODING;
1433 hjpeg->Context &= ~(JPEG_CONTEXT_OPERATION_MASK | JPEG_CONTEXT_METHOD_MASK);
1434 hjpeg->Context |= (JPEG_CONTEXT_ENCODE | JPEG_CONTEXT_DMA);
1437 hjpeg->pJpegInBuffPtr = pDataInMCU;
1438 hjpeg->pJpegOutBuffPtr = pDataOut;
1439 hjpeg->InDataLength = InDataLength;
1440 hjpeg->OutDataLength = OutDataLength;
1443 hjpeg->JpegInCount = 0;
1444 hjpeg->JpegOutCount = 0;
1447 JPEG_Init_Process(hjpeg);
1450 JPEG_DMA_StartProcess(hjpeg);
1475 HAL_StatusTypeDef HAL_JPEG_Decode_DMA(JPEG_HandleTypeDef *hjpeg ,uint8_t *pDataIn ,uint32_t InDataLength ,uint8_t *pDataOutMCU ,uint32_t OutDataLength)
1482 if((hjpeg ==
NULL) || (pDataIn ==
NULL) || (pDataOutMCU ==
NULL) || \
1483 (InDataLength == 0) || (OutDataLength == 0))
1491 if(hjpeg->State == HAL_JPEG_STATE_READY)
1494 hjpeg->State = HAL_JPEG_STATE_BUSY_DECODING;
1497 hjpeg->Context &= ~(JPEG_CONTEXT_OPERATION_MASK | JPEG_CONTEXT_METHOD_MASK);
1498 hjpeg->Context |= (JPEG_CONTEXT_DECODE | JPEG_CONTEXT_DMA);
1501 hjpeg->pJpegInBuffPtr = pDataIn;
1502 hjpeg->pJpegOutBuffPtr = pDataOutMCU;
1503 hjpeg->InDataLength = InDataLength;
1504 hjpeg->OutDataLength = OutDataLength;
1507 hjpeg->JpegInCount = 0;
1508 hjpeg->JpegOutCount = 0;
1511 JPEG_Init_Process(hjpeg);
1514 JPEG_DMA_StartProcess(hjpeg);
1538 HAL_StatusTypeDef HAL_JPEG_Pause(JPEG_HandleTypeDef *hjpeg, uint32_t XferSelection)
1542 assert_param(IS_JPEG_PAUSE_RESUME_STATE(XferSelection));
1544 if((hjpeg->Context & JPEG_CONTEXT_METHOD_MASK) == JPEG_CONTEXT_DMA)
1546 if((XferSelection & JPEG_PAUSE_RESUME_INPUT) == JPEG_PAUSE_RESUME_INPUT)
1548 hjpeg->Context |= JPEG_CONTEXT_PAUSE_INPUT;
1549 mask |= JPEG_DMA_IDMA;
1551 if((XferSelection & JPEG_PAUSE_RESUME_OUTPUT) == JPEG_PAUSE_RESUME_OUTPUT)
1553 hjpeg->Context |= JPEG_CONTEXT_PAUSE_OUTPUT;
1554 mask |= JPEG_DMA_ODMA;
1556 JPEG_DISABLE_DMA(hjpeg,mask);
1559 else if((hjpeg->Context & JPEG_CONTEXT_METHOD_MASK) == JPEG_CONTEXT_IT)
1562 if((XferSelection & JPEG_PAUSE_RESUME_INPUT) == JPEG_PAUSE_RESUME_INPUT)
1564 hjpeg->Context |= JPEG_CONTEXT_PAUSE_INPUT;
1565 mask |= (JPEG_IT_IFT | JPEG_IT_IFNF);
1567 if((XferSelection & JPEG_PAUSE_RESUME_OUTPUT) == JPEG_PAUSE_RESUME_OUTPUT)
1569 hjpeg->Context |= JPEG_CONTEXT_PAUSE_OUTPUT;
1570 mask |= (JPEG_IT_OFT | JPEG_IT_OFNE | JPEG_IT_EOC);
1572 __HAL_JPEG_DISABLE_IT(hjpeg,mask);
1590 HAL_StatusTypeDef HAL_JPEG_Resume(JPEG_HandleTypeDef *hjpeg, uint32_t XferSelection)
1594 assert_param(IS_JPEG_PAUSE_RESUME_STATE(XferSelection));
1596 if((hjpeg->Context & JPEG_CONTEXT_METHOD_MASK) == JPEG_CONTEXT_DMA)
1599 if((XferSelection & JPEG_PAUSE_RESUME_INPUT) == JPEG_PAUSE_RESUME_INPUT)
1601 hjpeg->Context &= (~JPEG_CONTEXT_PAUSE_INPUT);
1602 mask |= JPEG_DMA_IDMA;
1606 hjpeg->InDataLength = hjpeg->InDataLength - (hjpeg->InDataLength % 4);
1608 if(hjpeg->InDataLength > 0)
1611 HAL_DMA_Start_IT(hjpeg->hdmain, (uint32_t)hjpeg->pJpegInBuffPtr, (uint32_t)&hjpeg->Instance->DIR, hjpeg->InDataLength >> 2);
1615 if((XferSelection & JPEG_PAUSE_RESUME_OUTPUT) == JPEG_PAUSE_RESUME_OUTPUT)
1617 hjpeg->Context &= (~JPEG_CONTEXT_PAUSE_OUTPUT);
1618 mask |= JPEG_DMA_ODMA;
1621 HAL_DMA_Start_IT(hjpeg->hdmaout, (uint32_t)&hjpeg->Instance->DOR, (uint32_t)hjpeg->pJpegOutBuffPtr, hjpeg->OutDataLength >> 2);
1623 JPEG_ENABLE_DMA(hjpeg,mask);
1626 else if((hjpeg->Context & JPEG_CONTEXT_METHOD_MASK) == JPEG_CONTEXT_IT)
1628 if((XferSelection & JPEG_PAUSE_RESUME_INPUT) == JPEG_PAUSE_RESUME_INPUT)
1630 hjpeg->Context &= (~JPEG_CONTEXT_PAUSE_INPUT);
1631 mask |= (JPEG_IT_IFT | JPEG_IT_IFNF);
1633 if((XferSelection & JPEG_PAUSE_RESUME_OUTPUT) == JPEG_PAUSE_RESUME_OUTPUT)
1635 hjpeg->Context &= (~JPEG_CONTEXT_PAUSE_OUTPUT);
1636 mask |= (JPEG_IT_OFT | JPEG_IT_OFNE | JPEG_IT_EOC);
1638 __HAL_JPEG_ENABLE_IT(hjpeg,mask);
1654 void HAL_JPEG_ConfigInputBuffer(JPEG_HandleTypeDef *hjpeg, uint8_t *pNewInputBuffer, uint32_t InDataLength)
1656 hjpeg->pJpegInBuffPtr = pNewInputBuffer;
1657 hjpeg->InDataLength = InDataLength;
1668 void HAL_JPEG_ConfigOutputBuffer(JPEG_HandleTypeDef *hjpeg, uint8_t *pNewOutputBuffer, uint32_t OutDataLength)
1670 hjpeg->pJpegOutBuffPtr = pNewOutputBuffer;
1671 hjpeg->OutDataLength = OutDataLength;
1682 uint32_t tickstart, tmpContext;
1684 tmpContext = hjpeg->Context;
1687 hjpeg->Context &= ~(JPEG_CONTEXT_OPERATION_MASK | JPEG_CONTEXT_METHOD_MASK | JPEG_CONTEXT_ENDING_DMA);
1689 if((tmpContext & JPEG_CONTEXT_METHOD_MASK) == JPEG_CONTEXT_DMA)
1703 while(__HAL_JPEG_GET_FLAG(hjpeg, JPEG_FLAG_COF) !=
RESET)
1706 if((
HAL_GetTick() - tickstart ) > JPEG_TIMEOUT_VALUE)
1709 hjpeg->ErrorCode |= HAL_JPEG_ERROR_TIMEOUT;
1712 hjpeg->State = HAL_JPEG_STATE_TIMEOUT;
1722 __HAL_JPEG_DISABLE_IT(hjpeg,JPEG_INTERRUPT_MASK);
1725 JPEG_DISABLE_DMA(hjpeg,JPEG_DMA_MASK);
1732 __HAL_JPEG_CLEAR_FLAG(hjpeg,JPEG_FLAG_ALL);
1735 hjpeg->JpegInCount = 0;
1736 hjpeg->JpegOutCount = 0;
1739 hjpeg->Context &= ~(JPEG_CONTEXT_PAUSE_INPUT | JPEG_CONTEXT_PAUSE_OUTPUT);
1742 hjpeg->State = HAL_JPEG_STATE_READY;
1783 __weak
void HAL_JPEG_InfoReadyCallback(JPEG_HandleTypeDef *hjpeg,JPEG_ConfTypeDef *pInfo)
1800 __weak
void HAL_JPEG_EncodeCpltCallback(JPEG_HandleTypeDef *hjpeg)
1816 __weak
void HAL_JPEG_DecodeCpltCallback(JPEG_HandleTypeDef *hjpeg)
1832 __weak
void HAL_JPEG_ErrorCallback(JPEG_HandleTypeDef *hjpeg)
1849 __weak
void HAL_JPEG_GetDataCallback(JPEG_HandleTypeDef *hjpeg, uint32_t NbDecodedData)
1868 __weak
void HAL_JPEG_DataReadyCallback (JPEG_HandleTypeDef *hjpeg, uint8_t *pDataOut, uint32_t OutDataLength)
1905 void HAL_JPEG_IRQHandler(JPEG_HandleTypeDef *hjpeg)
1907 switch(hjpeg->State)
1909 case HAL_JPEG_STATE_BUSY_ENCODING:
1910 case HAL_JPEG_STATE_BUSY_DECODING:
1913 if((hjpeg->Context & JPEG_CONTEXT_METHOD_MASK) == JPEG_CONTEXT_IT)
1915 JPEG_Process(hjpeg);
1917 else if((hjpeg->Context & JPEG_CONTEXT_METHOD_MASK) == JPEG_CONTEXT_DMA)
1919 JPEG_DMA_ContinueProcess(hjpeg);
1955 HAL_JPEG_STATETypeDef HAL_JPEG_GetState(JPEG_HandleTypeDef *hjpeg)
1957 return hjpeg->State;
1966 uint32_t HAL_JPEG_GetError(JPEG_HandleTypeDef *hjpeg)
1968 return hjpeg->ErrorCode;
1992 static HAL_StatusTypeDef JPEG_Bits_To_SizeCodes(uint8_t *Bits, uint8_t *Huffsize, uint32_t *Huffcode, uint32_t *LastK)
1994 uint32_t i, p, l, code, si;
1998 for (l = 0; l < 16; l++)
2000 i = (uint32_t)Bits[l];
2007 Huffsize[p++] = (uint8_t) l+1;
2018 while (Huffsize[p] != 0)
2020 while (((uint32_t) Huffsize[p]) == si)
2022 Huffcode[p++] = code;
2026 if (((uint32_t) code) >= (((uint32_t) 1) << si))
2044 static HAL_StatusTypeDef JPEG_ACHuff_BitsVals_To_SizeCodes(JPEG_ACHuffTableTypeDef *AC_BitsValsTable, JPEG_AC_HuffCodeTableTypeDef *AC_SizeCodesTable)
2047 uint8_t huffsize[257];
2048 uint32_t huffcode[257];
2050 uint32_t l,lsb, msb;
2053 error = JPEG_Bits_To_SizeCodes(AC_BitsValsTable->Bits, huffsize, huffcode, &lastK);
2064 l = AC_BitsValsTable->HuffVal[k];
2075 msb = (l & 0xF0) >> 4;
2077 l = (msb * 10) + lsb - 1;
2079 if(l >= JPEG_AC_HUFF_TABLE_SIZE)
2085 AC_SizeCodesTable->HuffmanCode[l] = huffcode[k];
2086 AC_SizeCodesTable->CodeLength[l] = huffsize[k] - 1;
2102 static HAL_StatusTypeDef JPEG_DCHuff_BitsVals_To_SizeCodes(JPEG_DCHuffTableTypeDef *DC_BitsValsTable, JPEG_DC_HuffCodeTableTypeDef *DC_SizeCodesTable)
2109 uint8_t huffsize[257];
2110 uint32_t huffcode[257];
2111 error = JPEG_Bits_To_SizeCodes(DC_BitsValsTable->Bits, huffsize, huffcode, &lastK);
2121 l = DC_BitsValsTable->HuffVal[k];
2122 if(l >= JPEG_DC_HUFF_TABLE_SIZE)
2128 DC_SizeCodesTable->HuffmanCode[l] = huffcode[k];
2129 DC_SizeCodesTable->CodeLength[l] = huffsize[k] - 1;
2146 static HAL_StatusTypeDef JPEG_Set_HuffDC_Mem(JPEG_HandleTypeDef *hjpeg, JPEG_DCHuffTableTypeDef *HuffTableDC, uint32_t *DCTableAddress)
2149 JPEG_DC_HuffCodeTableTypeDef dcSizeCodesTable;
2150 uint32_t i, lsb, msb;
2151 __IO uint32_t *address, *addressDef;
2153 if(DCTableAddress == (uint32_t *)(hjpeg->Instance->HUFFENC_DC0))
2155 address = (hjpeg->Instance->HUFFENC_DC0 + (JPEG_DC_HUFF_TABLE_SIZE/2));
2157 else if (DCTableAddress == (uint32_t *)(hjpeg->Instance->HUFFENC_DC1))
2159 address = (hjpeg->Instance->HUFFENC_DC1 + (JPEG_DC_HUFF_TABLE_SIZE/2));
2166 if(HuffTableDC !=
NULL)
2168 error = JPEG_DCHuff_BitsVals_To_SizeCodes(HuffTableDC, &dcSizeCodesTable);
2173 addressDef = address;
2174 *addressDef = 0x0FFF0FFF;
2176 *addressDef = 0x0FFF0FFF;
2178 i = JPEG_DC_HUFF_TABLE_SIZE;
2183 msb = ((uint32_t)(((uint32_t)dcSizeCodesTable.CodeLength[i] & 0xF) << 8 )) | ((uint32_t)dcSizeCodesTable.HuffmanCode[i] & 0xFF);
2185 lsb = ((uint32_t)(((uint32_t)dcSizeCodesTable.CodeLength[i] & 0xF) << 8 )) | ((uint32_t)dcSizeCodesTable.HuffmanCode[i] & 0xFF);
2187 *address = lsb | (msb << 16);
2203 static HAL_StatusTypeDef JPEG_Set_HuffAC_Mem(JPEG_HandleTypeDef *hjpeg, JPEG_ACHuffTableTypeDef *HuffTableAC, uint32_t *ACTableAddress)
2206 JPEG_AC_HuffCodeTableTypeDef acSizeCodesTable;
2207 uint32_t i, lsb, msb;
2208 __IO uint32_t *address, *addressDef;
2210 if(ACTableAddress == (uint32_t *)(hjpeg->Instance->HUFFENC_AC0))
2212 address = (hjpeg->Instance->HUFFENC_AC0 + (JPEG_AC_HUFF_TABLE_SIZE/2));
2214 else if (ACTableAddress == (uint32_t *)(hjpeg->Instance->HUFFENC_AC1))
2216 address = (hjpeg->Instance->HUFFENC_AC1 + (JPEG_AC_HUFF_TABLE_SIZE/2));
2223 if(HuffTableAC !=
NULL)
2225 error = JPEG_ACHuff_BitsVals_To_SizeCodes(HuffTableAC, &acSizeCodesTable);
2233 addressDef = address;
2236 *addressDef = 0x0FFF0FFF;
2239 *addressDef = 0x0FD10FD0;
2241 *addressDef = 0x0FD30FD2;
2243 *addressDef = 0x0FD50FD4;
2245 *addressDef = 0x0FD70FD6;
2249 i = JPEG_AC_HUFF_TABLE_SIZE;
2254 msb = ((uint32_t)(((uint32_t)acSizeCodesTable.CodeLength[i] & 0xF) << 8 )) | ((uint32_t)acSizeCodesTable.HuffmanCode[i] & 0xFF);
2256 lsb = ((uint32_t)(((uint32_t)acSizeCodesTable.CodeLength[i] & 0xF) << 8 )) | ((uint32_t)acSizeCodesTable.HuffmanCode[i] & 0xFF);
2258 *address = lsb | (msb << 16);
2277 static HAL_StatusTypeDef JPEG_Set_HuffEnc_Mem(JPEG_HandleTypeDef *hjpeg, JPEG_ACHuffTableTypeDef *HuffTableAC0, JPEG_DCHuffTableTypeDef *HuffTableDC0 , JPEG_ACHuffTableTypeDef *HuffTableAC1, JPEG_DCHuffTableTypeDef *HuffTableDC1)
2281 JPEG_Set_Huff_DHTMem(hjpeg, HuffTableAC0, HuffTableDC0, HuffTableAC1, HuffTableDC1);
2283 if(HuffTableAC0 !=
NULL)
2285 error = JPEG_Set_HuffAC_Mem(hjpeg, HuffTableAC0, (uint32_t *)(hjpeg->Instance->HUFFENC_AC0));
2292 if(HuffTableAC1 !=
NULL)
2294 error = JPEG_Set_HuffAC_Mem(hjpeg, HuffTableAC1, (uint32_t *)(hjpeg->Instance->HUFFENC_AC1));
2301 if(HuffTableDC0 !=
NULL)
2303 error = JPEG_Set_HuffDC_Mem(hjpeg, HuffTableDC0, (uint32_t *)hjpeg->Instance->HUFFENC_DC0);
2310 if(HuffTableDC1 !=
NULL)
2312 error = JPEG_Set_HuffDC_Mem(hjpeg, HuffTableDC1, (uint32_t *)hjpeg->Instance->HUFFENC_DC1);
2333 static void JPEG_Set_Huff_DHTMem(JPEG_HandleTypeDef *hjpeg, JPEG_ACHuffTableTypeDef *HuffTableAC0, JPEG_DCHuffTableTypeDef *HuffTableDC0 , JPEG_ACHuffTableTypeDef *HuffTableAC1, JPEG_DCHuffTableTypeDef *HuffTableDC1)
2335 uint32_t value, index;
2336 __IO uint32_t *address;
2337 if(HuffTableDC0 !=
NULL)
2341 address = (hjpeg->Instance->DHTMEM + 3);
2346 *address = (((uint32_t)HuffTableDC0->Bits[index-1] & 0xFF) << 24)|
2347 (((uint32_t)HuffTableDC0->Bits[index-2] & 0xFF) << 16)|
2348 (((uint32_t)HuffTableDC0->Bits[index-3] & 0xFF) << 8) |
2349 ((uint32_t)HuffTableDC0->Bits[index-4] & 0xFF);
2356 address = (hjpeg->Instance->DHTMEM + 6);
2360 *address = (((uint32_t)HuffTableDC0->HuffVal[index-1] & 0xFF) << 24)|
2361 (((uint32_t)HuffTableDC0->HuffVal[index-2] & 0xFF) << 16)|
2362 (((uint32_t)HuffTableDC0->HuffVal[index-3] & 0xFF) << 8) |
2363 ((uint32_t)HuffTableDC0->HuffVal[index-4] & 0xFF);
2369 if(HuffTableAC0 !=
NULL)
2373 address = (hjpeg->Instance->DHTMEM + 10);
2378 *address = (((uint32_t)HuffTableAC0->Bits[index-1] & 0xFF) << 24)|
2379 (((uint32_t)HuffTableAC0->Bits[index-2] & 0xFF) << 16)|
2380 (((uint32_t)HuffTableAC0->Bits[index-3] & 0xFF) << 8) |
2381 ((uint32_t)HuffTableAC0->Bits[index-4] & 0xFF);
2389 address = (hjpeg->Instance->DHTMEM + 51);
2390 value = *address & 0xFFFF0000U;
2391 value = value | (((uint32_t)HuffTableAC0->HuffVal[161] & 0xFF) << 8) | ((uint32_t)HuffTableAC0->HuffVal[160] & 0xFF);
2399 *address = (((uint32_t)HuffTableAC0->HuffVal[index-1] & 0xFF) << 24)|
2400 (((uint32_t)HuffTableAC0->HuffVal[index-2] & 0xFF) << 16)|
2401 (((uint32_t)HuffTableAC0->HuffVal[index-3] & 0xFF) << 8) |
2402 ((uint32_t)HuffTableAC0->HuffVal[index-4] & 0xFF);
2408 if(HuffTableDC1 !=
NULL)
2413 address = (hjpeg->Instance->DHTMEM + 51);
2414 value = *address & 0x0000FFFFU;
2415 value = value | (((uint32_t)HuffTableDC1->Bits[1] & 0xFF) << 24) | (((uint32_t)HuffTableDC1->Bits[0] & 0xFF) << 16);
2419 address = (hjpeg->Instance->DHTMEM + 55);
2420 value = *address & 0xFFFF0000U;
2421 value = value | (((uint32_t)HuffTableDC1->Bits[15] & 0xFF) << 8) | ((uint32_t)HuffTableDC1->Bits[14] & 0xFF);
2430 *address = (((uint32_t)HuffTableDC1->Bits[index+1] & 0xFF) << 24)|
2431 (((uint32_t)HuffTableDC1->Bits[index] & 0xFF) << 16)|
2432 (((uint32_t)HuffTableDC1->Bits[index-1] & 0xFF) << 8) |
2433 ((uint32_t)HuffTableDC1->Bits[index-2] & 0xFF);
2441 address = (hjpeg->Instance->DHTMEM + 55);
2442 value = *address & 0x0000FFFF;
2443 value = value | (((uint32_t)HuffTableDC1->HuffVal[1] & 0xFF) << 24) | (((uint32_t)HuffTableDC1->HuffVal[0] & 0xFF) << 16);
2447 address = (hjpeg->Instance->DHTMEM + 58);
2448 value = *address & 0xFFFF0000U;
2449 value = value | (((uint32_t)HuffTableDC1->HuffVal[11] & 0xFF) << 8) | ((uint32_t)HuffTableDC1->HuffVal[10] & 0xFF);
2457 *address = (((uint32_t)HuffTableDC1->HuffVal[index+1] & 0xFF) << 24)|
2458 (((uint32_t)HuffTableDC1->HuffVal[index] & 0xFF) << 16)|
2459 (((uint32_t)HuffTableDC1->HuffVal[index-1] & 0xFF) << 8) |
2460 ((uint32_t)HuffTableDC1->HuffVal[index-2] & 0xFF);
2466 if(HuffTableAC1 !=
NULL)
2471 address = (hjpeg->Instance->DHTMEM + 58);
2472 value = *address & 0x0000FFFFU;
2473 value = value | (((uint32_t)HuffTableAC1->Bits[1] & 0xFF) << 24) | (((uint32_t)HuffTableAC1->Bits[0] & 0xFF) << 16);
2477 address = (hjpeg->Instance->DHTMEM + 62);
2478 value = *address & 0xFFFF0000U;
2479 value = value | (((uint32_t)HuffTableAC1->Bits[15] & 0xFF) << 8) | ((uint32_t)HuffTableAC1->Bits[14] & 0xFF);
2488 *address = (((uint32_t)HuffTableAC1->Bits[index+1] & 0xFF) << 24)|
2489 (((uint32_t)HuffTableAC1->Bits[index] & 0xFF) << 16)|
2490 (((uint32_t)HuffTableAC1->Bits[index-1] & 0xFF) << 8) |
2491 ((uint32_t)HuffTableAC1->Bits[index-2] & 0xFF);
2499 address = (hjpeg->Instance->DHTMEM + 62);
2500 value = *address & 0x0000FFFF;
2501 value = value | (((uint32_t)HuffTableAC1->HuffVal[1] & 0xFF) << 24) | (((uint32_t)HuffTableAC1->HuffVal[0] & 0xFF) << 16);
2505 address = (hjpeg->Instance->DHTMEM + 102);
2509 *address = (((uint32_t)HuffTableAC1->HuffVal[index+1] & 0xFF) << 24)|
2510 (((uint32_t)HuffTableAC1->HuffVal[index] & 0xFF) << 16)|
2511 (((uint32_t)HuffTableAC1->HuffVal[index-1] & 0xFF) << 8) |
2512 ((uint32_t)HuffTableAC1->HuffVal[index-2] & 0xFF);
2528 static HAL_StatusTypeDef JPEG_Set_Quantization_Mem(JPEG_HandleTypeDef *hjpeg, uint8_t *QTable, uint32_t *QTableAddress)
2530 uint32_t i, j, *tableAddress, quantRow, quantVal, ScaleFactor;
2532 if((QTableAddress == ((uint32_t *)(hjpeg->Instance->QMEM0))) ||
2533 (QTableAddress == ((uint32_t *)(hjpeg->Instance->QMEM1))) ||
2534 (QTableAddress == ((uint32_t *)(hjpeg->Instance->QMEM2))) ||
2535 (QTableAddress == ((uint32_t *)(hjpeg->Instance->QMEM3))))
2537 tableAddress = QTableAddress;
2544 if ((hjpeg->Conf.ImageQuality >= 50) && (hjpeg->Conf.ImageQuality <= 100))
2546 ScaleFactor = 200 - (hjpeg->Conf.ImageQuality * 2);
2548 else if (hjpeg->Conf.ImageQuality > 0)
2550 ScaleFactor = ((uint32_t) 5000) / ((uint32_t) hjpeg->Conf.ImageQuality);
2559 while( i < JPEG_QUANT_TABLE_SIZE)
2565 quantVal = ((((uint32_t) QTable[JPEG_ZIGZAG_ORDER[i+j]]) * ScaleFactor) + 50) / 100;
2571 else if (quantVal > 255)
2576 quantRow |= ((quantVal & 0xFF) << (8 * j));
2580 *tableAddress = quantRow;
2594 static void JPEG_SetColorYCBCR(JPEG_HandleTypeDef *hjpeg)
2596 uint32_t ySamplingH;
2597 uint32_t ySamplingV;
2605 if(hjpeg->Conf.ChromaSubsampling == JPEG_420_SUBSAMPLING)
2612 else if(hjpeg->Conf.ChromaSubsampling == JPEG_422_SUBSAMPLING)
2631 hjpeg->Instance->CONFR4 = 0;
2633 hjpeg->Instance->CONFR4 |= (ySamplingH | ySamplingV | (yblockNb &
JPEG_CONFR4_NB) );
2636 hjpeg->Instance->CONFR5 = 0;
2641 hjpeg->Instance->CONFR6 = 0;
2655 static void JPEG_SetColorGrayScale(JPEG_HandleTypeDef *hjpeg)
2664 hjpeg->Instance->CONFR4 = 0;
2675 static void JPEG_SetColorCMYK(JPEG_HandleTypeDef *hjpeg)
2677 uint32_t ySamplingH;
2678 uint32_t ySamplingV;
2685 if(hjpeg->Conf.ChromaSubsampling == JPEG_420_SUBSAMPLING)
2692 else if(hjpeg->Conf.ChromaSubsampling == JPEG_422_SUBSAMPLING)
2708 hjpeg->Instance->CONFR4 = 0;
2710 hjpeg->Instance->CONFR4 |= (ySamplingH | ySamplingV | (yblockNb &
JPEG_CONFR4_NB) );
2713 hjpeg->Instance->CONFR5 = 0;
2718 hjpeg->Instance->CONFR6 = 0;
2723 hjpeg->Instance->CONFR7 = 0;
2734 static void JPEG_Init_Process(JPEG_HandleTypeDef *hjpeg)
2737 hjpeg->Context &= (~(JPEG_CONTEXT_PAUSE_INPUT | JPEG_CONTEXT_PAUSE_OUTPUT));
2739 if((hjpeg->Context & JPEG_CONTEXT_OPERATION_MASK) == JPEG_CONTEXT_DECODE)
2744 else if((hjpeg->Context & JPEG_CONTEXT_OPERATION_MASK) == JPEG_CONTEXT_ENCODE)
2754 __HAL_JPEG_DISABLE_IT(hjpeg,JPEG_INTERRUPT_MASK);
2757 JPEG_DISABLE_DMA(hjpeg,JPEG_DMA_MASK);
2764 __HAL_JPEG_CLEAR_FLAG(hjpeg,JPEG_FLAG_ALL);
2769 if((hjpeg->Context & JPEG_CONTEXT_METHOD_MASK) == JPEG_CONTEXT_IT)
2772 __HAL_JPEG_ENABLE_IT(hjpeg, JPEG_IT_IFT | JPEG_IT_IFNF | JPEG_IT_OFT | JPEG_IT_OFNE | JPEG_IT_EOC |JPEG_IT_HPD);
2774 else if((hjpeg->Context & JPEG_CONTEXT_METHOD_MASK) == JPEG_CONTEXT_DMA)
2777 __HAL_JPEG_ENABLE_IT(hjpeg, JPEG_IT_EOC |JPEG_IT_HPD);
2788 static uint32_t JPEG_Process(JPEG_HandleTypeDef *hjpeg)
2790 uint32_t tmpContext;
2793 if(((hjpeg->Context & JPEG_CONTEXT_OPERATION_MASK) == JPEG_CONTEXT_DECODE) && (__HAL_JPEG_GET_FLAG(hjpeg, JPEG_FLAG_HPDF) !=
RESET))
2796 HAL_JPEG_GetInfo(hjpeg, &hjpeg->Conf);
2798 hjpeg->Conf.ImageQuality = 0;
2803 HAL_JPEG_InfoReadyCallback(hjpeg, &hjpeg->Conf);
2805 __HAL_JPEG_DISABLE_IT(hjpeg,JPEG_IT_HPD);
2808 __HAL_JPEG_CLEAR_FLAG(hjpeg,JPEG_FLAG_HPDF);
2812 if((hjpeg->Context & JPEG_CONTEXT_PAUSE_INPUT) == 0)
2814 if(__HAL_JPEG_GET_FLAG(hjpeg, JPEG_FLAG_IFTF) !=
RESET)
2818 JPEG_ReadInputData(hjpeg,4);
2820 else if(__HAL_JPEG_GET_FLAG(hjpeg, JPEG_FLAG_IFNFF) !=
RESET)
2824 JPEG_ReadInputData(hjpeg,1);
2830 if((hjpeg->Context & JPEG_CONTEXT_PAUSE_OUTPUT) == 0)
2832 if(__HAL_JPEG_GET_FLAG(hjpeg, JPEG_FLAG_OFTF) !=
RESET)
2836 JPEG_StoreOutputData(hjpeg, 4);
2838 else if(__HAL_JPEG_GET_FLAG(hjpeg, JPEG_FLAG_OFNEF) !=
RESET)
2842 JPEG_StoreOutputData(hjpeg, 1);
2847 if(__HAL_JPEG_GET_FLAG(hjpeg, JPEG_FLAG_EOCF | JPEG_FLAG_OFTF | JPEG_FLAG_OFNEF) == JPEG_FLAG_EOCF)
2852 if((hjpeg->Context & JPEG_CONTEXT_METHOD_MASK) == JPEG_CONTEXT_IT)
2855 __HAL_JPEG_DISABLE_IT(hjpeg,JPEG_INTERRUPT_MASK);
2859 __HAL_JPEG_CLEAR_FLAG(hjpeg,JPEG_FLAG_ALL);
2862 if(hjpeg->JpegOutCount > 0)
2865 HAL_JPEG_DataReadyCallback (hjpeg, hjpeg->pJpegOutBuffPtr, hjpeg->JpegOutCount);
2866 hjpeg->JpegOutCount = 0;
2870 tmpContext = hjpeg->Context;
2872 hjpeg->Context &= (JPEG_CONTEXT_CONF_ENCODING | JPEG_CONTEXT_CUSTOM_TABLES);
2878 hjpeg->State = HAL_JPEG_STATE_READY;
2881 if((tmpContext & JPEG_CONTEXT_OPERATION_MASK) == JPEG_CONTEXT_DECODE)
2883 HAL_JPEG_DecodeCpltCallback(hjpeg);
2885 else if((tmpContext & JPEG_CONTEXT_OPERATION_MASK) == JPEG_CONTEXT_ENCODE)
2887 HAL_JPEG_EncodeCpltCallback(hjpeg);
2890 return JPEG_PROCESS_DONE;
2894 return JPEG_PROCESS_ONGOING;
2906 static void JPEG_StoreOutputData(JPEG_HandleTypeDef *hjpeg, uint32_t nbOutputWords)
2908 uint32_t index, nBwords, nbBytes , dataword, *pOutData;
2910 pOutData = (uint32_t *)(((uint32_t *)hjpeg->pJpegOutBuffPtr) + (hjpeg->JpegOutCount/4));
2912 if(hjpeg->OutDataLength >= (hjpeg->JpegOutCount + (nbOutputWords*4)))
2914 for(index = 0; index < nbOutputWords; index++)
2917 *pOutData = hjpeg->Instance->DOR;
2919 hjpeg->JpegOutCount += 4;
2921 if(hjpeg->OutDataLength == hjpeg->JpegOutCount)
2924 HAL_JPEG_DataReadyCallback (hjpeg, hjpeg->pJpegOutBuffPtr, hjpeg->JpegOutCount);
2925 hjpeg->JpegOutCount = 0;
2928 else if(hjpeg->OutDataLength > hjpeg->JpegOutCount)
2930 nBwords = (hjpeg->OutDataLength - hjpeg->JpegOutCount)/4;
2931 for(index = 0; index < nBwords; index++)
2934 *pOutData = hjpeg->Instance->DOR;
2936 hjpeg->JpegOutCount += 4;
2938 if(hjpeg->OutDataLength == hjpeg->JpegOutCount)
2941 HAL_JPEG_DataReadyCallback (hjpeg, hjpeg->pJpegOutBuffPtr, hjpeg->JpegOutCount);
2942 hjpeg->JpegOutCount = 0;
2946 nbBytes = hjpeg->OutDataLength - hjpeg->JpegOutCount;
2947 dataword = hjpeg->Instance->DOR;
2948 for(index = 0; index < nbBytes; index++)
2950 hjpeg->pJpegOutBuffPtr[hjpeg->JpegOutCount] = (dataword >> (8*index)) & 0xFF;
2951 hjpeg->JpegOutCount++;
2954 HAL_JPEG_DataReadyCallback (hjpeg, hjpeg->pJpegOutBuffPtr, hjpeg->JpegOutCount);
2955 hjpeg->JpegOutCount = 0;
2957 nbBytes = 4 - nbBytes;
2958 for(index = nbBytes; index < 4; index++)
2960 hjpeg->pJpegOutBuffPtr[hjpeg->JpegOutCount] = (dataword >> (8*index)) & 0xFF;
2961 hjpeg->JpegOutCount++;
2976 static void JPEG_ReadInputData(JPEG_HandleTypeDef *hjpeg, uint32_t nbRequestWords)
2978 uint32_t nbBytes = 0, nBwords, index, Dataword;
2980 if((hjpeg->InDataLength == 0) || (nbRequestWords == 0))
2983 HAL_JPEG_Pause(hjpeg, JPEG_PAUSE_RESUME_INPUT);
2985 else if(hjpeg->InDataLength > hjpeg->JpegInCount)
2987 nbBytes = hjpeg->InDataLength - hjpeg->JpegInCount;
2989 else if(hjpeg->InDataLength == hjpeg->JpegInCount)
2992 HAL_JPEG_GetDataCallback(hjpeg, hjpeg->JpegInCount);
2993 if(hjpeg->InDataLength > 4)
2995 hjpeg->InDataLength = hjpeg->InDataLength - (hjpeg->InDataLength % 4);
2997 hjpeg->JpegInCount = 0;
2998 nbBytes = hjpeg->InDataLength;
3000 if((nbBytes > 0) && ((hjpeg->Context & JPEG_CONTEXT_PAUSE_INPUT) == 0))
3002 nBwords = nbBytes / 4;
3003 if(nBwords >= nbRequestWords)
3005 for(index = 0; index < nbRequestWords; index++)
3007 hjpeg->Instance->DIR = *((uint32_t *)(((uint32_t *)hjpeg->pJpegInBuffPtr) + (hjpeg->JpegInCount/4)));
3009 hjpeg->JpegInCount += 4;
3016 for(index = 0; index < nBwords; index++)
3018 hjpeg->Instance->DIR = *((uint32_t *)(((uint32_t *)hjpeg->pJpegInBuffPtr) + (hjpeg->JpegInCount/4)));
3020 hjpeg->JpegInCount += 4;
3027 for(index=0; index< nbBytes; index++)
3029 Dataword |= (uint32_t)hjpeg->pJpegInBuffPtr[hjpeg->JpegInCount] << (8 * index);
3030 hjpeg->JpegInCount++;
3032 hjpeg->Instance->DIR = Dataword;
3046 if((hjpeg->InDataLength < 4) || (hjpeg->OutDataLength < 4))
3051 hjpeg->Context &= ~JPEG_CONTEXT_ENDING_DMA;
3054 JPEG_DISABLE_DMA(hjpeg,JPEG_DMA_ODMA | JPEG_DMA_IDMA);
3057 hjpeg->hdmain->XferCpltCallback = JPEG_DMAInCpltCallback;
3059 hjpeg->hdmain->XferErrorCallback = JPEG_DMAErrorCallback;
3062 hjpeg->hdmaout->XferCpltCallback = JPEG_DMAOutCpltCallback;
3064 hjpeg->hdmaout->XferErrorCallback = JPEG_DMAErrorCallback;
3066 hjpeg->hdmaout->XferAbortCallback = JPEG_DMAOutAbortCallback;
3069 hjpeg->InDataLength = hjpeg->InDataLength - (hjpeg->InDataLength % 4);
3072 hjpeg->OutDataLength = hjpeg->OutDataLength - (hjpeg->OutDataLength % 4);
3075 HAL_DMA_Start_IT(hjpeg->hdmain, (uint32_t)hjpeg->pJpegInBuffPtr, (uint32_t)&hjpeg->Instance->DIR, hjpeg->InDataLength >> 2);
3078 HAL_DMA_Start_IT(hjpeg->hdmaout, (uint32_t)&hjpeg->Instance->DOR, (uint32_t)hjpeg->pJpegOutBuffPtr, hjpeg->OutDataLength >> 2);
3081 JPEG_ENABLE_DMA(hjpeg,JPEG_DMA_IDMA | JPEG_DMA_ODMA);
3092 static uint32_t JPEG_DMA_ContinueProcess(JPEG_HandleTypeDef *hjpeg)
3095 if(((hjpeg->Context & JPEG_CONTEXT_OPERATION_MASK) == JPEG_CONTEXT_DECODE) && (__HAL_JPEG_GET_FLAG(hjpeg, JPEG_FLAG_HPDF) !=
RESET))
3098 HAL_JPEG_GetInfo(hjpeg, &hjpeg->Conf);
3101 hjpeg->Conf.ImageQuality = 0;
3106 HAL_JPEG_InfoReadyCallback(hjpeg, &hjpeg->Conf);
3108 __HAL_JPEG_DISABLE_IT(hjpeg,JPEG_IT_HPD);
3111 __HAL_JPEG_CLEAR_FLAG(hjpeg,JPEG_FLAG_HPDF);
3115 if(__HAL_JPEG_GET_FLAG(hjpeg, JPEG_FLAG_EOCF) !=
RESET)
3118 JPEG_DISABLE_DMA(hjpeg,JPEG_DMA_ODMA | JPEG_DMA_IDMA);
3120 hjpeg->Context |= JPEG_CONTEXT_ENDING_DMA;
3125 __HAL_JPEG_DISABLE_IT(hjpeg,JPEG_INTERRUPT_MASK);
3128 __HAL_JPEG_CLEAR_FLAG(hjpeg,JPEG_FLAG_ALL);
3143 return JPEG_DMA_EndProcess(hjpeg);
3147 return JPEG_PROCESS_ONGOING;
3156 static uint32_t JPEG_DMA_EndProcess(JPEG_HandleTypeDef *hjpeg)
3158 uint32_t tmpContext, count = JPEG_FIFO_SIZE, *pDataOut;
3160 hjpeg->JpegOutCount = hjpeg->OutDataLength - ((hjpeg->hdmaout->Instance->NDTR &
DMA_SxNDT) << 2);
3163 if(hjpeg->JpegOutCount == hjpeg->OutDataLength)
3165 HAL_JPEG_DataReadyCallback (hjpeg, hjpeg->pJpegOutBuffPtr, hjpeg->JpegOutCount);
3166 hjpeg->JpegOutCount = 0;
3169 pDataOut = (uint32_t *)(hjpeg->pJpegOutBuffPtr + hjpeg->JpegOutCount);
3171 while((__HAL_JPEG_GET_FLAG(hjpeg, JPEG_FLAG_OFNEF) != 0) && (count > 0))
3175 *pDataOut = hjpeg->Instance->DOR;
3177 hjpeg->JpegOutCount += 4;
3179 if(hjpeg->JpegOutCount == hjpeg->OutDataLength)
3182 HAL_JPEG_DataReadyCallback (hjpeg, hjpeg->pJpegOutBuffPtr, hjpeg->JpegOutCount);
3183 hjpeg->JpegOutCount = 0;
3190 if(hjpeg->JpegOutCount > 0)
3193 HAL_JPEG_DataReadyCallback (hjpeg, hjpeg->pJpegOutBuffPtr, hjpeg->JpegOutCount);
3194 hjpeg->JpegOutCount = 0;
3197 tmpContext = hjpeg->Context;
3199 hjpeg->Context &= (JPEG_CONTEXT_CONF_ENCODING | JPEG_CONTEXT_CUSTOM_TABLES);
3205 hjpeg->State = HAL_JPEG_STATE_READY;
3208 if((tmpContext & JPEG_CONTEXT_OPERATION_MASK) == JPEG_CONTEXT_DECODE)
3210 HAL_JPEG_DecodeCpltCallback(hjpeg);
3212 else if((tmpContext & JPEG_CONTEXT_OPERATION_MASK) == JPEG_CONTEXT_ENCODE)
3214 HAL_JPEG_EncodeCpltCallback(hjpeg);
3218 return JPEG_PROCESS_DONE;
3228 JPEG_HandleTypeDef* hjpeg = (JPEG_HandleTypeDef*)((
DMA_HandleTypeDef*)hdma)->Parent;
3231 __HAL_JPEG_DISABLE_IT(hjpeg,JPEG_INTERRUPT_MASK);
3233 if(((hjpeg->Context & JPEG_CONTEXT_METHOD_MASK) == JPEG_CONTEXT_DMA) && ((hjpeg->Context & JPEG_CONTEXT_ENDING_DMA) == 0))
3235 JPEG_DISABLE_DMA(hjpeg,JPEG_DMA_IDMA);
3240 HAL_JPEG_GetDataCallback(hjpeg, hjpeg->JpegInCount);
3242 if(hjpeg->InDataLength >= 4)
3246 hjpeg->InDataLength = hjpeg->InDataLength - (hjpeg->InDataLength % 4);
3248 else if(hjpeg->InDataLength > 0)
3251 hjpeg->InDataLength = 4;
3254 if(((hjpeg->Context & JPEG_CONTEXT_PAUSE_INPUT) == 0) && (hjpeg->InDataLength > 0))
3257 HAL_DMA_Start_IT(hjpeg->hdmain, (uint32_t)hjpeg->pJpegInBuffPtr, (uint32_t)&hjpeg->Instance->DIR, hjpeg->InDataLength >> 2);
3258 JPEG_ENABLE_DMA(hjpeg,JPEG_DMA_IDMA);
3262 __HAL_JPEG_ENABLE_IT(hjpeg,JPEG_IT_EOC |JPEG_IT_HPD);
3273 JPEG_HandleTypeDef* hjpeg = (JPEG_HandleTypeDef*)((
DMA_HandleTypeDef*)hdma)->Parent;
3276 __HAL_JPEG_DISABLE_IT(hjpeg,JPEG_INTERRUPT_MASK);
3278 if(((hjpeg->Context & JPEG_CONTEXT_METHOD_MASK) == JPEG_CONTEXT_DMA) && ((hjpeg->Context & JPEG_CONTEXT_ENDING_DMA) == 0))
3280 if(__HAL_JPEG_GET_FLAG(hjpeg, JPEG_FLAG_EOCF) == 0)
3282 JPEG_DISABLE_DMA(hjpeg,JPEG_DMA_ODMA);
3286 HAL_JPEG_DataReadyCallback (hjpeg, hjpeg->pJpegOutBuffPtr, hjpeg->JpegOutCount);
3288 if((hjpeg->Context & JPEG_CONTEXT_PAUSE_OUTPUT) == 0)
3291 HAL_DMA_Start_IT(hjpeg->hdmaout, (uint32_t)&hjpeg->Instance->DOR, (uint32_t)hjpeg->pJpegOutBuffPtr, hjpeg->OutDataLength >> 2);
3292 JPEG_ENABLE_DMA(hjpeg,JPEG_DMA_ODMA);
3297 __HAL_JPEG_ENABLE_IT(hjpeg,JPEG_IT_EOC |JPEG_IT_HPD);
3308 JPEG_HandleTypeDef* hjpeg = (JPEG_HandleTypeDef*)((
DMA_HandleTypeDef*)hdma)->Parent;
3317 __HAL_JPEG_DISABLE_IT(hjpeg,JPEG_INTERRUPT_MASK);
3320 JPEG_DISABLE_DMA(hjpeg,JPEG_DMA_MASK);
3322 hjpeg->State= HAL_JPEG_STATE_READY;
3323 hjpeg->ErrorCode |= HAL_JPEG_ERROR_DMA;
3324 HAL_JPEG_ErrorCallback(hjpeg);
3335 JPEG_HandleTypeDef* hjpeg = (JPEG_HandleTypeDef*)((
DMA_HandleTypeDef*)hdma)->Parent;
3337 if((hjpeg->Context & JPEG_CONTEXT_ENDING_DMA) != 0)
3339 JPEG_DMA_EndProcess(hjpeg);
3349 static uint32_t JPEG_GetQuality(JPEG_HandleTypeDef *hjpeg)
3351 uint32_t quality = 0;
3352 uint32_t quantRow, quantVal,scale, i, j;
3353 uint32_t *tableAddress = (uint32_t *)hjpeg->Instance->QMEM0;
3356 while( i < JPEG_QUANT_TABLE_SIZE)
3358 quantRow = *tableAddress;
3361 quantVal = (quantRow >> (8 * j)) & 0xFF;
3370 scale = (quantVal*100)/((uint32_t) JPEG_LUM_QuantTable[JPEG_ZIGZAG_ORDER[i+j]]);
3374 quality += (200 - scale)/2;
3378 quality += 5000/scale;
3387 return (quality/((uint32_t)64));
#define JPEG_CONFR6_VSF_0
#define JPEG_CONFR4_HSF_0
HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma)
#define assert_param(expr)
Include module's header file.
#define JPEG_CONFR1_COLORSPACE
#define JPEG_CONFR7_VSF_0
#define JPEG_CONFR5_HSF_0
#define __HAL_UNLOCK(__HANDLE__)
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
#define JPEG_CONFR1_COLORSPACE_1
#define JPEG_CONFR4_HSF_1
#define JPEG_CONFR4_VSF_1
uint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma)
#define JPEG_CONFR4_VSF_0
#define JPEG_CONFR1_COLORSPACE_0
#define __HAL_LOCK(__HANDLE__)
#define JPEG_CONFR6_HSF_0
HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma)
This file contains all the functions prototypes for the HAL module driver.
DMA_Stream_TypeDef * Instance
#define JPEG_CONFR7_HSF_0
#define JPEG_CONFR5_VSF_0
DMA handle Structure definition.
HAL_StatusTypeDef
HAL Status structures definition.
uint32_t HAL_GetTick(void)
Provides a tick value in millisecond.
#define JPEG_CONFR0_START