Great research starts with great data.

Learn More
More >
Patent Analysis of

Saving minimum macroblock data for subsequent encoding of other macroblocks

Updated Time 12 June 2019

Patent Registration Data

Publication Number

US10063871

Application Number

US13/533075

Application Date

26 June 2012

Publication Date

28 August 2018

Current Assignee

TEXAS INSTRUMENTS INCORPORATED

Original Assignee (Applicant)

JAGANNATHAN, SHYAM,SRINIVASAMURTHY, NAVEEN

International Classification

H04N7/12,H04N19/433,H04N19/43

Cooperative Classification

H04N19/433,H04N19/43

Inventor

JAGANNATHAN, SHYAM,SRINIVASAMURTHY, NAVEEN

Patent Images

This patent contains figures and images illustrating the invention and its embodiment.

US10063871 Saving minimum macroblock data 1 US10063871 Saving minimum macroblock data 2 US10063871 Saving minimum macroblock data 3
See all images <>

Abstract

A video encoder including a first buffer containing a plurality of data values defining a macroblock of pixels of a video frame. The video encoder also includes a second buffer and an entropy encoder coupled to the first and second buffers and configured to encode a macroblock based on another macroblock. The entropy encoder identifies a subset of the data values from the first buffer defining a given macroblock and copies the identified subset to the second buffer, the subset of data values being just those data values used by the entropy encoder when subsequently encoding another macroblock.

Read more

Claims

1. A video encoder, comprising:

a first buffer to store a first set of data values, the first set of data values collectively defining only a first macroblock of pixels of a video frame; a second buffer; and an entropy encoder coupled to the first and second buffers;wherein the entropy encoder is configured to encode a second macroblock of pixels of the video frame based on a subset of the first set of data values stored in the first buffer:

identifying the subset of the first set of data values stored in the first buffer, wherein the subset of the first set of data values is less than all of the data values of the first set of data values and comprises only data values of the first set of data values used by the entropy encoder for subsequently encoding the second macroblock; copying the subset of the first set of data values to the second buffer; and encoding the second macroblock using the subset of the first set of data values.

2. The video encoder of claim 1, wherein the data values of the subset of the first set of data values are not all stored contiguously in the first buffer.

3. The video encoder of claim 2, wherein the data values of the subset of the first set of data values are stored contiguously in the second buffer when copied to the second buffer.

4. The video encoder of claim 1, wherein the first macroblock of pixels is not in the same row as the second macroblock of pixels within the video frame.

5. A video apparatus, comprising:

a video encoder including a first buffer to store a first set of data values that collectively defines only a first macroblock of pixels of a video frame, a second buffer, and an entropy encoder coupled to the first and second buffers, the entropy encoder being configured to encode a second macroblock of pixels of the video frame based on a subset of the first set of data values stored in the first buffer by identifying the subset of the first set of data values stored in the first buffer, copying the subset of the first set of data values to the second buffer, and encoding the second macroblock using the subset of the first set of data values, wherein the subset of the first set of data values is less than all of the data values of the first set of data values and comprises only data values of the first subset used by the entropy encoder to encode the second macroblock; and a direct memory access (DMA) engine coupled to the video encoder to transfer the subset of the first set of data values from the second buffer to memory external to the video encoder.

6. The video apparatus of claim 5, wherein the data values of the first set of data values that are in the subset of the first set of data values are not all stored contiguously in the first buffer.

7. The video apparatus of claim 6, wherein the data values of the subset of the first set of data values are stored contiguously in the second buffer when copied to the second buffer.

8. The video apparatus of claim 5, further comprising a host processor coupled to the video encoder.

9. The video apparatus of claim 8, wherein the memory external to the video encoder is external to but accessible by the host processor.

10. The video apparatus of claim 8, wherein the memory external to the video encoder is an internal memory of the host processor.

11. The video apparatus of claim 5, wherein:

the DMA engine retrieves the subset of the first set of data values from the memory external to the video encoder; and the video encoder uses the subset of the first set of data values retrieved by the DMA engine to encode the second macroblock using the entropy encoder.

12. A method for encoding macroblocks of pixels of a video frame using a video encoder, the method comprising:

identifying a subset of data values from a first set of data values stored in a first storage, wherein the first set of data values defines only a first macroblock of pixels of the video frame, wherein the subset of data values are uncompressed non-contiguous portions of the first set of data values and comprise only data values of the first set of data values used by an entropy encoder of the video encoder to subsequently encode a second macroblock of pixels of the video frame, and wherein the uncompressed non-contiguous portions of the first set of data values is less than all data values of the first set of data values; transferring the subset of data values to contiguous locations in a second storage to form compressed macroblock information; transferring the compressed macroblock information from the second storage to a third storage; retrieving the compressed macroblock information from the third storage; and encoding, using the entropy encoder, the second macroblock using the compressed macroblock information retrieved from the third storage.

