# MJPEG

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

**Parent Topic:** [Framework and programming model](https://docs.qualcomm.com/doc/80-58740-1/topic/framework_and_programming_model.html)

## Overview

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

MJPEG (Motion Joint Photographic Experts Group) is a video coding format that can be
      accurate to frame editing and multi-layer image processing. It handles motion video sequences
      as continuous still images. This compression method compresses each frame individually and
      completely. By compressing the original data in YCbCr format, the memory space occupied by one
      frame of image can be greatly reduced.

## Features

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

- Configurable input formats including:
    - YCbCr4:2:2 plane or packed mode
    - YCbCr4:2:0 plane mode
    - YCbCr4:0:0
- Configurable input data Y, Cb, Cr sort order
- The quantization coefficient table can be freely configured
- Support software mode and linkage mode
- Support swap mode
- Support kick mode
- Reserve jpg head space and automatically add jpg tail
- Continuously cache up to 4 sets of picture information
- Various application interruptions are conducive to flexible use and error prompts

## Function description

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

### Input configuration

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

The YCbCr format of the input data can be selected by bit &lt;REG\_YUV\_MODE&gt; of
      register MJPEG\_CONTROL\_1, including YCbCr4:2:2 plane or packed mode, YCbCr4:2:0 plane mode and
      YCbCr4:0:0 grayscale image. When the YCbCr4:2:2 packing mode is selected, the arrangement
      order of Y, Cb and Cr can be configured through the upper 8 bits of the register
      MJPEG\_HEADER\_BYTE. When other modes are selected, the order of Cb and Cr can be set by bit
      &lt;REG\_ORDER\_U\_EVEN&gt; of register MJPEG\_CONTROL\_1. The detailed configuration is shown in
      the figure below.

Figure : MJPEG YUYV interleave order configuration

![](data:image/png;base64,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)

### Quantization
coefficient table

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

The quantization coefficient table can be freely configured by the user,
      &lt;reg\_q\_0\_00&gt; to &lt;reg\_q\_0\_3F&gt; represent the quantization tables of the Y component
      of grayscale information, and &lt;reg\_q\_1\_00&gt; to &lt;reg\_q\_1\_3F&gt; represent the
      quantization tables of the chrominance information Cb and Cr. The quantization table is
      arranged in the order from the upper-left corner to the bottom, the first column is followed
      by the second column, that is, reg\_q\_0\_00 represents the quantization value of the first row
      and the first column of the Y component, and reg\_q\_0\_01 represents the quantization of the
      second row and the first column of the Y component. Value, reg\_q\_0\_07 represents the quantized
      value of the Y component in the eighth row and first column, reg\_q\_0\_08 represents the
      quantized value in the first row and second column of the Y component, and so on.

### Software mode and link
mode

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

When the bit &lt;REG\_MJPEG\_SW\_MODE&gt; of the MJPEG\_CONTROL\_2 register is set to 1,
      the software mode is enabled. In this mode, MJPEG reads the original image data of the
      specified number of frames from the memory for compression. In this mode, the image data must
      be prepared in advance.

When the bit &lt;REG\_MJPEG\_SW\_MODE&gt; of the MJPEG\_CONTROL\_2 register is cleared to
      0, the linkage mode is enabled. In this mode, MJPEG processes the output of the CAM module as
      its input. MJPEG is processed with 8\*8 data blocks as a unit. When the CAM finishes writing 8
      lines of data to the memory, MJPEG starts to work, and the memory space processed by MJPEG
      will be released to the CAM for reuse, so that the CAM can complete the linkage with MJPEG
      without the memory space of a whole picture.

### Swap mode

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

When using swap mode, the MJPEG storage space is evenly divided into two blocks, when
      MJPEG finishes writing one block, an interrupt is generated to notify the software to read the
      data, and it writes the data to the other block. Alternate use back and forth, to use less
      than one frame of picture storage space for data processing.

### Kick mode

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

The kick mode is enabled when bit &lt;REG\_SW\_KICK\_MODE&gt; of
the MJPEG\_CONTROL\_2 register is set to 1. In this mode, each time a
1 is written to the bit &lt;REG\_SW\_KICK&gt; of the MJPEG\_CONTROL\_2
register, a compression is started. The number of compressed lines
is determined by the bit &lt;REG\_SW\_KICK\_HBLK&gt; of the
MJPEG\_YUV\_MEM\_SW register. It should be noted that the kick mode
can only be used in software mode, not in linkage mode.

### Jpg function

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

The jpg function will automatically reserve some bytes of space at the beginning of
      each frame of data and fill it with the specified data. The size of this space is set by the
      lower 12 bits of the register MJPEG\_HEADER\_BYTE. There are 768 bytes of memory at offset 0x800
      for storing the data that must be filled at the beginning of each frame. The user only must
      write the jpg header information into it, and this information will be included at the
      beginning of each frame of data generated. In addition, if the autofill jpg end is enabled,
      two bytes of data will be added at the end of each frame of data, and the value of these two
      bytes is 0xFFD9.

### Cache image
information

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

The module contains 4 groups of FIFO to record the picture address, picture size and
      picture ID. Whenever this module completely writes a frame to the memory, it will record the
      start address, image size and image ID of the frame image in this FIFO, but it should be noted
      that when the memory is insufficient, or there are 4 sets of FIFO when the storage is full,
      the module will automatically discard the information of the next picture. In the part where
      the picture information is taken out, the pop action can be performed through the APB
      interface to empty the oldest picture information. At this time, the FIFO is automatically
      advanced to ensure the FIFO. Timing of internal picture information.

### Support various interrupt information (can be configured independently of the
    switch)

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

