# US 10,771,792 B2 · Encoding data arrays

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 10,771,792 B2
- Document ID: US10771792B2
- Status: Granted
- Kind: B2
- Application number: 16/266,664
- Filed: 2019-02-04
- Published: 2019-08-08
- Granted: 2020-09-08
- Earliest claimed: 2018-02-06
- Assignees: Arm Limited
- Applicants: Arm Limited
- Inventors: Sven Ola Johannes Hugosson; Tomas Fredrik Edso; Dominic Hugo Symes
- Web page: https://patentgrep.com/patent/US10771792B2

## CPC

- H04N 19/174: the region being a slice, e.g. a line of blocks or a group of blocks
- H04N 19/436: using parallelised computational arrangements
- H03M 7/30: Compression (speech analysis-synthesis for redundancy reduction G10L19/00; for image communication H04N); Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M 7/3064: {Segmenting}
- H03M 7/6023: {Parallelization}
- H04N 19/119: Adaptive subdivision aspects, e.g. subdivision of a picture into rectangular or non-rectangular coding blocks
- H04N 19/152: by measuring the fullness of the transmission buffer
- H04N 19/46: Embedding additional information in the video signal during the compression process (H04N19/517, H04N19/68, H04N19/70 take precedence)
- H04N: PICTORIAL COMMUNICATION, e.g. TELEVISION
- H03M: CODING; DECODING; CODE CONVERSION IN GENERAL (using fluidic means F15C4/00; optical analogue/digital converters G02F7/00; coding, decoding or code conversion, specially adapted for particular applications, see the relevant subclasses, e.g. G01D, G01R, G06F, G06T, G09G, G10L, G11B, G11C, H04B, H04L, H04M, H04N; ciphering or deciphering for cryptography or other purposes involving the need for secrecy G09C)

## Abstract

When encoding an array of data elements, or a stream of such arrays, using an encoder comprising encoding circuitry operable to encode the array(s) of data elements as a plurality of independent segments, wherein each independent segment can be decoded independently; a header is generated for output with an encoded data stream including the plurality of independent segments wherein the header contains information indicative of the location of each of the plurality of independent segments within the encoded data stream. When an encoded data stream associated with such a header is to be decoded, a decoder may thus read the header to identify the location of the independent segment within the data stream and then read and decode the identified segments from the identified location(s) in the data stream.

## Claims

### Claim 1

An apparatus for encoding an array of data elements, or a stream of such arrays, the apparatus comprising an encoder comprising:
an encoding circuit operable to, when encoding an array of data elements, or a stream of such arrays, encode the array(s) of data elements as a plurality of independent segments, wherein each independent segment can be decoded independently;
an output circuit operable to output an encoded data stream including the plurality of independent segments; and
a header generating circuit operable to generate a header for output with an encoded data stream, the header containing information indicative of the location of each of the plurality of independent segments within the encoded data stream,
wherein the encoding circuit is configured to, when encoding a data array, or stream of data arrays:
allocate an output buffer for the encoded data stream;
pass a plurality of data element sets associated with an independent segment in parallel to a plurality of processing cores;
pass the encoded data from each processing core to an internal buffer;
when all of the encoded data for an independent segment is present in the internal buffer, stitch the encoded data for that independent segment together in order; and
write out the stitched independent segment to the output buffer.

### Claim 2 (depends on 1)

The apparatus of claim 1, wherein the encoded data stream comprises a plurality of markers defining the start of each of the independent segments; and wherein the header contains information indicative of the locations of the plurality of markers within the data stream.

### Claim 3 (depends on 1)

The apparatus of claim 1, wherein the header comprises a plurality of pointers, each pointer pointing to a location of an independent segment within the data stream.

### Claim 4 (depends on 1)

The apparatus of claim 1, wherein the encoding circuit is configured to align each of the independent segments to a data unit boundary in the encoded data stream.

### Claim 5 (depends on 1)

The apparatus of claim 1, wherein the array of data elements represents an image, wherein the encoding is performed according to a JPEG encoding scheme.

### Claim 6

An apparatus for encoding an array of data elements, or a stream of such arrays, the apparatus comprising an encoder comprising:
an encoding circuit operable to, when encoding an array of data elements, or a stream of such arrays, encode the array(s) of data elements as a plurality of independent segments, wherein each independent segment can be decoded independently;
an output circuit operable to output an encoded data stream including the plurality of independent segments; and
a header generating circuit operable to generate a header for output with an encoded data stream, the header containing information indicative of the location of each of the plurality of independent segments within the encoded data stream,
wherein the encoding circuit is configured to, when encoding a data array, or stream of data arrays:
divide the data array(s) into a plurality of independent segments;
allocate a respective output buffer, or portion of an output buffer, for each of the plurality of independent segments; and
write the encoded data for each independent segment to the respective allocated output buffer or buffer portion to generate the data stream for output.