13. The method of claim 12, wherein transferring the subset of data values to the second storage comprises using the entropy encoder to read the subset of data values from the first storage using the entropy encoder and then write the subset of data values to the second storage.

14. The method of claim 12, wherein the first storage comprises a first buffer of the video encoder and the second storage comprises a second buffer of the video encoder.

15. The method of claim 14, wherein the first and second buffers are separate from one another.

16. The method of claim 14, wherein the third storage is a memory external to the video encoder.

17. The method of claim 16, wherein transferring the compressed macroblock information from the second storage to a third storage comprises using a direct memory access (DMA) engine to perform the transferring.

18. The method of claim 12, wherein the first macroblock of pixels is not in the same row as the second macroblock of pixels within the video frame.

Read more

Claim Tree

  • 1
    comprising: a first buffer to
    • ore a first set of data values, the first set of data values collectively defining only a first macroblock of pixels of a video frame; a second buffer; a
    • an entropy enc
    • er coupled to the first and second buffers;wherein the entropy
    • ncoder is configured to encode a second macroblock of pixels of the video frame based on a subset of the first set of data values stored in the first buffer: identifying the subset of the first set of data values stored in the first buffer, wherein the subset of the first set of data values is less than all of the data values of the first set of data values and comprises only data values of the first set of data values used by the entropy encoder for subsequently encoding the second macroblock; copying the subset
    • the first set of data values to the second buffer; and encoding the se
    • nd macroblock using the subset of the first set of data values. 2. The video encoder
    • of claim 1, wherein the data val es of t
      • e subset of the first set of data values are not all stored contiguously in the first buffer. 3. The video encoder
    • of claim 1, wherein the first ma roblock
      • of pixels is not in the same row as the second macroblock of pixels within the video frame. 5. A video apparatus
  • 5
    comprising: a video ncoder inc
    • ding a first buffer to store a first set of data values that collectively defines only a first macroblock of pixels of a video frame, a second buffer, and an entropy encoder coupled to the first and second buffers, the entropy encoder being configured to encode a second macroblock of pixels of the video frame based on a subset of the first set of data values stored in the first buffer by identifying the subset of the first set of data values stored in the first buffer, copying the subset of the first set of data values to the second buffer, and encoding the second macroblock using the subset of the first set of data values, wherein the subset of the first set of data values is less than all of the data values of the first set of data values and comprises only data values of the first subset used by the entropy encoder to encode the second macroblock; and a direct memory
    • ccess (DMA) engine coupled to the video encoder to transfer the subset of the first set of data values from the second buffer to memory external to the video encoder. 6. The video apparat
    • s of claim 5, wherein the data val es of t
      • e first set of data values that are in the subset of the first set of data values are not all stored contiguously in the first buffer. 7. The video apparat
    • s of claim 5, further comprising a host processor cou
      • led to the video encoder. 9. The video apparat
    • us of claim 5, wherein: the DMA eng ne retr
      • ieves the subset of the first set of data values from the memory external to the video encoder; and the video encoder uses the subset of the first set of data values retrieved by the DMA engine to encode the second macroblock using the entropy encoder. 12. A method for enc
  • 12
    ding macroblocks of pixels of a video frame using a video encoder, the method comprising: identify ng a subse
    • of data values from a first set of data values stored in a first storage, wherein the first set of data values defines only a first macroblock of pixels of the video frame, wherein the subset of data values are uncompressed non-contiguous portions of the first set of data values and comprise only data values of the first set of data values used by an entropy encoder of the video encoder to subsequently encode a second macroblock of pixels of the video frame, and wherein the uncompressed non-contiguous portions of the first set of data values is less than all data values of the first set of data values; transferring the su
    • et of data values to contiguous locations in a second storage to form compressed macroblock information; transferring the co
    • ressed macroblock information from the second storage to a third storage; retrieving the comp
    • ssed macroblock information from the third storage; and encoding, using
    • he entropy encoder, the second macroblock using the compressed macroblock information retrieved from the third storage. 13. The method of cl
    • im 12, wherein transferring the sub
      • et of data values to the second storage comprises using the ntropy en
    • im 12, wherein the first st rage co
      • prises a first bu fer of th
    • im 12, wherein the first ma roblock
      • of pixels is not in the same row as the second macroblock of pixels within the video frame.
See all independent claims <>

Description

CROSS-REFERENCE TO RELATED APPLICATION

