IP Library Granted Patent US 9,369,725
Granted Patent B1
US 9,369,725 · App. 13/656,877 · Granted Jun 14, 2016

Method of efficiently implementing a MPEG-4 AVC deblocking filter on an array of parallel processors

Inventor: Brian G. Lewis (Portland, OR)
Assignee: Amazon Technologies, Inc.
H04N19/436H04N19/439
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 9,369,725
App. No.
13/656,877
Granted
Jun 14, 2016
Kind
B1
Abstract

A method for implementing a deblocking filter including the steps of (A) reading pixel values for a plurality of macroblocks of an unfiltered video frame from an input buffer into a working buffer, where the working buffer has dimensions determined by a predefined input region of the deblocking filter and a portion of the working buffer forms a filter output region of the deblocking filter, (B) sequentially processing the pixel values in the working buffer through a plurality of filter processing stages using an array of software-configurable general purpose parallel processors, where each of the plurality of filter processing stages operates on a respective set of the pixel values in the working buffer, and (C) writing filtered pixel values from the filter output region of the working buffer to an output buffer after the plurality of filter processing stages are completed.

Claims (40)

1. A method for implementing a deblocking filter comprising the steps of:

reading pixel values for a plurality of macroblocks of an unfiltered video frame from an input buffer into a plurality of working buffers, wherein each working buffer has dimensions determined by a predefined input region of said deblocking filter and a portion of each working buffer forms a filter output region of said deblocking filter;

processing the pixel values in each of the plurality of working buffers in parallel using an array of software-configurable general purpose parallel processors, wherein for each of the plurality of working buffers:

sequentially processing the pixel values in said working buffer through a plurality of filter processing stages using the array of software-configurable general purpose parallel processors, wherein each of said plurality of filter processing stages computes filtered pixel values for one or more respective stage output regions of each filter processing stage by applying a predefined filter on a respective set of the pixel values in said working buffer, wherein a first filter processing stage of the plurality of filter processing stages computes filtered pixel values for the first stage output region of the first filter processing stage by applying said predefined filter using initial pixel values in said working buffer, wherein (i) a height of the first stage output region is equal to a height of said working buffer, (ii) a left edge of the first stage output region is aligned with a left edge of said filter output region of said working buffer, and (iii) a width of the first stage output region is less than a width of said filter output region of said working buffer; and

writing the filtered pixel values from said filter output region of said working buffer to an output buffer after said plurality of filter processing stages are completed.

2. The method according to claim 1 , wherein for each said working buffer of the plurality of working buffers, sequentially processing the pixel values in said working buffer through the plurality of filter processing stages using the array of software-configurable general purpose parallel processors comprises:

computing filtered pixel values for a second pair of stage output regions of a second filter processing stage by applying said predefined filter using (i) computed pixel values in a stage output region of a previous filter processing stage and (ii) initial pixel values in said working buffer, wherein (i) a left edge of each of the second stage output regions is aligned with a left edge of said filter output region of said working buffer, (ii) a width of the second stage output regions is less than a width of said filter output region of said working buffer, (iii) a lower one of the second stage output regions is located within said filter output region of said working buffer and (iv) an upper one of the second stage output regions is located above said filter output region of said working buffer.

3. The method according to claim 1 , wherein for each said working buffer of the plurality of working buffers, sequentially processing the pixel values in said working buffer through the plurality of filter processing stages using the array of software-configurable general purpose parallel processors comprises:

computing filtered pixel values for a pair of third stage output regions of a third filter processing stage by applying said predefined filter using (i) computed pixel values in a first stage output region of a first previous filter processing stage, (ii) computed pixel values in a second pair of stage output regions of a second previous filter processing stage and (iii) initial pixel values in said working buffer, wherein (i) a right edge of each of the third stage output regions is aligned with a right edge of said filter output region of said working buffer, (ii) a width of the third stage output regions is less than a width of said filter output region of said working buffer, (iii) a lower one of the third stage output regions overlaps a lower edge of said filter output region of said working buffer and (iv) an upper one of the third stage output regions overlaps an upper edge of said filter output region of said working buffer.

4. The method according to claim 1 , wherein for each said working buffer of the plurality of working buffers, sequentially processing the pixel values in said working buffer through the plurality of filter processing stages using the array of software-configurable general purpose parallel processors comprises:

computing filtered pixel values for a pair of fourth stage output regions of a fourth filter processing stage by applying said predefined filter using (i) computed pixel values in a first stage output region of a first previous filter processing stage, (ii) computed pixel values in a pair of second stage output regions of a second previous filter processing stage, (iii) computed pixel values in a pair of third stage output regions of a third previous filter processing stage and (iv) initial pixel values in said working buffer, wherein (i) a left edge of each of the fourth stage output regions is aligned with a left edge of said filter output region of said working buffer, (ii) a width of the fourth stage output regions is less than a width of said filter output region of said working buffer, (iii) a lower one of the fourth stage output regions overlaps a lower edge of said filter output region of said working buffer and (iv) an upper one of the fourth stage output regions overlaps an upper edge of said filter output region of said working buffer.

5. The method according to claim 1 , wherein for each said working buffer of the plurality of working buffers, sequentially processing the pixel values in said working buffer through the plurality of filter processing stages using the array of software-configurable general purpose parallel processors comprises:

computing filtered pixel values for a second pair of stage output regions of a second filter processing stage by applying said predefined filter using (i) computed pixel values in a pair of stage output regions of a previous filter processing stage and (ii) initial pixel values in said working buffer, wherein (i) a right edge of each of the second stage output regions is aligned with a right edge of said filter output region of said working buffer, (ii) a width of the second stage output regions is less than a width of said filter output region of said working buffer, (iii) an upper one of the second stage output regions is located within said filter output region of said working buffer and (iv) a lower one of the second stage output regions is located below said filter output region of said working buffer.

6. The method according to claim 1 , wherein for each said working buffer of the plurality of working buffers, sequentially processing the pixel values in said working buffer through the plurality of filter processing stages using the array of software-configurable general purpose parallel processors comprises:

computing filtered pixel values for a third output region of a third filter processing stage by applying said predefined filter using (i) computed pixel values in a pair of first stage output regions of a first previous filter processing stage and (ii) computed pixel values in an upper one of a pair of second stage output regions of a second previous filter processing stage, wherein (i) a height of the third stage output region is less than a height of said working buffer, (ii) a right edge of the third stage output region is aligned with a right edge of said filter output region of said working buffer, and (iii) a width of the third stage output region is less than a width of said filter output region of said working buffer.

7. The method according to claim 1 , wherein said deblocking filter is MPEG-4 part 10 compliant and said filtered pixel values are computed using an adaptive multi-tap filter applied at right angles to edges being filtered.

8. The method according to claim 1 , wherein:

said plurality of filter processing stages alternate between filtering across vertical edges and filtering across horizontal edges;

in the filter processing stages that filter across vertical edges, all rows of pixels are processed at the same time; and

in the filter processing steps that filter across horizontal edges, all columns of pixels are processed at the same time.

9. An apparatus comprising:

an input buffer storing unfiltered pixel values of a video frame;

an output buffer configured to store filtered pixel values for said video frame; and

an array of software-configurable general purpose parallel processors, each software-configurable general purpose parallel processor processing the unfiltered pixel values in each of a plurality of working buffers in parallel, wherein for each of the plurality of working buffers:

sequentially processing a number of pixel values in a respective working buffer through a plurality of filter processing stages, each of said plurality of filter processing stages computing filtered pixel values for one or more respective stage output regions of each filter processing stage by applying a predefined filter on a respective set of pixels in said working buffer, wherein each of the software-configurable general purpose parallel processors is configured to compute filtered pixel values for a first stage output region of a first filter processing stage by applying said predefined filter using initial pixel values in said working buffer, wherein (i) a height of the first stage output region is equal to a height of said working buffer, (ii) a left edge of the first stage output region is aligned with a left edge of a filter output region of said working buffer, and (iii) a width of the first stage output region is less than a width of said filter output region of said working buffer, and wherein initial pixel values in said working buffer are read from said input buffer prior to performing said plurality of filter processing stages and final filtered values in a predefined filter output region of said working buffer are written to said output buffer after said plurality of filter processing stages are completed.

10. The apparatus according to claim 9 , wherein, for each working buffer of the plurality of working buffers, said array of software-configurable general purpose parallel processors is configured to:

compute filtered pixel values for a pair of second stage output regions of a second filter processing stage by applying said predefined filter using (i) computed pixel values in a stage output region of a previous filter processing stage and (ii) initial pixel values in said working buffer, wherein (i) a left edge of each of the second stage output regions is aligned with a left edge of said filter output region of said working buffer, (ii) a width of each of the second stage output regions is less than a width of said filter output region of said working buffer, (iii) a lower one of the second stage output regions is located within said filter output region of said working buffer and (iv) an upper one of the second stage output regions is located above said filter output region of said working buffer.

11. The apparatus according to claim 9 , wherein, for each working buffer of the plurality of working buffers, said array of software-configurable general purpose parallel processors is configured to:

compute filtered pixel values for a pair of third stage output regions of a third filter processing stage by applying said predefined filter using (i) computed pixel values in a first stage output region of a first previous filter processing stage, (ii) computed pixel values in a second pair of stage output regions of a second previous filter processing stage and (iii) initial pixel values in said working buffer, wherein (i) a right edge of each of the third stage output regions is aligned with a right edge of said filter output region of said working buffer, (ii) a width of the third stage output regions is less than a width of said filter output region of said working buffer, (iii) a lower one of the third stage output regions overlaps a lower edge of said filter output region of said working buffer and (iv) an upper one of the third stage output regions overlaps an upper edge of said filter output region of said working buffer.

12. The apparatus according to claim 9 , wherein, for each working buffer of the plurality of working buffers, said array of software-configurable general purpose parallel processors is configured to:

compute filtered pixel values for a pair of fourth stage output regions of a fourth filter processing stage by applying said predefined filter using (i) computed pixel values in a first stage output region of a first previous filter processing stage, (ii) computed pixel values in a pair of second stage output regions of a second previous filter processing stage, (iii) computed pixel values in a third pair of stage output regions of a third previous filter processing stage and (iv) initial pixel values in said working buffer, wherein (i) a left edge of each of the fourth stage output regions is aligned with a left edge of said filter output region of said working buffer, (ii) a width of the fourth stage output regions is less than a width of said filter output region of said working buffer, (iii) a lower one of the fourth stage output regions overlaps a lower edge of said filter output region of said working buffer and (iv) an upper one of the fourth stage output regions overlaps an upper edge of said filter output region of said working buffer.

13. The apparatus according to claim 9 , wherein, for each working buffer of the plurality of working buffers, said array of software-configurable general purpose parallel processors is configured to:

compute filtered pixel values for a pair of second stage output regions of a second filter processing stage by applying said predefined filter using (i) computed pixel values in a pair of second stage output regions of a previous filter processing stage and (ii) initial pixel values in said working buffer, wherein (i) a right edge of each of the second stage output regions is aligned with a right edge of said filter output region of said working buffer, (ii) a width of the second stage output regions is less than a width of said filter output region of said working buffer, (iii) an upper one of the second stage output regions is located within said filter output region of said working buffer and (iv) a lower one of the second stage output regions is located below said filter output region of said working buffer.

14. The apparatus according to claim 9 , wherein, for each working buffer of the plurality of working buffers, said array of software-configurable general purpose parallel processors is configured to:

compute filtered pixel values for a third stage output region of a third filter processing stage by applying said predefined filter using (i) computed pixel values in a pair of first stage output regions of a first previous filter processing stage and (ii) computed pixel values in an upper one of a pair of second stage output regions of a second previous filter processing stage, wherein (i) a height of the third stage output region is less than a height of said working buffer, (ii) a right edge of the third stage output region is aligned with a right edge of said filter output region of said working buffer, and (iii) a width of the third stage output region is less than a width of said filter output region of said working buffer.

15. The apparatus according to claim 9 , wherein said plurality of filter processing stages form a MPEG-4 part 10 compliant deblocking filter and said filtered pixel values are computed using an adaptive multi-tap filter applied at right angles to edges being filtered.

16. The apparatus according to claim 9 , wherein:

said plurality of filter processing stages alternate between filtering across vertical edges and filtering across horizontal edges;

in each of the filter processing stages that filter across vertical edges, all rows of pixels are processed at the same time by one or more of said array of software-configurable general purpose parallel processors; and

in each of the filter processing stages that filter across horizontal edges, all columns of pixels are processed at the same time by one or more of said array of software-configurable general purpose parallel processors.

Assignments (2)
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 →
Continuity (1)
Continuation 12342229 · Dec 23, 2008