# US 2019/0246117 A1 · 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 2019/0246117 A1
- Document ID: US20190246117A1
- Status: Published application
- Kind: A1
- Application number: 16/266,664
- Filed: 2019-02-04
- Published: 2019-08-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/US20190246117A1

## 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.

### 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 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 6 (depends on 1)

The apparatus of claim 1, 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 7 (depends on 1)

The apparatus of claim 1, 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 8 (depends on 7)

The apparatus of claim 7, 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 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 10

An apparatus for decoding an encoded data stream, the apparatus comprising a decoder comprising:
a header reading circuit operable to, when receiving an encoded data stream including a plurality of independent segments each of which can be decoded independently and a header containing information indicative of the location of each of the plurality of independent segments within the data stream, read the header to identify the locations of the plurality of independent segments; and
a decoding circuit operable to decode the identified plurality of independent segments.

### Claim 11 (depends on 10)

The apparatus of claim 10, wherein the decoder is configured to allocate the plurality of independent segments between a plurality of cores of a multi-core decoder so that the independent segments can be decoded in parallel.

### Claim 12

A method for 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.

### Claim 13 (depends on 12)

The method of claim 12, 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 14 (depends on 12)

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

### Claim 15 (depends on 12)

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

### Claim 16 (depends on 12)

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

### Claim 17 (depends on 12)

The method of claim 12, 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.

### Claim 18 (depends on 12)

The method of claim 12, 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.

### Claim 19 (depends on 18)

The method of claim 18, 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 20

A method for decoding an encoded data stream that includes a plurality of independent segments each of which can be decoded independently, the method comprising:
reading from a header associated with the encoded data stream, information indicative of the location of one of the independent segments within the data stream;
using the read header information to identify the location of the independent segment within the data stream;
reading the identified segment from the identified location in the data stream; and
decoding the identified independent segment.

### Claim 21 (depends on 20)

The method of claim 20, wherein the decoding comprises allocating the identified independent segments to one or a plurality of processing cores and decoding the independent segments in parallel.

### Claim 22

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.