The present application claims priority to India Provisional Patent Application No. 3846/CHE/2011, filed on Nov. 9, 2011; which is hereby incorporated herein by reference.

BACKGROUND

High definition (HD) video comprises numerous macroblocks per frame. For 1080p video, there are 8160 16×16 pixel macroblocks. Thus 8160 macroblocks must be decoded 30 times per second, thereby imposing a significant performance burden on the encoder. Video encoders often are constructed in a pipeline fashion to improve throughput, but additional performance improvements may be desirable.

SUMMARY

An illustrative embodiment is directed to a video encoder including a first buffer containing a plurality of data values defining a macroblock of pixels of a video frame. The video encoder also includes a second buffer and an entropy encoder coupled to the first and second buffers and configured to encode a macroblock based on another macroblock. The entropy encoder identifies a subset of the data values from the first buffer defining a given macroblock and copies the identified subset to the second buffer, the subset of data values being just those data values used by the entropy encoder when subsequently encoding another macroblock.

Another embodiment is directed to a video apparatus including a video encoder including a first buffer containing a plurality of data values defining a macroblock of pixels of a video frame. The video encoder also includes a second buffer and an entropy encoder coupled to the first and second buffers. The entropy encoder is configured to encode a macroblock based on another macroblock. The entropy encoder identifies a subset of the data values from the first buffer defining a given macroblock and copies the identified subset to the second buffer, the subset of data values being just those data values used by the entropy encoder when subsequently encoding another macroblock. The video apparatus also includes a direct memory access (DMA) engine coupled to the video encoder to transfer the identified subset from the second buffer to memory external to the video encoder.

Yet another embodiment is directed to a method usable in a video encoder. The method includes reading uncompressed non-contiguous portions from a data set in a first storage, the data set describing a first macroblock, and the portions being some but not all of the data set. The method further includes writing the portions to contiguous locations in a second storage to form compressed macroblock information. The method also includes writing the compressed macroblock information from the second storage to a third storage and encoding a second macroblock based on the compressed macroblock information from the third storage.

BRIEF DESCRIPTION OF THE DRAWINGS

For a detailed description of exemplary embodiments of the invention, reference will now be made to the accompanying drawings in which:

FIG. 1 shows a system including a video encoder in accordance with various embodiments;

FIG. 2 illustrates a process by which a macroblock data set is compressed for subsequent use in encoding another macroblock; and

FIG. 3 shows a method in accordance with various embodiments.

NOTATION AND NOMENCLATURE

Certain terms are used throughout the following description and claims to refer to particular system components. As one skilled in the art will appreciate, companies may refer to a component by different names. This document does not intend to distinguish between components that differ in name but not function. In the following discussion and in the claims, the terms “including” and “comprising” are used in an open-ended fashion, and thus should be interpreted to mean “including, but not limited to . . . .” Also, the term “couple” or “couples” is intended to mean either an indirect or direct connection. Thus, if a first device couples to a second device, that connection may be through a direct connection, or through an indirect connection via other devices and connections.

The term “macroblock” is used herein to represent a group of pixels to be rendered on a display. A macroblock may be a 16×16 group of pixels, but can be a different size and need not be square in other embodiments. A frame of video data is represented by multiple macroblocks.

DETAILED DESCRIPTION

The following discussion is directed to various embodiments of the invention. Although one or more of these embodiments may be preferred, the embodiments disclosed should not be interpreted, or otherwise used, as limiting the scope of the disclosure, including the claims. In addition, one skilled in the art will understand that the following description has broad application, and the discussion of any embodiment is meant only to be exemplary of that embodiment, and not intended to intimate that the scope of the disclosure, including the claims, is limited to that embodiment.

FIG. 1 shows a block diagram of a video encoder 100 in accordance with various embodiments. The encoder 100 includes a motion estimator (ME) 102, a motion compensator (MC) 104, a calculation engine (CALC) 106, an intra-prediction engine 107, an entropy encoder 108, a boundary strength estimator 110, and a loop filter 112.

The motion estimator 102 and the motion compensator 104 cooperate to provide macroblock inter-frame predictions (i.e., temporal predictions). The motion estimator 102 searches a previous frame for a matching macroblock to each macroblock in a current frame and generates a motion vector for a given macroblock based on a closest match for the macroblock in a previously encoded frame. The ME 102 writes the motion vector at a common offset in buffer 120 agreed upon by the ME 102 and MC 104. The motion compensator 104 applies the motion vector produced by the motion estimator 102 to the previously encoded frame to generate an estimate of the given macroblock.

