IP Library Granted Patent US 8,121,197
Granted Patent B2
US 8,121,197 · App. 12/058,636 · Granted Feb 21, 2012

Video encoding and decoding using parallel processors

Assignee: Elemental Technologies, Inc.
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 8,121,197
App. No.
12/058,636
Granted
Feb 21, 2012
Kind
B2
Abstract

A method is disclosed for the decoding and encoding of a block-based video bit-stream such as MPEG2, H.264-AVC, VC1, or VP6 using a system containing one or more high speed sequential processors, a homogenous array of software configurable general purpose parallel processors, and a high speed memory system to transfer data between processors or processor sets. This disclosure includes a method for load balancing between the two sets of processors.

Claims (83)

1. A method for decompressing a variable length inter-block dependent compressed video input data stream wherein the input data stream comprises macroblocks, the method comprising:

in a first main process using a first processing array:

decompressing a first video frame of the input data stream;

producing a first independent variable length coefficient data set responsive to the first video frame data;

producing a first fixed-size metadata data set responsive to the first video frame data; and

storing the first independent variable length coefficient data set and the first fixed-size metadata data set in memory; and

in a second main process using a second processing array that is different than the first processing array, executing substantially in parallel with the first main process:

decompressing the macroblocks of the input data stream by decoding the stored first independent variable length coefficient data set using the stored first fixed-size metadata data set and using at least one previously-stored reference frame, so as to generate a desired output video frame;

wherein the method further comprises:

commencing execution of the first main process on a second frame of input data as soon as said storing of the first video frame data is completed, so that the first main process is decompressing one frame ahead of the second main process;

wherein the first fixed-size metadata data set contains properties of each macroblock that instruct the second processing array for decoding each macroblock.

2. The method according to claim 1 wherein the first processing array comprises one or more sequential processors.

3. The method according to claim 2 wherein the second processing array comprises a plurality of multi-processors.

4. The method according to claim 2 wherein the second main process decodes substantially all of the macroblocks of the current frame concurrently.

5. The method according to claim 2 wherein said storing the first independent variable length coefficient data set and the first fixed-size metadata data set includes storing in a shared memory space accessible to the second processing array.

6. The method according to claim 1 and further comprising:

encoding frequency coefficient data corresponding to the first independent variable length coefficient data set using a selected run length coding; and wherein

the frequency coefficient data represents the residual data generated from predicting a next macroblock of data.

7. The method according to claim 1 wherein the properties of each macroblock (stored in the metadata set) that instruct the second processing array for decoding each macroblock include at least a coded block pattern, prediction modes, a quantization parameter, and motion vectors.

8. A method for decompressing a variable length inter-block dependant encoded video input data stream wherein the input data stream comprises macroblocks, the method comprising:

in a first main process using a first processing array:

decompressing a first video frame of the input data stream;

producing a first macroblock coefficient data set responsive to the first video frame data;

producing a first macroblock metadata data set responsive to the first video frame data; and

storing the first macroblock coefficient data set and the first macroblock metadata data set; and

wherein said first main process includes:

providing an array of sequential processors;

decompressing a slice of the first video frame of the input data stream in a selected one of the sequential processors of the sequential processor array so as to form the corresponding first macroblock coefficient data set; and

assigning slices to an available processor of the sequential processor array according to a preset arbitration scheme until all slices of the first video frame are decoded; and

in a second main process using a second processing array that is different than the first processing array, executing substantially in parallel with the first main process:

decompressing the macroblocks of a previous frame of the same input data stream.

9. The method according to claim 8 and further comprising, immediately after storing the first macroblock coefficient data set and the first macroblock metadata data set, beginning decompressing a second video frame of the input data stream.

10. The method according to claim 8 including:

decoding more than one slice of the first video frame substantially in parallel, each slice processed in a selected one of a plurality of sequential processors of the second processing array.

11. The method according to claim 8 including:

storing each slice of the frame sequentially into a slice data buffer; and

creating an index table to indicate a beginning address in the slice data buffer for each slice of the first video frame for use by the corresponding assigned sequential processor.

12. The method according to claim 11 including storing a marker at the end of each slice in the slice data buffer to tell the processor that there is no more data in the slice.

13. The method according to claim 11 wherein the macroblock metadata for each macroblock includes at least one of

(a) Macroblock type (intra or inter, field information, partitions),

(b) Motion vectors for the macroblock and all its partitions, and

(c) Quantization parameter (how much is the macroblock quantized).

14. The method according to claim 11 wherein decompressing the macroblocks in the second main process includes:

providing an array of parallel processors all coupled to a common memory; and

decompressing a plurality of the macroblocks in parallel by decompressing each macroblock of the plurality in a respective one of the array of parallel processors.

