IP Library Granted Patent US 8,824,553
Granted Patent B2
US 8,824,553 · App. 10/713,807 · Granted Sep 2, 2014

Video compression method

Inventors: Eric Ameres (Cohoes, NY); James Bankoski (Wynantskill, NY); Scott Lavarnway (Chestertown, NY); Yaowu Xu (Clifton Park, NY); Dan Miller (New York, NY); Adrian Grange (Cambridge, GB); Paul Wilkins (Cambridge, GB)
Assignee: Google Inc.
H04N19/00066H04N19/0063H04N19/00266H04N19/00696H04N19/00121H04N19/002H04N19/00151H04N19/00193H04N19/00109H04N19/00206H04N19/00054H04N19/00284H04N19/00157
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,824,553
App. No.
10/713,807
Granted
Sep 2, 2014
Kind
B2
Abstract

A method of compressing video data having at least one frame having at least one block and each block having an array of pixels is provided. The method transforms the pixels of each block into coefficients and creates an optimal transmission order of the coefficients. The method also optimizes the speed of processing compressed video data by partitioning the data bitstream and coding each partition independently. The method also predicts fractional pixel motion by selecting an interpolation method for each given plurality or block of pixels depending upon at least one metric related to each given block and varies the method from block to block. The method also enhances error recovery for a current frame using a frame prior to the frame immediately before the current frame as the only reference frame for lessening quality loss during data transmission. Enhanced motion vector coding is also provided.

Claims (113)

1. A method of compressing a current block of pixels of a current frame of video data with respect to a reference frame, the method comprising:

examining a plurality of candidate motion vectors, wherein a first candidate motion vector from the plurality of candidate motion vectors corresponds to a first prior-coded block from a predetermined set of prior-coded blocks in the current frame, and a second candidate motion vector from the plurality of candidate motion vectors corresponds to a second prior-coded block from the predetermined set of prior-coded blocks in the current frame;

determining whether the first candidate motion vector from the plurality of candidate motion vectors is coded with respect to the same reference frame as the current block and has a non-zero value, wherein all other blocks of different reference frames are ignored;

selecting the first candidate motion vector as a first reference motion vector on a condition that the first candidate motion vector is coded with respect to the reference frame and has a non-zero value;

determining whether the second candidate motion vector from the plurality of candidate motion vectors is coded with respect to the same reference frame as the current block and has a non-zero value, wherein all other blocks of different reference frames are ignored;

selecting the second candidate motion vector as a second reference motion vector on a condition that the second candidate motion vector is coded with respect to the reference frame, differs from the first reference motion vector, and has a non-zero value; and

determining whether to use the first reference motion vector or the second reference motion vector for coding the current block.

2. The method of claim 1 , wherein the predetermined set of prior-coded blocks is twelve neighboring prior-coded blocks of the current block.

3. The method of claim 1 , further comprising:

identifying a selected coding mode for the current block from a plurality of coding modes;

encoding the selected coding mode for the current block; and

selectively encoding a motion vector for the current block based on the selected coding mode.

4. The method of claim 3 , wherein the plurality of coding modes includes:

a first coding mode indicative of coding the current block using no motion vector;

a second coding mode indicative of coding the current block using a new motion vector calculated based on a difference between the current block and a reference block in the reference frame;

a third coding mode indicative of coding the current block using the first reference motion vector; and

a fourth coding mode indicative of coding the current block using the second reference motion vector.

5. The method of claim 4 , wherein selectively encoding the motion vector comprises:

identifying the second coding mode as the selected coding mode; and

encoding the new motion vector for the current block.

6. The method of claim of claim 5 , further comprising:

calculating the new motion vector for the current block.

7. The method of claim 6 , wherein encoding the new motion vector for the current block comprises:

differentially encoding the new motion vector for the current block from a motion vector of a neighboring block; or

encoding the new motion vector directly.

8. A method of encoding a current block in a current frame of video data, the method comprising:

calculating a new motion vector for the current block with respect to a reference frame;

selecting a reference motion vector from a predetermined set of prior-coded blocks in the current frame, at least some of the prior-coded blocks being associated with a candidate motion vector from a plurality of candidate motion vectors, wherein selecting the reference motion vector includes:

determining whether a first candidate motion vector from the plurality of candidate motion vectors is coded with respect to the same reference frame as the current block and has a non-zero value, wherein all other blocks of different reference frames are ignored; and

selecting the first candidate motion vector as the reference motion vector on a condition that the first candidate motion vector is coded with respect to the reference frame and has a non-zero value, wherein the reference motion vector includes a first reference motion vector and a second reference motion vector, and wherein the first reference motion vector and the second reference motion vector are coded with respect to the same reference frame as the current block and have non-zero values, and wherein the second reference motion vector has a different value than the first reference motion vector, wherein all other blocks of different reference frames are ignored;

identifying a selected coding mode from a plurality of coding modes based on comparing the new motion vector and the reference motion vector; and

encoding the selected coding mode for the current block.

9. The method of claim 8 , wherein calculating the new motion vector comprises:

finding a best matching block from the reference frame that best matches the current block; and

calculating the new motion vector based on a difference between a row and a column of the current block and a row and a column of the best matching block.

10. The method of claim 8 , wherein the plurality of coding modes includes:

a first coding mode indicative of coding the current block using no motion vector;

a second coding mode indicative of coding the current block using the new motion vector; and

a third coding mode indicative of coding the current block using the reference motion vector.

11. The method of claim 10 , further comprising:

selectively encoding a motion vector for the current block based on the selected coding mode, wherein selectively encoding the motion vector includes:

identifying the second coding mode as the selected coding mode and encoding the new motion vector for the current block; or

identifying the first coding mode or the third coding mode as the selected coding mode and encoding no motion vector for the current block.

12. The method of claim 11 , wherein encoding the new motion vector for the current block includes:

differentially encoding the new motion vector for the current block from a motion vector of a neighboring block; or

encoding the new motion vector directly.

13. The method of claim 8 , wherein identifying the selected coding mode includes:

identifying a third coding mode as the selected coding mode on a condition that the new motion vector and the reference motion vector are the same, wherein the third coding mode is indicative of coding the current block using the reference motion vector.

14. A method for decoding compressed video information including a current frame, the current frame including a plurality of bocks, the plurality of blocks including a current block, the method comprising:

reading a coding mode for the current block from the video information, wherein the current block is coded with respect to a reference frame;

identifying a reference motion vector based on the coding mode, wherein the reference motion vector includes a first reference motion vector and a second reference motion vector, and wherein identifying the reference motion vector includes:

determining whether to select the reference motion vector from a predetermined set of prior-coded blocks in the current frame based on the coding mode, wherein selecting the reference motion vector from the predetermined set of prior-coded blocks includes:

examining a plurality of candidate motion vectors, wherein a first candidate motion vector from the plurality of candidate motion vectors corresponds to a first prior-coded block from the predetermined set of prior-coded blocks in the current frame, and a second candidate motion vector from the plurality of candidate motion vectors corresponds to a second prior-coded block from the predetermined set of prior-coded blocks in the current frame,

determining whether the first candidate motion vector from the plurality of candidate motion vectors is coded with respect to the same reference frame as the current block and has a non-zero value, wherein all other blocks of different reference frames are ignored,

selecting the first candidate motion vector as the first reference motion vector on a condition that the first candidate motion vector is coded with respect to the reference frame and has a non-zero value,

determining whether the second candidate motion vector is coded with respect to the same reference frame as the current block, has a non-zero value, and has a different value than the first reference motion vector, wherein all other blocks of different reference frames are ignored and

selecting the second candidate motion vector as the second reference motion vector on a condition that the second candidate motion vector is coded with respect to the reference frame, has a non-zero value, and has a different value than the first reference motion vector; and

decoding the current block using the reference motion vector.

15. The method of claim 14 , wherein the predetermined set of prior-coded blocks is twelve neighboring prior-coded blocks of the current block.

16. The method of claim 14 , wherein reading the coding mode includes reading one of a plurality of coding modes that includes:

a first coding mode indicative of coding the current block using no motion vector;

a second coding mode indicative of coding the current block using a new motion vector calculated based on a difference between the current block and a reference block in the reference frame; and

a third coding mode indicative of coding the current block using the reference motion vector.

17. The method of claim 16 , wherein the coding mode is the third coding mode and identifying the reference motion vector includes selecting the reference motion vector from the predetermined set of prior-coded blocks.

18. The method of claim 14 , further comprising:

on a condition that the coding mode indicates that the video information includes an encoded motion vector for the current block generating a decoded motion vector by decoding the encoded motion vector; and

decoding the current block using the decoded motion vector.

19. The method of claim 18 , wherein the video information includes the encoded motion vector and decoding the encoded motion vector includes:

differentially decoding the encoded motion vector using a motion vector of a neighboring block; or

decoding the encoded motion vector directly.

20. A method of compressing a current block of pixels of a current frame of video data with respect to a reference frame, the method comprising:

examining a plurality of candidate motion vectors, wherein a first candidate motion vector from the plurality of candidate motion vectors corresponds to a first prior-coded block from a set of prior-coded blocks of the current frame, and a second candidate motion vector from the plurality of candidate motion vectors corresponds to a second prior-coded block from the predetermined set of prior-coded blocks in the current frame;

determining whether the first candidate motion vector from the plurality of candidate motion vectors is coded with respect to the same reference frame as the current block and has a non-zero value, wherein all other blocks of different reference frames are ignored;

selecting the first candidate motion vector from the plurality of candidate motion vectors on a condition that the first candidate motion vector is coded with respect to the reference frame and has a non-zero value;

determining whether the second candidate motion vector from the plurality of candidate motion vectors is coded with respect to the same reference frame as the current block, has a non-zero value, and has a different value than the first candidate motion vector, wherein all other blocks of different reference frames are ignored;

selecting the second candidate motion vector from the plurality of candidate motion vectors on a condition that the second candidate motion vector is coded with respect to the reference frame, has a non-zero value, and has a different value than the first candidate motion vector;