The intra-prediction engine 107 analyzes a given macroblock with reference to one or more adjacent macroblocks in the same frame. For example, when encoding a given macroblock, the intra-prediction engine 107 may analyze a macroblock directly above (upper macroblock), a macroblock to the right of the upper macroblock (upper right macroblock), a macroblock to the left of the upper macroblock (upper left macroblock), and a macroblock immediately to the left of the given macroblock (left macroblock) to provide spatial predictions. The intra-prediction engine 107 generates a spatial activity metric which it stores in buffer 103. Based on the analysis, the intra-prediction engine 107 selects one of a plurality of intra-prediction modes for application to the given macroblock.

In addition to the motion vector, the ME 102 generates another metric known as the Sum of Absolute Differences (SAD). The SAD is the sum of the absolute differences between pixels in a current macroblock and corresponding pixels in a reference macroblock. The host processor 90 reads the spatial activity metric generated by the intra-prediction engine 107 via buffer 103 and the SAD generated by the ME 102 and performs a mode decision. In the mode decision, the host processor 90 determines whether the current macroblock is to be encoded using either an intra-block encoding technique or an inter-block encoding technique. After making this mode decision, the host processor 90 programs the CALC engine 106 and the entropy encoder 108 to encode each macroblock in accordance with the mode decision made for the macroblock.

In accordance with at least some embodiments of the invention, the intra mode is fixed at 16×16 (one of the four 16×16 modes per the H.264 standard) so that the intra-prediction engine 107 does not have to spend cycles to decide the mode. Further, the intra-prediction engine 107 preferably is programmed to provide a measure of spatial activity of the current block which is used to compare against a SAD of the motion compensated block.

If the mode decision made by the host processor 90 is to inter-block encode a given macroblock, the CALC engine 106 reads interpolated or motion compensated luminance and chrominance values from a buffer 105 shared between the MC 104 and CALC engine 106. The CALC engine 106 is given a copy of the current macroblock (also referred as the “original” macroblock) by the host processor 90 using the DMA engine 80. The CALC engine 106 takes the difference between motion compensated pixels and current pixels to produce residuals. The residuals will be transformed, quantized, and saved to a buffer 113 shared between the CALC engine 106 and the entropy encoder 108. As quantization is a lossy process (i.e., the precision of the transformed coefficients will be lost when inverse quantization is applied), the CALC engine will produce a reconstructed set of pixels by performing inverse quantization and inverse transformation. The CALC engine 106 will then save the reconstructed pixels in a buffer 111 shared between the CALC engine 106 and the loop filter 112. The reconstructed pixels will be filtered by the loop filter 112 based on the boundary strengths provided by the boundary strength estimator 110. The loop filter 112 saves the filtered data to a buffer 109 which is accessible also by the DMA engine 80.

If the mode decision made by the host processor 90 is to intra-block encode a given macroblock, the CALC engine 106 reads the intra mode and performs intra prediction for the mode for which it has been programmed. The CALC engine 106 computes the difference between intra-predicted pixels and current pixels and produces the residuals. The residuals will be transformed, quantized, and saved into buffer 113. As noted above, quantization is a lossy process and thus the CALC engine will produce a reconstructed set of pixels by performing inverse quantization and inverse transformation. The CALC engine 106 will then save the reconstructed pixels into buffer 111. The reconstructed pixels will be filtered by the loop filter 112 based on the boundary strengths provided by the boundary strength estimator 110. The loop filter 112 saves the filtered data to buffer 109 at the end for the DMA engine 80 to store in external memory.

The entropy encoder 108 receives the transformed quantized residuals, and applies a suitable coding technique. For example, the entropy encoder 108 may apply one of context adaptive binary arithmetic coding and context adaptive variable length coding to produce an entropy encoded macroblock.

The entropy encoder 108 and the boundary strength estimator 110 share and communicate with each other by way of macroblock data buffer (MBDATBUF) 121. The entropy encoder stores a data set in the MBDATBUF 121 that defines a corresponding macroblock. The boundary strength estimator 110 reads the macroblock data set of each macroblock and assigns strength values to the edges of blocks within the macroblock. For example, the boundary strength estimator 110 may apply strength values to the edges of 4×4 or 8×8 blocks of each macroblock. The strength values may be determined based on, for example, inter-block luminance gradient, size of applied quantization step, and difference in applied coding.

The loop filter 112 receives the strength values provided from the boundary strength estimator 110 and filters the block edges in accordance with the boundary strength values. Each filtered macroblock may be stored for use by the motion estimator 102 and the motion compensator 104 in inter-prediction.