### Claim 7 (depends on 6)

The apparatus of claim 6, wherein the encoding circuit is configured to encode the array(s) of data elements in parallel and/or wherein the encoder comprises a multi-core processor including a plurality of processing cores for encoding the array(s) of data elements in parallel.

### Claim 8 (depends on 6)

The apparatus of claim 6, wherein the encoding circuit is configured to, when it is determined that there is a risk of the data for an independent segment overflowing its respective allocated output buffer or buffer portion, start to discard information during the encoding of the data for that independent segment.

### Claim 9 (depends on 6)

The apparatus of claim 6, wherein the header comprises a plurality of pointers, each pointer pointing to a location of an independent segment within the data stream.

### Claim 10 (depends on 6)

The apparatus of claim 6, wherein the encoding circuit is configured to align each of the independent segments to a data unit boundary in the encoded data stream.

### Claim 11

A method for encoding an array of data elements, or a stream of such arrays, the method comprising a step of:
encoding the array(s) as a plurality of independent segments, wherein each independent segment can be decoded independently,
wherein the encoding comprises steps of:
allocating an output buffer for the encoded data stream;
passing a plurality of data elements associated with an independent segment in parallel to a plurality of processing cores;
passing the encoded data from each processing core to an internal buffer;
when all of the encoded data for an independent segment is present in the internal buffer, stitching the encoded data for that independent segment together in order; and
writing the stitched independent segment to the output buffer;
the method further comprising steps of:
outputting an encoded data stream including the plurality of independent segments;
generating a header for output with the data stream, the header containing information indicative of the location of each of the plurality of independent segments within the data stream; and
outputting the header with the encoded data stream.

### Claim 12 (depends on 11)

The method of claim 11, comprising inserting into the encoded data stream a plurality of markers defining the start of each of the independent segments, wherein the header contains information indicative of the locations of the plurality of markers within the data stream.

### Claim 13 (depends on 11)

The method of claim 11, wherein the header comprises a plurality of pointers, each pointer pointing to a location of an independent segment within the data stream.

### Claim 14 (depends on 11)

The method of claim 11, comprising a step of aligning each of the independent segments to a data unit boundary in the encoded data stream.

### Claim 15

A method for encoding an array of data elements, or a stream of such arrays, the method comprising a step of:
encoding the array(s) as a plurality of independent segments, wherein each independent segment can be decoded independently,
wherein the encoding comprises steps of:
dividing the data array(s) into a plurality of independent segments;
allocating a respective output buffer, or portion of an output buffer, for each of the plurality of independent segments; and
writing the encoded data for each independent segment to the respective allocated output buffer or buffer portion to generate the data stream for output,
the method further comprising steps of:
outputting an encoded data stream including the plurality of independent segments;
generating a header for output with the data stream, the header containing information indicative of the location of each of the plurality of independent segments within the data stream; and
outputting the header with the encoded data stream.

### Claim 16 (depends on 15)

The method of claim 15, comprising encoding the array(s) in parallel.

### Claim 17 (depends on 15)

The method of claim 15, further comprising determining whether there is a risk of the data for an independent segment overflowing its respective allocated output buffer or buffer portion and, when it is determined that there is a risk of the data for an independent segment overflowing its respective allocated output buffer or buffer portion, starting to discard information during the encoding of the data for that independent segment.

### Claim 18 (depends on 15)

The method of claim 15, wherein the header comprises a plurality of pointers, each pointer pointing to a location of an independent segment within the data stream.

### Claim 19 (depends on 15)

The method of claim 15, comprising a step of aligning each of the independent segments to a data unit boundary in the encoded data stream.

### Claim 20

A non-transitory computer readable storage medium storing software code that when executed on a data processor performs a method of encoding an array of data elements, or a stream of such arrays, the method comprising steps of:
encoding the array(s) as a plurality of independent segments, wherein each independent segment can be decoded independently;
outputting an encoded data stream including the plurality of independent segments;
generating a header for output with the data stream, the header containing information indicative of the location of each of the plurality of independent segments within the data stream; and
outputting the header with the encoded data stream,
(i) wherein the encoding comprises steps of:
allocating an output buffer for the encoded data stream;
passing a plurality of data elements associated with an independent segment in parallel to a plurality of processing cores;
passing the encoded data from each processing core to an internal buffer;
when all of the encoded data for an independent segment is present in the internal buffer, stitching the encoded data for that independent segment together in order; and
writing the stitched independent segment to the output buffer; or
(ii) wherein the encoding comprises steps of:
dividing the data array(s) into a plurality of independent segments;
allocating a respective output buffer, or portion of an output buffer, for each of the plurality of independent segments; and
writing the encoded data for each independent segment to the respective allocated output buffer or buffer portion to generate the data stream for output.