15. The method according to claim 14 wherein the parallel processor array comprises a plurality of Parallel SIMD Multi-processors.

16. The method according to claim 14 wherein the parallel processor array comprises a stream processor having internal shared memory.

17. A method of operation of a two-phase CODEC for processing video data, the method comprising the steps of:

providing a sequential processor array (SPA) comprising at least one sequential processor and arranged to receive a video data input stream;

providing a parallel processor array (PPA) comprising a plurality of parallel multi-processors;

providing a data bus interconnecting the SPA and the PPA;

receiving a compressed video data input stream;

analyzing a current frame of the compressed video data input stream;

estimating a first decode time for the current frame if an initial Variable Length Coding (VLC) decode of the current frame were conducted in the SPA, followed by decoding macroblocks in the PPA;

estimating a second decode time for the current frame if the compressed video input data stream were transferred to the PPA for both initial VLC decode and decoding the macroblocks in the PPA; and

comparing the first and second decode times to select the faster process for the current frame;

wherein said estimating a first decode time for the current frame includes calculating a theoretical decode time as Tvs=B*Ks/Cts, where

B=approximate bits per frame of the video data input stream,

Ks=approximate SPA processor clocks per bit for the two-phase CODEC, and

Cts=available clock rate per array of SPA processors=Cs*MIN(Ns, # slices in the videoframe), where

Cs=clock rate of one of the processors in either the SPA and PPA (assume all have the same clock rate) and

Ns=# of processors for the SPA.

18. A method of operation of a two-phase CODEC for processing video data, the method comprising the steps of:

providing a sequential processor array (SPA) comprising at least one sequential processor and arranged to receive a video data input stream;

providing a parallel processor array (PPA) comprising a plurality of parallel multi-processors;

providing a data bus interconnecting the SPA and the PPA;

receiving a compressed video data input stream;

analyzing a current frame of the compressed video data input stream;

estimating a first decode time for the current frame if an initial Variable Length Coding (VLC) decode of the current frame were conducted in the SPA, followed by decoding macroblocks in the PPA;

estimating a second decode time for the current frame if the compressed video data input stream were transferred to the PPA for both initial VLC decode and decoding the macroblocks in the PPA; and then

comparing the first and second decode times to select the faster process for the current frame;

wherein said estimating the second decode time for the current frame includes calculating a theoretical decode time in the PPA as Tvp=B*Kp/Ctp, where

B=approximate bits per frame of the compressed video data input stream,

Kp=PPA processor clocks per bit for a given system [found experimentally or by calibration, and may be different depending on I, P or B frames], and

Ctp=available clock rate per array of PPA processors=Cp*MIN(Np, # slices in the video), where Cp=clock rate of one of the processors in the PPA (assume all have the same clock rate).

19. The method according to claim 17 and further including transferring a frame of data to the PPA for both initial VLC decode and decoding the recovered macroblocks, responsive to the comparing the first and second decode times to select the faster process for the current frame.

20. The method according to claim 17 and further including repeating said comparison step on a frame-by-frame basis to optimize load balancing as between the PPA and the SPA.

21. The method according to claim 17 and further including repeating said comparison step on a periodic basis to optimize load balancing as between the PPA and the SPA.

22. The method according to claim 17 and further including a step of estimating a cost for transferring a frame of data to the PPA for both initial VLC decode and decoding the recovered macroblocks.

23. The method according to claim 18 and further including transferring a frame of data to the PPA for both initial VLC decode and decoding the recovered macroblocks, responsive to the comparing the first and second decode times to select the faster process for the current frame.

24. The method according to claim 18 and further including repeating said comparison step on a frame-by-frame basis to optimize load balancing as between the PPA and the SPA.

25. The method according to claim 18 and further including repeating said comparison step on a periodic basis to optimize load balancing as between the PPA and the SPA.

26. The method according to claim 18 and further including a step of estimating a cost for transferring a frame of data to the PPA for both initial VLC decode and decoding the recovered macroblocks.

Assignments (3)
BILL OF SALE Recorded Jan 12, 2016
From: ELEMENTAL TECHNOLOGIES LLC
To: AMAZON TECHNOLOGIES, INC.
Reel/Frame 037486/0985 →
CERTIFICATE OF CONVERSION Recorded Jan 12, 2016
From: ELEMENTAL TECHNOLOGIES, INC.
To: ELEMENTAL TECHNOLOGIES LLC
Reel/Frame 037486/0995 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 28, 2008
From: ROSENZWEIG, JESSE J.; LEWIS, BRIAN GREGORY
To: ELEMENTAL TECHNOLOGIES, INC.
Reel/Frame 020722/0297 →
Continuity (2)
Provisional Application 61002972 · Nov 13, 2007
Related Publication 20090125538A1 · May 14, 2009