Referring still to FIG. 1, the video encoder 100 also includes a buffer 120 that is shared by the motion estimator (ME) 102 and the motion compensator (MC) 104. Because the buffer 120 is shared by ME 102 and MC 104, the buffer is referred to as an MEMC buffer 120. The MEMC buffer 120 is also shared by a DMA engine 80 and/or a host processor 90. The host processor 90 itself may write video data to the MEMC buffer 120 or program the DMA engine 80 to write video data from storage 84 to the buffer. Thus, the MEMC buffer 120 is accessible by multiple other hardware units (e.g., ME 102, MC 104, DMA engine 80, and host processor 90).

The MEMC buffer 120 preferably is operated in a “four buffer mode.” Four buffer mode means the MEMC buffer 120 is accessed as four pages. Each page may comprise any desired size such as 8 Kbytes. Each page can be accessed by a different master than the other pages. Thus, the ME 102 can access one page of the MEMC buffer 120, while the MC 104 and DMA engine 80 access other pages of the buffer.

As explained above, the entropy encoder 108 generates a data set for each macroblock and stores that data set in the MBDATBUF 121 for use by the boundary strength estimator 110. The data set defines the corresponding macroblock. Table I below lists the various values that are included in an illustrated data set for a given macroblock. In the embodiment of Table I, a macroblock data set includes 304 bytes.


TABLE I
Full Macroblock Data Set
Offset
Bits
Parameter
Description
0x00
63:56
MB_TYPE_ID
Id number specifying type of
macroblock
55:40
mb_qp_delta
QP difference from the
previous macroblock
39
end_of_slice_flag
Flag to indicate the last
macroblock in the slice
38
mb_field_decoding_flag
Flag to indicate adaptive
frame/field macroblock
37:17
Reserved
16
transform_size_8x8_flag
Flag to indicate weather 4 × 4
transform or 8 × 8 transform
was used
15:8
MB_QP
QP Y (quantizer parameter)
for the macroblock
 7:6
Reserved
 5
cond_mb_skip_flag
Flag to indicate a skip
macroblock where there are
no non-zero coefficients
 4
mb_skip_flag
Flag to indicate if the
macroblock will be skipped
or not.
 3:1
Reserved
 0
available
Flag to indicate if the
macroblock is available as a
neighbor to current
macroblock.
0x08
63:38
Reserved
37:36
CodedBlockPatternChroma
Flag to indicate whether
AC/DC coefficients were
coded for chroma blocks
35:32
CodedBlockPatternLuma
Flag to indicate whether
AC/DC coefficients were
coded for luma blocks.
31:27
Reserved
26:0
CBP_27
Bit field to indicate both luma
and chroma coefficients.
0x10
63:56
intra_chroma_pred_mode
Intra chroma prediction
mode.
55:16
Reserved
15:0
PREV_INTRA_MODE_FLAGS
Previous intra mode flags
corresponding to current
macroblock.
0x18
63:56
REM_INTRA_MODE[7]
Bit fields at a 4 × 4 block level
55:48
REM_INTRA_MODE[6]
to capture the remainder
47:40
REM_INTRA_MODE[5]
intra prediction mode.
39:32
REM_INTRA_MODE[4]
31:24
REM_INTRA_MODE[3]
23:16
REM_INTRA_MODE[2]
15:8
REM_INTRA_MODE[1]
 7:0
REM_INTRA_MODE[0]
0x20
63:56
REM_INTRA_MODE[15]
55:48
REM_INTRA_MODE[14]
47:40
REM_INTRA_MODE[13]
39:32
REM_INTRA_MODE[12]
31:24
REM_INTRA_MODE[11]
23:16
REM_INTRA_MODE[10]
15:8
REM_INTRA_MODE[9]
 7:0
REM_INTRA_MODE[8]
0x28
63:32
Reserved
31:24
SUB_MB_TYPE_ID[3]
Inter mb types at 8 × 8 block
23:16
SUB_MB_TYPE_ID[2]
level.
15:8
SUB_MB_TYPE_ID[1]
 7:0
SUB_MB_TYPE_ID[0]
0x30
63:56
REF_IDX[1][3]
List 0 and List 1 reference
55:48
REF_IDX[1][2]
index at 8 × 8 level.
47:40
REF_IDX[1][1]
39:32
REF_IDX[1][0]
31:24
REF_IDX[0][3]
23:16
REF_IDX[0][2]
15:8
REF_IDX[0][1]
 7:0