- Normal interrupt: can be set to interrupt after writing several pictures
- Camera interrupt: When the speed of MJPEG processing cannot keep up with the speed of CAM
        module writing, and the CAM overflows, an interrupt is issued
- Memory interrupt: When the memory is overwritten, an interrupt is issued
- Frame interrupt: When there are more than 4 groups of unprocessed pictures, an interrupt
        is issued
- Swap interrupt: When a memory block is full in swap mode, an interrupt is issued

## Register description

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

| Name | Description |
| --- | --- |
| [mjpeg_control_1](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-control-1) | MJPEG configure |
| [mjpeg_control_2](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-control-2) | MJPEG software mode |
| [mjpeg_yy_frame_addr](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-yy-frame-addr) | Memory start address of Y |
| [mjpeg_uv_frame_addr](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-uv-frame-addr) | Memory start address of UV |
| [mjpeg_yuv_mem](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-yuv-mem) | Number of Y/UV block line |
| [jpeg_frame_addr](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-jpeg-frame-addr) | Memory start address of JPEG |
| [jpeg_store_memory](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-jpeg-store-memory) | Burst count of memory |
| [mjpeg_control_3](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-control-3) | Interrupt and bus status |
| [mjpeg_frame_fifo_pop](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-frame-fifo-pop) | Interrupt clear and pop |
| [mjpeg_frame_size](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-frame-size) | Total block count |
| [mjpeg_header_byte](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-header-byte) | YUV order and auto fill |
| [mjpeg_swap_mode](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-swap-mode) | Swap mode |
| [mjpeg_swap_bit_cnt](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-swap-bit-cnt) | Remain bit count |
| [mjpeg_yuv_mem_sw](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-yuv-mem-sw) | Number of kick block line |
| [mjpeg_Y_frame_read_status_1](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-Y-frame-read-status-1) | Y read status1 |
| [mjpeg_Y_frame_read_status_2](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-Y-frame-read-status-2) | Y read status2 |
| [mjpeg_Y_frame_write_status](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-Y-frame-write-status) | Y write status |
| [mjpeg_UV_frame_read_status_1](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-UV-frame-read-status-1) | UV read status1 |
| [mjpeg_UV_frame_read_status_2](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-UV-frame-read-status-2) | UV read status2 |
| [mjpeg_UV_frame_write_status](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-UV-frame-write-status) | UV write status |
| [mjpeg_frame_w_hblk_status](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-frame-w-hblk-status) | Vertical block write status |
| [mjpeg_start_addr0](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-start-addr0) | Start address of frame0 |
| [mjpeg_bit_cnt0](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-bit-cnt0) | Bit count of frame0 |
| [mjpeg_start_addr1](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-start-addr1) | Start address of frame1 |
| [mjpeg_bit_cnt1](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-bit-cnt1) | Bit count of frame1 |
| [mjpeg_start_addr2](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-start-addr2) | Start address of frame2 |
| [mjpeg_bit_cnt2](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-bit-cnt2) | Bit count of frame2 |
| [mjpeg_start_addr3](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-start-addr3) | Start address of frame3 |
| [mjpeg_bit_cnt3](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-bit-cnt3) | Bit count of frame3 |
| [mjpeg_q_enc](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-q-enc) | Quantize SRAM setting |
| [mjpeg_frame_id_10](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-frame-id-10) | ID of frame 0/1 |
| [mjpeg_frame_id_32](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-frame-id-32) | ID of frame 2/3 |
| [mjpeg_debug](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html#mjenc-mjpeg-debug) | ID latch timing |

### mjpeg\_control\_1

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021000

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:30 | RSVD |  |  |  |
| 29:24 | reg\_mjpeg\_hw\_frame | RW | 0 | Non-SW mode frame cnt<br><br><br>                      <br>0 - Nonauto stop |
| 23:14 | RSVD |  |  |  |
| 13:12 | reg\_yuv\_mode | RW | 0 | YUV format setting<br><ul class="ul" id="mjenc-mjpeg-control-1__ul_b3m_3mb_31c"><br>                <li class="li">0: YUV420 planar</li><br><br>                <li class="li">1: YUV400 gray scale</li><br><br>                <li class="li">2: YUV422 planar</li><br><br>                <li class="li">3: INTV422</li><br><br>              </ul> |
| 11 | RSVD |  |  |  |
| 10:8 | reg\_w\_xlen | RW | 0x3 | AXI burst length setting<br><ul class="ul" id="mjenc-mjpeg-control-1__ul_itc_jmb_31c"><br>                <li class="li">0: Single</li><br><br>                <li class="li">1: INCR4</li><br><br>                <li class="li">2: INCR8</li><br><br>                <li class="li">3: INCR16</li><br><br>                <li class="li">Others: RSVD</li><br><br>              </ul> |
| 7 | reg\_read\_fwrap | RW | 1 | Only effect in non-software mode<br><br><br>                      <br>This bit determine whether YUV frame read start at the start address |
| 6 | reg\_reflect\_dmy | RW | 0 | UV dummy with reflect |
| 5 | reg\_last\_hf\_hblk\_dmy | RW | 0 | MJPEG last half vertical block with dummy data 8'h80 |
| 4 | reg\_last\_hf\_wblk\_dmy | RW | 0 | MJPEG last half horizontal block with dummy data 8'h80 |
| 3 | reg\_hw\_mode\_swen | RW | 0 | Only word in hardware mode.<br><br><br>                      <br>Software enable immediately to skip waiting the first frame done |
| 2 | reg\_order\_u\_even | RW | 1 | <ul class="ul" id="mjenc-mjpeg-control-1__ul_ykm_jmb_31c"><br>                <li class="li">0: U is odd byte of UV frame / V is even byte of UV frame</li><br><br>                <li class="li">1: U is even byte of UV frame / V is odd byte of UV frame</li><br><br>              </ul> |
| 1 | reg\_mjpeg\_bit\_order | RW | 1 | MJPEG bit stream byte order adjustment |
| 0 | reg\_mjpeg\_enable | RW | 0 | MJPEG enable |

### mjpeg\_control\_2

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021004

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:16 | reg\_mjpeg\_wait\_cycle | RW | 0x100 | Cycle count in wait state |
| 15:13 | reg\_uv\_dvp2axi\_sel | RW | 0x1 | DVP2AXI selection for UV frame (Don't care if using software<br>              mode) |
| 12:10 | reg\_yy\_dvp2axi\_sel | RW | 0 | DVP2AXI selection for Y frame(Don't care if using software mode) |
| 9 | reg\_mjpeg\_sw\_run | RW | 0 | MJPEG software mode run (should enable reg\_mjpeg\_sw\_mode before<br>              reg\_mjpeg\_sw\_run) |
| 8 | reg\_mjpeg\_sw\_mode | RW | 0 | MJPEG software mode enable (should enable reg\_mjpeg\_sw\_mode before<br>              reg\_mjpeg\_sw\_run) |
| 7 | reg\_sw\_kick\_mode | RW | 0 | MJPEG software mode hblk kick mode<br><ul class="ul" id="mjenc-mjpeg-control-2__ul_s2d_5mb_31c"><br>                <li class="li">0: Software frame mode</li><br><br>                <li class="li">1: Software kick mode</li><br><br>              </ul> |
| 6 | reg\_sw\_kick | W1P | 0 | MJPEG software mode hblk kick |
| 5 | RSVD |  |  |  |
| 4:0 | reg\_sw\_frame | RW | 0 | MJPEG software mode frame count |

### mjpeg\_yy\_frame\_addr

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021008

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:0 | reg\_yy\_addr\_start | RW | 0x80000000 | Memory start address of Y frame |

### mjpeg\_uv\_frame\_addr

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x3002100c

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:0 | reg\_uv\_addr\_start | RW | 0x80000000 | Memory start address of UV frame |

### mjpeg\_yuv\_mem

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021010

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:29 | RSVD |  |  |  |
| 28:16 | reg\_uv\_mem\_hblk | RW | 0x2 | Memory to store block line for UV frame |
| 15:13 | RSVD |  |  |  |
| 12:0 | reg\_yy\_mem\_hblk | RW | 0x2 | Memory to store block line for Y frame |

### jpeg\_frame\_addr

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021014

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:0 | reg\_w\_addr\_start | RW | 0x80400000 | Memory start address of JPEG frame |

### jpeg\_store\_memory

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021018

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:0 | reg\_w\_burst\_cnt | RW | 0x4000 | Memory to store jpeg image burst count |

### mjpeg\_control\_3

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x3002101c

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31 | RSVD |  |  |  |
| 30 | sts\_swap\_int | R | 0 | Swap memory block interrupt status |
| 29 | reg\_int\_swap\_en | RW | 0 | Swap memory block interrupt enable |
| 28:24 | frame\_valid\_cnt | R | 0 | Frame count valid in status |
| 23 | RSVD |  |  |  |
| 22 | sts\_idle\_int | R | 0 | Normal write interrupt status |
| 21 | reg\_int\_idle\_en | RW | 0 | Back idle interrupt enable |
| 20:16 | reg\_frame\_cnt\_trgr\_int | RW | 0 | Frame threshold to issue interrupt |
| 15 | axi\_write\_idle | R | 0 | AXI write bus idle state |
| 14 | axi\_read\_idle | R | 0 | AXI read bus idle state |
| 13 | mjpeg\_manf | R | 0 | MJPEG in software run state |
| 12 | mjpeg\_mans | R | 0 | MJPEG in software set state |
| 11 | mjpeg\_flsh | R | 0 | MJPEG in flush state |
| 10 | mjpeg\_wait | R | 0 | MJPEG in wait state |
| 9 | mjpeg\_func | R | 0 | MJPEG in hardware function state |
| 8 | mjpeg\_idle | R | 1 | MJPEG in idle state |
| 7 | sts\_frame\_int | R | 0 | Frame OverWrite interrupt status |
| 6 | sts\_mem\_int | R | 0 | Memory OverWrite interrupt status |
| 5 | sts\_cam\_int | R | 0 | CAM OverWrite interrupt status (fatal) |
| 4 | sts\_normal\_int | R | 0 | Normal write interrupt status |
| 3 | reg\_int\_frame\_en | RW | 0 | Frame OverWrite interrupt enable |
| 2 | reg\_int\_mem\_en | RW | 0 | JPEG frame memory OverWrite interrupt enable |
| 1 | reg\_int\_cam\_en | RW | 1 | YUV frame memory OverWrite interrupt enable (fatal) |
| 0 | reg\_int\_normal\_en | RW | 1 | Normal write interrupt enable |

### mjpeg\_frame\_fifo\_pop

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021020

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:14 | RSVD |  |  |  |
| 13 | reg\_int\_swap\_clr | W1P | 0 | Write this bit with 1 to trigger swap interrupt clear |
| 12 | reg\_int\_idle\_clr | W1P | 0 | Write this bit with 1 to trigger back idle interrupt clear |
| 11 | reg\_int\_frame\_clr | W1P | 0 | Write this bit with 1 to trigger frame overwrite interrupt<br>              clear |
| 10 | reg\_int\_mem\_clr | W1P | 0 | Write this bit with 1 to trigger memory overwrite interrupt<br>              clear |
| 9 | reg\_int\_cam\_clr | W1P | 0 | Write this bit with 1 to trigger YUV overwrite interrupt clear |
| 8 | reg\_int\_normal\_clr | W1P | 0 | Write this bit with 1 to trigger normal interrupt clear |
| 7:2 | RSVD |  |  |  |
| 1 | reg\_w\_swap\_clr | W1P | 0 | Free current read memory block |
| 0 | rfifo\_pop | W1P | 0 | Write this bit with 1 to trigger JPEG frame FIFO pop |

### mjpeg\_frame\_size

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021024

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:28 | RSVD |  |  |  |
| 27:16 | reg\_frame\_hblk | RW | 0x14 | Frame total vertical block count |
| 15:12 | RSVD |  |  |  |
| 11:0 | reg\_frame\_wblk | RW | 0xF | Frame total horizontal block count |

### mjpeg\_header\_byte

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021028

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:30 | reg\_v0\_order | RW | 0x3 | V order in interleave mode |
| 29:28 | reg\_y1\_order | RW | 0x2 | Y1 order in interleave mode |
| 27:26 | reg\_u0\_order | RW | 0x1 | U order in interleave mode |
| 25:24 | reg\_y0\_order | RW | 0 | Y0 order in interleave mode |
| 23:17 | RSVD |  |  |  |
| 16 | reg\_tail\_exp | RW | 0 | Auto fill tail 0xFF and 0xD9 |
| 15:12 | RSVD |  |  |  |
| 11:0 | reg\_head\_byte | RW | 0 | Preserve head memory space for each frame |

### mjpeg\_swap\_mode

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021030

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:13 | RSVD |  |  |  |
| 12 | sts\_swap\_fend | R | 0 | Current read memory block is frame end |
| 11 | sts\_swap\_fstart | R | 0 | Current read memory block is frame start |
| 10 | sts\_read\_swap\_idx | R | 0 | Current read memory block index<br><ul class="ul" id="mjenc-mjpeg-swap-mode__ul_jbk_3pb_31c"><br>                <li class="li">0: memory block0</li><br><br>                <li class="li">1: memory block1</li><br><br>              </ul> |
| 9 | sts\_swap1\_full | R | 0 | Memory block1 is full |
| 8 | sts\_swap0\_full | R | 0 | Memory block0 is full |
| 7:1 | RSVD |  |  |  |
| 0 | reg\_w\_swap\_mode | RW | 0 | Enable write swap mode |

### mjpeg\_swap\_bit\_cnt

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021034

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:0 | frame\_swap\_end\_bit\_cnt | R | 0 | In swap mode frame remain bit count in the last block<br><br><br>                      <br>Only valid when 'sts\_swap\_fend==1' |

### mjpeg\_yuv\_mem\_sw

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021038

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:13 | RSVD |  |  |  |
| 12:0 | reg\_sw\_kick\_hblk | RW | 0x2 | Memory to store block line for frame on software kick |

### mjpeg\_Y\_frame\_read\_status\_1

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021040

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:29 | RSVD |  |  |  |
| 28:16 | yy\_frm\_hblk\_r | R | 0 | Y frame vertical block read status |
| 15:13 | RSVD |  |  |  |
| 12:0 | yy\_mem\_hblk\_r | R | 0 | Y memory vertical block read status |

### mjpeg\_Y\_frame\_read\_status\_2

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021044

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:24 | yy\_frm\_cnt\_r | R | 0 | Y frame read count |
| 23:16 | yy\_mem\_rnd\_r | R | 0 | Y memory read round |
| 15:13 | RSVD |  |  |  |
| 12:0 | yy\_wblk\_r | R | 0 | Y frame horizontal block read status |

### mjpeg\_Y\_frame\_write\_status

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021048

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:24 | yy\_frm\_cnt\_w | R | 0 | Y frame write count |
| 23:16 | yy\_mem\_rnd\_w | R | 0 | Y memory write round |
| 15:13 | RSVD |  |  |  |
| 12:0 | yy\_mem\_hblk\_w | R | 0 | Y memory vertical block write status |

### mjpeg\_UV\_frame\_read\_status\_1

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x3002104c

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:29 | RSVD |  |  |  |
| 28:16 | uv\_frm\_hblk\_r | R | 0 | UV frame vertical block read status |
| 15:13 | RSVD |  |  |  |
| 12:0 | uv\_mem\_hblk\_r | R | 0 | UV memory vertical block read status |

### mjpeg\_UV\_frame\_read\_status\_2

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021050

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:24 | uv\_frm\_cnt\_r | R | 0 | UV frame read count |
| 23:16 | uv\_mem\_rnd\_r | R | 0 | UV memory read round |
| 15:13 | RSVD |  |  |  |
| 12:0 | uv\_wblk\_r | R | 0 | UV frame horizontal block read status |

### mjpeg\_UV\_frame\_write\_status

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021054

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:24 | uv\_frm\_cnt\_w | R | 0 | UV frame write count |
| 23:16 | uv\_mem\_rnd\_w | R | 0 | UV memory write round |
| 15:13 | RSVD |  |  |  |
| 12:0 | uv\_mem\_hblk\_w | R | 0 | UV memory vertical block write status |

### mjpeg\_frame\_w\_hblk\_status

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021058

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:29 | RSVD |  |  |  |
| 28:16 | uv\_frm\_hblk\_w | R | 0 | UV frame vertical block write status |
| 15:13 | RSVD |  |  |  |
| 12:0 | yy\_frm\_hblk\_w | R | 0 | YY frame vertical block write status |

### mjpeg\_start\_addr0

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021080

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:0 | frame\_start\_addr\_0 | R | 0 | MJPEG FRAME0 Start address |

### mjpeg\_bit\_cnt0

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021084

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:0 | frame\_bit\_cnt\_0 | R | 0 | MJPEG FRAME0 total bit count |

### mjpeg\_start\_addr1

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021088

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:0 | frame\_start\_addr\_1 | R | 0 | MJPEG FRAME1 Start address |

### mjpeg\_bit\_cnt1

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x3002108c

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:0 | frame\_bit\_cnt\_1 | R | 0 | MJPEG FRAME1 total bit count |

### mjpeg\_start\_addr2

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021090

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:0 | frame\_start\_addr\_2 | R | 0 | MJPEG FRAME2 Start address |

### mjpeg\_bit\_cnt2

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021094

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:0 | frame\_bit\_cnt\_2 | R | 0 | MJPEG FRAME2 total bit count |

### mjpeg\_start\_addr3

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021098

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:0 | frame\_start\_addr\_3 | R | 0 | MJPEG FRAME3 Start address |

### mjpeg\_bit\_cnt3

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x3002109c

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:0 | frame\_bit\_cnt\_3 | R | 0 | MJPEG FRAME3 total bit count |

### mjpeg\_q\_enc

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021100

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:26 | RSVD |  |  |  |
| 25 | sts\_q\_sram\_enc | R | 0 | Current quantize SRAM selection for encode |
| 24 | reg\_q\_sram\_sw | W1P | 0 | Quantize SRAM switch |
| 23:4 | RSVD |  |  |  |
| 3 | frame\_q\_sram\_3 | R | 0 | MJPEG FRAME3 quantize SRAM selection |
| 2 | frame\_q\_sram\_2 | R | 0 | MJPEG FRAME2 quantize SRAM selection |
| 1 | frame\_q\_sram\_1 | R | 0 | MJPEG FRAME1 quantize SRAM selection |
| 0 | frame\_q\_sram\_0 | R | 0 | MJPEG FRAME0 quantize SRAM selection |

### mjpeg\_frame\_id\_10

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021110

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:16 | frame\_id\_1 | R | 0 | JPEG PIC 1 ID |
| 15:0 | frame\_id\_0 | R | 0 | JPEG PIC 0 ID |

### mjpeg\_frame\_id\_32

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x30021114

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:16 | frame\_id\_3 | R | 0 | JPEG PIC 3 ID |
| 15:0 | frame\_id\_2 | R | 0 | JPEG PIC 2 ID |

### mjpeg\_debug

Source: [https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html](https://docs.qualcomm.com/doc/80-58740-1/topic/mjpeg.html)

Address: 0x300211f0

| Bits | **Name** | **Type** | **Reset** | **Description** |
| --- | --- | --- | --- | --- |
| 31:12 | RSVD |  |  |  |
| 11:8 | reg\_id\_latch\_hblk | RW | 1 | ID latch timing (hblk count) |
| 7:4 | reg\_mjpeg\_dbg\_sel | RW | 0 | MJPEG debug flag selection |
| 3:1 | RSVD |  |  |  |
| 0 | reg\_mjpeg\_dbg\_en | RW | 0 | MJPEG debug flag enable |

Last Published: Feb 11, 2026