STM32F769IDiscovery  1.00
uDANTE Audio Networking with STM32F7 DISCO board
stm32f7xx_hal_jpeg.c File Reference

JPEG HAL module driver. This file provides firmware functions to manage the following functionalities of the JPEG encoder/decoder peripheral: More...

#include "stm32f7xx_hal.h"

Go to the source code of this file.

Detailed Description

JPEG HAL module driver. This file provides firmware functions to manage the following functionalities of the JPEG encoder/decoder peripheral:

Author
MCD Application Team
Version
V1.1.0
Date
22-April-2016
  • Initialization and de-initialization functions
  • JPEG processing functions encoding and decoding
  • JPEG decoding Getting Info and encoding configuration setting
  • JPEG enable/disable header parsing functions (for decoding)
  • JPEG Input/Output Buffer configuration.
  • JPEG callback functions
  • JPEG Abort/Pause/Resume functions
  • JPEG custom quantization tables setting functions
  • IRQ handler management
  • Peripheral State and Error functions
==============================================================================
                   ##### How to use this driver #####
==============================================================================
  [..]
   (#) Initialize the JPEG peripheral using HAL_JPEG_Init : No initialization parameters are required.
       Only the call to HAL_JPEG_Init is necessary to initialize the JPEG peripheral.

   (#) If operation is JPEG encoding use function HAL_JPEG_ConfigEncoding to set
       the encoding parameters (mandatory before calling the encoding function).
       the application can change the encoding parameter "ImageQuality" from
       1 to 100 to obtain a more or less quality (visual quality vs the original row image),
       and inversely more or less jpg file size.

   (#) Note that for decoding operation the JPEG peripheral output data are organized in
       YCbCr blocks called MCU (Minimum Coded Unit) as defioned in the JPEG specification
       ISO/IEC 10918-1 standard. 
       It is up to the application to transform these YCbCr blocks to RGB data that can be display.
       
       Respectively, for Encoding operation the JPEG peripheral input should be organized
       in YCbCr MCU blocks. It is up to the application to perform the necessary RGB to YCbCr
       MCU blocks transformation before feeding the JPEG peripheral with data.

   (#) Use functions HAL_JPEG_Encode and HAL_JPEG_Decode to start respectively
       a JPEG encoding/decoding operation in polling method (blocking).

   (#) Use functions HAL_JPEG_Encode_IT and HAL_JPEG_Decode_IT to start respectively
       a JPEG encoding/decoding operation with Interrupt method (not blocking).

   (#) Use functions HAL_JPEG_Encode_DMA and HAL_JPEG_Decode_DMA to start respectively
       a JPEG encoding/decoding operation with DMA method (not blocking).

   (#) Callback HAL_JPEG_InfoReadyCallback is asserted if the current operation 
       is a JPEG decoding to provide the application with JPEG image  parameters.
       This callback is asserted when the JPEG peripheral successfully parse the
       JPEG header.

   (#) Callback HAL_JPEG_GetDataCallback is asserted for both encoding and decoding
       operations to inform the application that the input buffer has been
       consumed by the peripheral and to ask for a new data chunk if the operation
       (encoding/decoding) has not been complete yet.

       This CallBack should be implemented in the application side. It should 
       call the function HAL_JPEG_ConfigInputBuffer if new input data are available, 
       or call HAL_JPEG_Pause with parameter XferSelection set to "JPEG_PAUSE_RESUME_INPUT" 
       to inform the JPEG HAL driver that the ongoing operation shall pause waiting for the
       application to provide a new input data chunk. 
       Once the application succeed getting new data and if the input has been paused,
       the application can call the function HAL_JPEG_ConfigInputBuffer to set the new
       input buffer and size, then resume the JPEG HAL input by calling new function HAL_JPEG_Resume.
       If the application has ended feeding the HAL JPEG with input data (no more input data), the application 
       Should call the function “HAL_JPEG_ConfigInputBuffer” (within the callback HAL_JPEG_GetDataCallback) 
       with the parameter “InDataLength” set to zero.
     
       The mechanism of HAL_JPEG_ConfigInputBuffer/HAL_JPEG_Pause/HAL_JPEG_Resume allows
       to the application to provide the input data (for encoding or decoding) by chunks.
       If the new input data chunk is not available (because data should be read from an input file
       for example) the application can pause the JPEG input (using function HAL_JPEG_Pause)
       Once the new input data chunk is available ( read from a file for example), the application
       can call the function "HAL_JPEG_ConfigInputBuffer" to provide the HAL with the new chunk
       then resume the JPEG HAL input by calling function "HAL_JPEG_Resume".
      
       The application can call  functions “HAL_JPEG_ConfigInputBuffer “ then "HAL_JPEG_Resume".
       any time (outside the HAL_JPEG_GetDataCallback)  Once the new input chunk data available.
       However, to keep data coherency, the function “HAL_JPEG_Pause” must be imperatively called
      (if necessary) within the callback “HAL_JPEG_GetDataCallback”, i.e when the HAL JPEG has ended
       Transferring the previous chunk buffer to the JPEG peripheral.
      
   (#) Callback HAL_JPEG_DataReadyCallback is asserted when the HAL JPEG driver
       has filled the given output buffer with the given size.
       
       This CallBack should be implemented in the application side. It should 
       call the function HAL_JPEG_ConfigOutputBuffer to provide the HAL JPEG driver
       with the new output buffer location and size to be used  to store next data chunk.
       if the application is not ready to provide the output chunk location then it can
       call the function "HAL_JPEG_Pause" with parameter XferSelection set to "JPEG_PAUSE_RESUME_OUTPUT"
       to inform the JPEG HAL driver that it shall pause output data. Once the application
       is ready to receive the new data chunk (output buffer location free or available) it should call
       the function "HAL_JPEG_ConfigOutputBuffer" to provide the HAL JPEG driver
       with the new output chunk buffer location and size, then call "HAL_JPEG_Resume" 
       to inform the HAL that it shall resume outputting data in the given output buffer.

       The mechanism of HAL_JPEG_ConfigOutputBuffer/HAL_JPEG_Pause/HAL_JPEG_Resume allows
       the application to receive data from the JPEG peripheral by chunks. when a chunk
       is received, the application can pause the HAL JPEG output data to be able to process
       these received data (YCbCr to RGB conversion in case of decoding or data storage in case
       of encoding).

      The application can call  functions “HAL_JPEG_ ConfigOutputBuffer“ then "HAL_JPEG_Resume".
      any time (outside the HAL_JPEG_ DataReadyCallback)  Once the output data buffer is free to use.
      However, to keep data coherency, the function “HAL_JPEG_Pause” must be imperatively called
      (if necessary) within the callback “HAL_JPEG_ DataReadyCallback”, i.e when the HAL JPEG has ended
      Transferring the previous chunk buffer from the JPEG peripheral to the application.

   (#) Callback HAL_JPEG_EncodeCpltCallback is asserted when the HAL JPEG driver has
       ended the current JPEG encoding operation, and all output data has been transmitted
       to the application.

   (#) Callback HAL_JPEG_DecodeCpltCallback is asserted when the HAL JPEG driver has
       ended the current JPEG decoding operation. and all output data has been transmitted
       to the application.

   (#) Callback HAL_JPEG_ErrorCallback is asserted when an error occurred during 
       the current operation. the application can call the function "HAL_JPEG_GetError"
       to retrieve the error codes.

   (#) By default the HAL JPEG driver uses the default quantization tables
        as provide in the JPEG specification (ISO/IEC 10918-1 standard) for encoding.
        User can change these default tables if necessary using the function "HAL_JPEG_SetUserQuantTables"
        Note that for decoding the quantization tables are automatically extracted from
        the JPEG header.

    (#) To control JPEG state you can use the following function: HAL_JPEG_GetState()      

   *** JPEG HAL driver macros list ***
   ============================================= 
   [..]
     Below the list of most used macros in JPEG HAL driver.
     
    (+) __HAL_JPEG_RESET_HANDLE_STATE : Reset JPEG handle state.
    (+) __HAL_JPEG_ENABLE             : Enable the JPEG peripheral.
    (+) __HAL_JPEG_DISABLE            : Disable the JPEG peripheral.
    (+) __HAL_JPEG_GET_FLAG           : Check the specified JPEG status flag.
    (+) __HAL_JPEG_CLEAR_FLAG         : Clear the specified JPEG status flag.
    (+) __HAL_JPEG_ENABLE_IT          : Enable the specified JPEG Interrupt.
    (+) __HAL_JPEG_DISABLE_IT         : Disable the specified JPEG Interrupt.
    (+) __HAL_JPEG_GET_IT_SOURCE      : returns the state of the specified JPEG Interrupt (Enabled or disabled).
Attention

© COPYRIGHT(c) 2016 STMicroelectronics

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  3. Neither the name of STMicroelectronics nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Definition in file stm32f7xx_hal_jpeg.c.