REF_IDX[0][0]
0x38
63:32
MV[1][0]
Motion vectors of the
31:0
MV[0][0]
macroblock at 4 × 4 block
0x40
63:32
MV[1][1]
level for both List 0 and List
31:0
MV[0][1]
1 reference frame as
0x48
63:32
MV[1][2]
indicated by REF_IDX
31:0
MV[0][2]
0x50
63:32
MV[1][3]
31:0
MV[0][3]
0x58
63:32
MV[1][4]
31:0
MV[0][4]
0x60
63:32
MV[1][5]
31:0
MV[0][5]
0x68
63:32
MV[1][6]
31:0
MV[0][6]
0x70
63:32
MV[1][7]
31:0
MV[0][7]
0x78
63:32
MV[1][8]
31:0
MV[0][8]
0x80
63:32
MV[1][9]
31:0
MV[0][9]
0x88
63:32
MV[1][10]
31:0
MV[0][10]
0x90
63:32
MV[1][11]
31:0
MV[0][11]
0x98
63:32
MV[1][12]
31:0
MV[0][12]
0xA0
63:32
MV[1][13]
31:0
MV[0][13]
0xA8
63:32
MV[1][14]
31:0
MV[0][14]
0xB0
63:32
MV[1][15]
31:0
MV[0][15]
0xB8
63:56
Reserved
55:48
TOTAL_COEF[14]
Total non zero coefficients of
47:40
TOTAL_COEF[11]
Luma block at 4 × 4 level
39:32
TOTAL_COEF[10]
31:24
TOTAL_COEF[15]
23:16
TOTAL_COEF[13]
15:8
TOTAL_COEF[7]
 7:0
TOTAL_COEF[5]
0xC0
63:56
Reserved
55:48
TOTAL_COEF[22]
Total non zero coefficients of
47:40
TOTAL_COEF[23]
Cb block at 4 × 4 level.
39:32
TOTAL_COEF[21]
31:24
Reserved
23:16
TOTAL_COEF[18]
Total non zero coefficients of
15:8
TOTAL_COEF[19]
Cr block at 4 × 4 level
 7:0
TOTAL_COEF[17]
0xC8
63:0
Reserved
0xD0
63:24
Reserved
23:16
QP_CR
QP for Cr samples
15:8
QP_CB
QP for Cb samples
 7:0
QP_Y
QP for Y samples
0xD8
63:56
REF_PIC_ID[1][3]
Reference picture ID for all
55:48
REF_PIC_ID[0][3]
the 4 × 4 blocks of a
47:40
REF_PIC_ID[1][2]
macroblock for both List 0
39:32
REF_PIC_ID[0][2]
and List 1.
31:24
REF_PIC_ID[1][1]
23:16
REF_PIC_ID[0][1]
15:8
REF_PIC_ID[1][0]
 7:0
REF_PIC_ID[0][0]
0xE0
63:56
REF_PIC_ID[1][7]
55:48
REF_PIC_ID[0][7]
47:40
REF_PIC_ID[1][6]
39:32
REF_PIC_ID[0][6]
31:24
REF_PIC_ID[1][5]
23:16
REF_PIC_ID[0][5]
15:8
REF_PIC_ID[1][4]
 7:0
REF_PIC_ID[0][4]
0xE8
63:56
REF_PIC_ID[1][11]
55:48
REF_PIC_ID[0][11]
47:40
REF_PIC_ID[1][10]
39:32
REF_PIC_ID[0][10]
31:24
REF_PIC_ID[1][9]
23:16
REF_PIC_ID[0][9]
15:8
REF_PIC_ID[1][8]
 7:0
REF_PIC_ID[0][8]
0xF0
63:56
REF_PIC_ID[1][15]
55:48
REF_PIC_ID[0][15]
47:40
REF_PIC_ID[1][14]
39:32
REF_PIC_ID[0][14]
31:24
REF_PIC_ID[1][13]
23:16
REF_PIC_ID[0][13]
15:8
REF_PIC_ID[1][12]
 7:0
REF_PIC_ID[0][12]
0xF8
63:32
MVD[1][5]
The motion vector difference
31:0
MVD[0][5]
at 4 × 4 level of the
0x100
63:32
MVD[1][7]
neighboring macroblocks.
31:0
MVD[0][7]
0x108
63:32
MVD[1][13]
31:0
MVD[0][13]
0x110
63:32
MVD[1][15]
31:0
MVD[0][15]
0x118
63:32
MVD[1][10]
31:0
MVD[0][10]
0x120
63:32
MVD[1][11]
31:0
MVD[0][11]
0x128
63:32
MVD[1][14]
31:0
MVD[0][14]

Macroblock data sets are also used to encode other macroblocks. For example, the entropy encoder 108 may encode a given macroblock using information about a macroblock directly above (upper macroblock), a macroblock to the right of the upper macroblock (upper right macroblock), a macroblock to the left of the upper macroblock (upper left macroblock), and a macroblock immediately to the left of the given macroblock (left macroblock). However, not all of the parameters in a macroblock data set are needed for the purpose of encoding other macroblocks.