calculating a new motion vector for the current block based on a difference between the current block and a reference block in the reference frame;

identifying a selected coding mode from a plurality of coding modes based on the first candidate motion vector or the second candidate motion vector, wherein the plurality of coding modes includes:

a first coding mode indicative of coding the current block using no motion vector;

a second coding mode indicative of coding the current block using the new motion vector;

a third coding mode indicative of coding the current block using the first candidate motion vector; and

a fourth coding mode indicative of coding the current block using the second candidate motion vector; and

encoding the selected coding mode for the current block.

21. The method of claim 20 , wherein the set of prior-coded blocks is twelve neighboring prior-coded blocks of the current block.

22. The method of claim 20 , further comprising:

selectively encoding a motion vector for the current block based on the selected coding mode.

23. The method of claim 22 , wherein selectively encoding the motion vector comprises:

encoding the new motion vector for the current block on a condition that the second coding mode is the selected coding mode; or

encoding no motion vector for the current block on a condition that the first coding mode, the third coding mode, or the fourth coding mode is the selected coding mode.

24. The method of claim 23 , wherein encoding the new motion vector for the current block comprises:

encoding the new motion vector directly.

25. The method of claim 23 , wherein encoding the new motion vector for the current block comprises:

differentially encoding the new motion vector for the current block using a motion vector of a neighboring block.

26. The method of claim 25 , wherein the neighboring block is one of a block immediately to the left of the current block or a block immediately above the current block.

27. The method of claim 23 , wherein encoding the new motion vector comprises:

determining a compound vector from a motion vector of a block immediately to the left of the current block and a motion vector of a block immediately above the current block; and

differentially encoding the new motion vector for the current block using the compound motion vector.

28. The method of claim 27 , wherein the motion vector of the block immediately to the left of the current block and the motion vector of the block immediately above the current block each have an x-component and a y-component and wherein determining the compound vector comprises:

calculating an average of the x-component for the motion vector of the block immediately to the left of the current block and the x-component of the motion vector of the block immediately above the current block; and

calculating an average of the y-component for the motion vector of the block immediately to the left of the current block and the y-component of the motion vector of the block immediately above the current block; wherein the compound vector is equal to the calculated averages of the x-components and the y-components.

29. The method of claim 20 , wherein calculating the new motion vector for the current block comprises:

finding a best matching block from the reference frame that best matches the current block; and

determining a difference between a row and a column of the current block and a row and a column of the best matching block.

30. The method of claim 20 , further comprising:

determining whether the new motion vector is equal to the first candidate motion vector or the second candidate motion vector.

31. The method of claim 30 , wherein selecting the coding mode further comprises:

selecting the coding mode from the plurality of coding modes based on the determination that the new motion vector equals the first candidate motion vector or the second candidate motion vector.

32. The method of claim 4 , wherein selectively encoding the motion vector comprises:

identifying the first coding mode, the third coding mode, or the fourth coding mode as the selected coding mode; and

encoding no motion vector for the current block.

33. The method of claim 1 , further comprising:

coding the current block using a motion vector, and differentially coding the motion vector using the first reference motion vector or the second reference motion vector.

34. The method of claim 1 , wherein determining whether the first candidate motion vector from the plurality of candidate motion vectors is coded with respect to the reference frame and has a non-zero value is performed after the reference frame is identified.

Assignments (5)
CHANGE OF NAME Recorded Oct 5, 2017
From: GOOGLE INC.
To: GOOGLE LLC
Reel/Frame 044127/0735 →
MERGER Recorded Apr 16, 2010
From: ON2 TECHNOLOGIES, INC.
To: ON2 TECHNOLOGIES, LLC
Reel/Frame 024248/0343 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Apr 16, 2010
From: ON2 TECHNOLOGIES, LLC
To: GOOGLE INC.
Reel/Frame 024248/0432 →
CORRECTIVE ASSIGNMENT TO CORRECT THE NAME OF RECEIVING PARTY TO "ON2 TECHNOLOGIES, INC." REPLACING "ON2 TECHNOLOGIES" PREVIOUSLY RECORDED ON REEL 0177009 FRAME 0036. ASSIGNOR(S) HEREBY CONFIRMS THE ASSIGNMENT. Recorded Jul 30, 2009
From: AMERES, ERIC L.; LAVARNWAY, SCOTT; MILLER, DAN; GRANGE, ADRIAN W.; WILKINS, PAUL G.; BANKOSKI, JAMES B.; XU, YAOWU
To: ON2 TECHNOLOGIES, INC.
Reel/Frame 023160/0107 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jun 1, 2006
From: AMERES, ERIC L.; LAVARNWAY, SCOTT; MILLER, DAN; GRANGE, ADRIAN W.; WILKINS, PAUL G.; BANKOSKI, JAMES B.; XU, YAOWU
To: ON2 TECHNOLOGIES
Reel/Frame 017709/0036 →
Continuity (2)
Provisional Application 60469187 · May 12, 2003
Related Publication 20040228410A1 · Nov 18, 2004