Table II below shows one example of just the parameters from Table I that may be needed by the entropy encoder 108 to encode other macroblocks. This information is referred to as compressed macroblock information. The number of bytes of data in compressed macroblock information in the example of Table II is 128 bytes.


TABLE II
Compressed Macroblock Information
Offset
Bits
Parameter
Description
0x00
63:56
MB_TYPE_ID
Id number specifying type of
macroblock
55:40
mb_qp_delta
QP difference from the
previous macroblock
39
end_of_slice_flag
Flag to indicate the last
macroblock in the slice
38
mb_field_decoding_flag
Flag to indicate adaptive
frame/field macroblock
37:17
Reserved
16
transform_size_8x8_flag
Flag to indicate whether 4 × 4
transform or 8 × 8 transform
was used
15:8
MB_QP
QP Y (quantizer parameter)
for the macroblock
 7:6
Reserved
 5
cond_mb_skip_flag
Flag to indicate a skip
macroblock where there are
no non-zero coefficients
 4
mb_skip_flag
Flag to indicate if the
macroblock will be skipped
or not.
 3:1
Reserved
 0
available
Flag to indicate if the
macroblock is available as a
neighbor to current
macroblock.
0x08
63:38
Reserved
37:36
CodedBlockPatternChroma
Flag to indicate whether
AC/DC coefficients were
coded for chroma blocks
35:32
CodedBlockPatternLuma
Flag to indicate whether
AC/DC coefficients were
coded for luma blocks.
31:27
Reserved
26:0
CBP_27
Bit field to indicate both luma
and chroma coefficients.
0x10
63:56
intra_chroma_pred_mode
Intra chroma prediction
mode.
55:16
Reserved
15:0
PREV_INTRA_MODE_FLAGS
Previous intra mode flags
corresponding to current
macroblock.
0x30
63:56
REF_IDX[1][3]
List 0 and List 1 reference
55:48
REF_IDX[1][2]
index at 8 × 8 level.
47:40
REF_IDX[1][1]
39:32
REF_IDX[1][0]
31:24
REF_IDX[0][3]
23:16
REF_IDX[0][2]
15:8
REF_IDX[0][1]
 7:0
REF_IDX[0][0]
0x88
63:32
MV[1][10]
Motion vectors
31:0
MV[0][10]
0x90
63:32
MV[1][11]
31:0
MV[0][11]
0xA8
63:32
MV[1][14]
31:0
MV[0][14]
0xB0
63:32
MV[1][15]
31:0
MV[0][15]
0xB8
63:56
Reserved
55:48
TOTAL_COEF[14]
Total non zero coefficients of
47:40
TOTAL_COEF[11]
Luma block at 4 × 4 level
39:32
TOTAL_COEF[10]
31:24
TOTAL_COEF[15]
23:16
TOTAL_COEF[13]
15:8
TOTAL_COEF[7]
 7:0
TOTAL_COEF[5]
0xC0
63:56
Reserved
55:48
TOTAL_COEF[22]
Total non zero coefficients of
47:40
TOTAL_COEF[23]
Cb block at 4 × 4 level.
39:32
TOTAL_COEF[21]
31:24
Reserved
23:16
TOTAL_COEF[18]
Total non zero coefficients of
15:8
TOTAL_COEF[19]
Cr block at 4 × 4 level
 7:0
TOTAL_COEF[17]
0xE8
63:56
REF_PIC_ID[1][11]
Reference picture ID
55:48
REF_PIC_ID[0][11]
47:40
REF_PIC_ID[1][10]
39:32
REF_PIC_ID[0][10]
31:24
REF_PIC_ID[1][9]
23:16
REF_PIC_ID[0][9]
15:8
REF_PIC_ID[1][8]
 7:0
REF_PIC_ID[0][8]
0xF0
63:56
REF_PIC_ID[1][15]
55:48
REF_PIC_ID[0][15]
47:40
REF_PIC_ID[1][14]
39:32
REF_PIC_ID[0][14]
0x110
63:32
MVD[1][15]
Motion vector differences
31:0
MVD[0][15]
0x118
63:32
MVD[1][10]
31:0
MVD[0][10]
0x120
63:32
MVD[1][11]
31:0
MVD[0][11]
0x128
63:32
MVD[1][14]
31:0
MVD[0][14]

The video encoder of FIG. 1 also includes an auxiliary buffer (AUX BFR) 125 accessible to the entropy encoder 108 and the DMA engine 80. The entropy encoder 108 preferably copies just the parameters from the full macroblock data set to the AUX BFR 125 that are needed to encode other macroblocks. Thus, the MBDATBUF 121 stores the full macroblock data set, while the AUX BFR 125 stores the compressed macroblock information. The entropy encoder 108 copies the needed portions of the macroblock data set from MBDATBUF 121 by reading those portions and then writing them to AUX BFR 125.

The DMA engine 80 has access to the compressed macroblock information in AUX BFR 125 and then preferably writes the compressed macroblock information to memory 91. Memory 91 preferably is data memory accessible to the host processor 90. In some embodiments, memory 91 is internal to the host processor 90, but may be external to the host processor in other embodiments. The DMA engine 80 writes the compressed macroblock information content from AUX BFR 125 to memory 91 for subsequent use by the entropy encoder 108 in encoding other macroblocks.

FIG. 2 depicts the multi-step process by which the macroblock data set is compressed and saved to external memory 91. The full macroblock data set is stored in memory 91. The portions 123 that are needed to encode other macroblocks are illustrated in cross-hatching. As illustrated, the various portions 123 needed to encode other macroblocks are stored in MBDATBUF 121 in a non-contiguous fashion. The entropy encoder 108 copies those particular portions 123 to the AUX BFR 125 in contiguous storage locations. The DMA engine 80 then copies the entire compressed macroblock information from AUX BFR 125 to another set of contiguous storage locations in memory 91. The DMA engine 80 may write the previously saved compressed macroblock information from memory 91 back to the AUX BFR 125 for use by the entropy encoder.

FIG. 3 illustrates a corresponding method 200. The various actions shown in FIG. 3 can be performed in the order shown or in a different order and two or more of the actions may be performed in parallel, rather than sequentially.

At 202, the method comprises the entropy encoder 108 reading uncompressed, non-contiguous portions from a data set in a first storage. The first storage may be the MDDATBUF 121. The data set preferably describes a macroblock. Further, the portions that are read at 202 preferably are some, but not all, of the data set.

At 204, method 200 includes the entropy encoder 108 writing the portions read at 202 to contiguous locations in a second storage to form compressed macroblock information. The second storage may be the AUX BFR 125.

At 206, the method comprises the DMA engine 80 writing the compressed macroblock information from the second storage (e.g., the AUX BFR 125) to a third storage. The third storage may be memory 91.

Finally, at 208, the method preferably comprises the entropy encoder encoding another macroblock based on the compressed macroblock information from memory 91 that was associated a different macroblock. That is, the compressed macroblock information pertains to a first macroblock and is used to compress a second macroblock.

In some embodiments, the compressed macroblock information used to encode a given macroblock represents one or more macroblocks that surround the given macroblock being encoded. For example, the surrounding macroblocks may be the left, upper, upper-left, and/or upper-right macroblocks.

By compressing the macroblock data set and saving the compressed macroblock information in external memory, a more efficient macroblock transfer process is possible.

The above discussion is meant to be illustrative of the principles and various embodiments of the present invention. Numerous variations and modifications will become apparent to those skilled in the art once the above disclosure is fully appreciated. It is intended that the following claims be interpreted to embrace all such variations and modifications.

Read more
PatSnap Solutions

Great research starts with great data.

Use the most comprehensive innovation intelligence platform to maximise ROI on research.

Learn More

Citation

Patents Cited in This Cited by
Title Current Assignee Application Date Publication Date
Image processing apparatus, control method of the same, computer program, and computer-readable storage medium CANON KABUSHIKI KAISHA 11 June 2003 11 December 2003
Device, system, and method for gathering elements from memory INTEL CORPORATION 31 December 2007 02 July 2009
Method and system of split-streaming direct memory access FALKOWSKI JOHN T,LITTLEFIELD BRUCE G,MECKLAI HUSSEIN K,REINHOLD STANLEY 15 April 2005 19 October 2006
Reducing computational complexity when video encoding uses bi-predictively encoded frames TEXAS INSTRUMENTS INCORPORATED 04 May 2010 11 November 2010
Video encoder and packetizer with improved bandwidth utilization TEXAS INSTRUMENTS INCORPORATED 29 June 2010 29 December 2011
See full citation <>

More Patents & Intellectual Property

PatSnap Solutions

PatSnap solutions are used by R&D teams, legal and IP professionals, those in business intelligence and strategic planning roles and by research staff at academic institutions globally.

PatSnap Solutions
Search & Analyze
The widest range of IP search tools makes getting the right answers and asking the right questions easier than ever. One click analysis extracts meaningful information on competitors and technology trends from IP data.
Business Intelligence
Gain powerful insights into future technology changes, market shifts and competitor strategies.
Workflow
Manage IP-related processes across multiple teams and departments with integrated collaboration and workflow tools.
Contact Sales
Clsoe
US10063871 Saving minimum macroblock data 1 US10063871 Saving minimum macroblock data 2 US10063871 Saving minimum macroblock data 3