System and method for decoding using parallel processing
An apparatus for decoding frames of a compressed video data stream having at least one frame divided into partitions, includes a memory and a processor configured to execute instructions stored in the memory to read partition data information indicative of a partition location for at least one of the partitions, decode a first partition of the partitions that includes a first sequence of blocks, decode a second partition of the partitions that includes a second sequence of blocks identified from the partition data information using decoded information of the first partition.
This application is a continuation of U.S. nonprovisional patent application Ser. No. 13/565,364, filed Aug. 2, 2012, now U.S. Pat. No. 9,357,223, which is a divisional of U.S. nonprovisional patent application Ser. No. 12/329,248, filed Dec. 5, 2008, which claims priority to U.S. provisional patent application No. 61/096,223, filed Sep. 11, 2008, which are incorporated herein in entirety by reference.
TECHNICAL FIELDThe present invention relates in general to video decoding using multiple processors.
BACKGROUNDAn increasing number of applications today make use of digital video for various purposes including, for example, remote business meetings via video conferencing, high definition video entertainment, video advertisements, and sharing of user-generated videos. As technology is evolving, people have higher expectations for video quality and expect high resolution video with smooth playback at a high frame rate.
There can be many factors to consider when selecting a video coder for encoding, storing and transmitting digital video. Some applications may require excellent video quality where others may need to comply with various constraints including, for example, bandwidth or storage requirements. To permit higher quality transmission of video while limiting bandwidth consumption, a number of video compression schemes are noted including proprietary formats such as VPx (promulgated by On2 Technologies, Inc. of Clifton Park, N.Y., H.264 standard promulgated by ITU-T Video Coding Experts Group (VCEG) and the ISO/IEC Moving Picture Experts Group (MPEG), including present and future versions thereof. H.264 is also known as MPEG-4 Part 10 or MPEG-4 AVC (formally, ISO/IEC 14496-10).
There are many types of video encoding schemes that allow video data to be compressed and recovered. The H.264 standard, for example, offers more efficient methods of video coding by incorporating entropy coding methods such as Context-based Adaptive Variable Length Coding (CAVLC) and Context-based Adaptive Binary Arithmetic Coding (CABAC). For video data that is encoded using CAVLC, some modem decompression systems have adopted the use of a multi-core processor or multiprocessors to increase overall video decoding speed.
SUMMARYAn embodiment of the invention is disclosed as a method for decoding a stream of encoded video data including a plurality of partitions that have been compressed using at least a first encoding scheme. The method includes selecting at least a first one of the partitions that includes at least one row of blocks that has been encoded using at least a second encoding scheme. A second partition is selected that includes at least one row of blocks encoded using the second encoding scheme. The first partition is decoded by a first processor, and the second partition is decoded by a second processor. The decoding of the second partition is offset by a specified number of blocks so that at least a portion of the output from the decoding of the first partition is used as input in decoding the second partition. Further, the decoding of the first partition is offset by a specified number of blocks so that at least a portion of the output from the decoding of the second partition is used as input in decoding the first partition.
The description herein makes reference to the accompanying drawings wherein like reference numerals refer to like parts throughout the several views, and wherein:
Referring to
Although the description of embodiments are described in the context of the VP8 video coding format, alternative embodiments of the present invention can be implemented in the context of other video coding formats. Further, the embodiments are not limited to any specific video coding standard or format.
Referring to
When input video stream 16 is presented for encoding, each frame 17 within input video stream 16 can be processed in units of macroblocks. At intra/inter prediction stage 18, each macroblock can be encoded using either intra prediction or inter prediction mode. In the case of intra-prediction, a prediction macroblock can be formed from samples in the current frame that have been previously encoded and reconstructed. In the case of inter-prediction, a prediction macroblock can be formed from one or more reference frames that have already been encoded and reconstructed.
Next, still referring to
The reconstruction path in
Referring to
When compressed bitstream 26 is presented for decoding, the data elements can be decoded by entropy decoding stage 25 to produce a set of quantized coefficients. Dequantization stage 27 dequantizes and inverse transform stage 29 inverse transforms the coefficients to produce a derivative residual that is identical to that created by the reconstruction stage in encoder 14. Using the type of prediction mode and/or motion vector information decoded from the compressed bitstream 26, at intra/inter prediction stage 23, decoder 21 creates the same prediction macroblock as was created in encoder 14. At the reconstruction stage 33, the prediction macroblock can be added to the derivative residual to create a reconstructed macroblock. The loop filter 34 can be applied to the reconstructed macroblock to reduce blocking artifacts. A deblocking filter 33 can be applied to video image frames to further reduce blocking distortion and the result can he outputted to output video stream 35.
Current context-based entropy coding methods, such as Context-based Adaptive Arithmetic Coding (CABAC), are limited by dependencies that exploit spatial locality by requiring macroblocks to reference neighboring macroblocks and that exploit temporal localities by requiring macroblocks to reference macroblocks from another frame. Because of these dependencies and the adaptivity, encoder 14 codes the bitstream in a sequential order using context data from neighboring macroblocks. Such sequential dependency created by encoder 14 causes the compressed bitstream 26 to be decoded in a sequential fashion by decoder 21. Such sequential decoding can be adequate when decoding using a single-core processor. On the other hand, if a multi-core processor or a multi-processor system is used during decoding, the computing power of the multi-core processor or the multi-processor system would not be effectively utilized.
Although the disclosure has and will continue to describe embodiments of the present invention with reference to a multi-core processor and the creation of threads on the multi-core processor, embodiments of the present invention can also be implemented with other suitable computer systems, such as a device containing multiple processors.
According to one embodiment, encoder 14 divides the compressed bitstream into partitions 36 rather than a single stream of serialized data. With reference to
Referring to
An alternative grouping mechanism may include, for example, grouping a row of blocks from a first frame and a corresponding row of blocks in a second frame. The row of blocks from the first frame can be packed in the first partition and the corresponding row of blocks in the second frame can be packed in the second partition. A first processor can decode the row of blocks from the first frame and a second processor can decode the row of blocks from the second frame. In this manner, the decoder can decode at least one block in the second partition using information from a block that is already decoded by the first processor.
Each of the partitions 36 can be compressed using two separate encoding schemes. The first encoding scheme can be lossless encoding using, for example, context-based arithmetic coding like CABAC. Other lossless encoding techniques may also be used. Referring back to
Still referring to
Referring to
Once encoder 14 has divided frame 17 into partitions 36, encoder 14 writes data into video frame header 44 to indicate number of partitions 40 and offsets of each partition 42. Number of partitions 40 and offsets of each partition 42 can be represented in frame 17 by a bit, a byte or any other record that can relay the specific information to decoder 21. Decoder 21 reads the number of data partitions 40 from video frame header 44 in order to decode the compressed data. In one example, two bits may be used to represent the number of partitions. One or more bits can be used to indicate the number of data partitions (or partition count). Other coding schemes can also be used to code the number of partitions into the bitstream. The following list indicates how two bits can represent the number of partitions:
If the number of data partitions is greater than one, decoder 21 also needs information about the positions of the data partitions 36 within the compressed bitstream 26. The offsets of each partition 42 (also referred to as partition location offsets) enable direct access to each partition during decoding.
In one example, offset of each partition 42 can be relative to the beginning of the bitstream and can be encoded and written into the bitstream 26. In another example, the offset for each data partition can be encoded and written into the bitstream except for the first partition since the first partition implicitly begins in the bitstream 26 after the offsets of each partition 42. The foregoing is merely exemplary. Other suitable data structures, flags or records such words and bytes, can be used to transmit partition count and partition location offset information.
Although the number of data partitions can be the same for each frame 17 throughout the input video sequence 16, the number of data partitions may also differ from frame to frame. Accordingly, each frame 17 would have a different number of partitions 40. The number of bits that are used to represent the number of partitions may also differ from frame to frame. Accordingly, each frame 17 could be divided into varying numbers of partitions.
Once the data has been compressed into bit stream 26 with the proper partition data information (i.e. number of partitions 40 and offsets of partitions 42), decoder 21 can decode the data partitions 36 on a multi-core processor in parallel. In this manner, each processor core may be responsible for decoding one of the data partitions 36. Since multi-core processors typically have more than one processing core and shared memory space, the workload can be allocated between each core as evenly as possible. Each core can use the shared memory space as an efficient way of sharing data between each core decoding each data partition 36.
For example, if there are two processors decoding two partitions, respectively, the first processor will begin decoding the first partition. The second processor can then decode macroblocks of the second partition and can use information received from the first processor, which has begun decoding macroblocks of the first partition. Concurrently with the second processor, the first processor can continue decoding macroblocks of the first partition and can use information received from the second processor. Accordingly, both the first and second processors can have the information necessary to properly decode macroblocks in their respective partitions.
Furthermore, as discussed in more detail below, when decoding a macroblock row of the second partition that is dependent on the first partition, a macroblock that is currently being processed in the second partition is offset by a specified number of macroblocks. In this manner, at least a portion of the output of the decoding of the first partition can be used as input in the decoding of the macroblock that is currently being processed in the second partition. Likewise, when decoding a macroblock row of the first partition that is dependent on the second partition, a macroblock that is currently being processed in the first partition is offset by a specified number of macroblocks so that at least a portion of the output of the decoding of the second partition can be used as input in the decoding of the macroblock that is currently being processed in the first partition.
When decoding the compressed bitstream, decoder 21 determines the number of threads needed to decode the data, which can be based on the number of partitions 40 in each encoded frame 39. For example, if number of partitions 40 indicates that there are four partitions in encoded frame 39, decoder 21 creates four threads with each thread decoding one of the data partitions. Referring to
As discussed previously, macroblocks 20 within each frame use context data from neighboring macroblocks when being encoded. When decoding macroblocks 20, the decoder will need the same context data in order to decode the macroblocks properly. On the decoder side, the context data can be available only after the neighboring macroblocks have already been decoded by the current thread or other threads. In order to decode properly, the decoder includes a staging and synchronization mechanism for managing the decoding of the multiple threads.
With reference to
As depicted in
Each of
Referring to
Referring to
Previous decoding mechanisms were unable to efficiently use a multi-core processor to decode a compressed bitstream because processing of a macroblock row could not be initiated until the upper adjacent macroblock row had been completely decoded. The difficulty of previous decoding mechanisms stems from the encoding phase. When data is encoded using traditional encoding techniques, spatial dependencies within macroblocks imply a specific order of processing of the macroblocks. Furthermore, once the frame has been encoded, a specific macroblock row cannot be discerned until the row has been completely decoded. Accordingly, video coding methods incorporating entropy coding methods such as CABAC created serialized dependencies which were passed to the decoder. As a result of these serialized dependencies, decoding schemes had limited efficiency because information for each computer processing system (e.g. threads 46, 48 and 50) was not available until the decoding process has been completed on that macroblock row.
Utilizing the parallel processing staging and synchronization mechanism illustrated in
Referring again to
Referring to
Referring to
In the preferred embodiment, the offset can be determined by the specific requirements of the codec. In alternative embodiments, the offset can be specified in the bitstream.
While the invention has been described in connection with certain embodiments, it is to be understood that the invention is not to he limited to the disclosed embodiments but, on the contrary, is intended to cover various modifications and equivalent arrangements included within the spirit and scope of the appended claims, which scope is to be accorded the broadest interpretation so as to encompass all such modifications and equivalent structures as is permitted under the law.
Claims
1. An apparatus for decoding frames of a compressed video data stream, including at least one frame divided into partitions, the apparatus comprising:
- a memory; and
- a processor configured to execute instructions stored in the memory to: read, from the compressed video data stream, partition data information indicative of a partition location with respect to the compressed video data stream for at least one of the partitions; decode, from the compressed video data stream, a first partition of the partitions that includes a first sequence of blocks; and decode, from the compressed video data stream, a second partition of the partitions that includes a second sequence of blocks identified based on the partition location indicated by the partition data information, using decoded information of the first partition; wherein the first partition and the second partition have each been individually compressed; and output or store a decoded frame including the first sequence of blocks and the second sequence of blocks.
2. The apparatus of claim 1, wherein the decoding includes decoding lossless coded information.
3. The apparatus of claim 1, wherein the processor is further configured to identify one row of blocks in the frame having a boundary between the first partition and the second partition.
4. The apparatus of claim 1, wherein the first partition includes contiguous blocks in at least a portion of a first row and at least a portion of a first subsequent row.
5. The apparatus of claim 4, wherein the second partition includes contiguous blocks in at least a portion of a second row and at least a portion of a second subsequent row.
6. The apparatus of claim 1, wherein the first partition comprises blocks of two or more contiguous rows of blocks.
7. The apparatus of claim 1, wherein the processor is further configured to decode the second sequence of blocks using context information contained in the first sequence of blocks.
8. The apparatus of claim 7, wherein the processor is further configured to perform at least one of intra-frame prediction or inter-frame prediction on the second partition.
9. The apparatus of claim 7, wherein the processor decodes the second partition with an offset of a specified number of blocks such that at least a portion of decoded context information of the first sequence of blocks is available as context data for decoding at least one block in the second partition.
10. The apparatus of claim 9, wherein the offset is determined based upon size of the context.
11. The apparatus of claim 7, wherein the first sequence of blocks in the first partition and the second sequence of blocks in the second partition are derived from corresponding rows of blocks in two successive frames of the video data, and wherein the processor is further configured to:
- decode at least one block in the second partition using information from a block previously decoded.
12. The apparatus of claim 1, wherein the decoding includes context-based arithmetic coding.
13. A non-transitory computer-readable storage medium having stored thereon an encoded bitstream, including at least one frame divided into individually compressed partitions, wherein the encoded bitstream is configured for decoding by operations comprising:
- reading, from the encoded bitstream, partition data information indicative of a partition location with respect to the encoded bitstream for at least one of the partitions;
- decoding, from the encoded bitstream, a first partition of the partitions that includes a first sequence of blocks;
- decoding, from the encoded bitstream, a second partition of the partitions that includes a second sequence of blocks identified based on the partition location indicated by the partition data information, using decoded information of the first partition; and
- outputting or storing a decoded frame including the first sequence of blocks and the second sequence of blocks.
14. The non-transitory computer-readable storage medium of claim 13, wherein the decoding includes decoding losslessly coded information.
15. The non-transitory computer-readable storage medium of claim 13, wherein the decoding includes decoding the second sequence of blocks using context information contained in the first sequence of blocks.
16. The non-transitory computer-readable storage medium of claim 15, wherein the decoding includes decoding the second partition with an offset of a specified number of blocks such that at least a portion of decoded context information of the first sequence of blocks is available as context data for decoding at least one block in the second partition.
17. The non-transitory computer-readable storage medium of claim 16, wherein the offset is determined based upon size of the context.
18. The non-transitory computer-readable storage medium of claim 15, wherein the first sequence of blocks in the first partition and the second sequence of blocks in the second partition are derived from corresponding rows of blocks in two successive frames of the video data, and wherein the decoding includes:
- decoding at least one block in the second partition using information from a block previously decoded.
19. The non-transitory computer-readable storage medium of claim 13, wherein the decoding includes context-based arithmetic coding.
20. An apparatus for encoding frames of a video, including at least one frame divided into partitions, the apparatus comprising:
- a memory; and
- a processor configured to execute instructions stored in the memory to: encode, into a compressed video data stream, a first partition of the partitions that includes a first sequence of blocks; encode, into the compressed video data stream, at a partition location with respect to the compressed video data stream, a second partition of the partitions that includes a second sequence of blocks encoded using information of the first partition; include, in the compressed video data stream, partition data information indicative of the partition location with respect to the compressed video data stream for at least one of the partitions; and output or store the compressed video data stream.
21. The apparatus of claim 20, wherein the processor is configured to execute the instructions to use context information from the first sequence of blocks to encode the second sequence of blocks.
22. The apparatus of claim 21, wherein the processor is configured to execute the instructions to encode the second partition with an offset of a specified number of blocks such that at least a portion of context information from the first sequence of blocks is available as context data for encoding at least one block in the second partition.
23. The apparatus of claim 22, wherein the offset is determined based upon size of the context.
24. The apparatus of claim 22, wherein the first sequence of blocks in the first partition and the second sequence of blocks in the second partition are derived from corresponding rows of blocks in two successive frames of the video data, and the processor is configured to execute the instructions to:
- use information from a block previously decoded to encode at least one block in the second partition.
25. The apparatus of claim 24, wherein to encode the processor is configured to execute the instructions to use context-based arithmetic coding.
3825832 | July 1974 | Frei et al. |
4719642 | January 12, 1988 | Lucas |
4729127 | March 1, 1988 | Chan et al. |
4736446 | April 5, 1988 | Reynolds et al. |
4797729 | January 10, 1989 | Tsai |
4868764 | September 19, 1989 | Richards |
4891748 | January 2, 1990 | Mann |
5068724 | November 26, 1991 | Krause et al. |
5083214 | January 21, 1992 | Knowles |
5091782 | February 25, 1992 | Krause et al. |
5136371 | August 4, 1992 | Savatier et al. |
5136376 | August 4, 1992 | Yagasaki et al. |
5164819 | November 17, 1992 | Music |
5225832 | July 6, 1993 | Wang et al. |
5270812 | December 14, 1993 | Richards |
5274442 | December 28, 1993 | Murakami et al. |
5313306 | May 17, 1994 | Kuban et al. |
5341440 | August 23, 1994 | Earl et al. |
5381145 | January 10, 1995 | Allen et al. |
5432870 | July 11, 1995 | Schwartz |
5452006 | September 19, 1995 | Auld |
5561477 | October 1, 1996 | Polit |
5576765 | November 19, 1996 | Cheney et al. |
5576767 | November 19, 1996 | Lee et al. |
5589945 | December 31, 1996 | Abecassis |
5604539 | February 18, 1997 | Ogasawara et al. |
5646690 | July 8, 1997 | Yoon |
5659539 | August 19, 1997 | Porter et al. |
5696869 | December 9, 1997 | Abecassis |
5734744 | March 31, 1998 | Wittenstein et al. |
5737020 | April 7, 1998 | Hall et al. |
5748247 | May 5, 1998 | Hu |
5774593 | June 30, 1998 | Zick et al. |
5793647 | August 11, 1998 | Hageniers et al. |
5794179 | August 11, 1998 | Yamabe |
5818530 | October 6, 1998 | Canfield |
5818969 | October 6, 1998 | Astle |
5828370 | October 27, 1998 | Moeller et al. |
5835144 | November 10, 1998 | Matsumura et al. |
5883671 | March 16, 1999 | Keng et al. |
5903264 | May 11, 1999 | Moeller et al. |
5929940 | July 27, 1999 | Jeannin |
5930493 | July 27, 1999 | Ottesen et al. |
5963203 | October 5, 1999 | Goldberg et al. |
5999641 | December 7, 1999 | Miller et al. |
6014706 | January 11, 2000 | Cannon et al. |
6041145 | March 21, 2000 | Hayashi et al. |
6061397 | May 9, 2000 | Ogura |
6084908 | July 4, 2000 | Chiang et al. |
6108383 | August 22, 2000 | Miller et al. |
6112234 | August 29, 2000 | Leiper |
6115501 | September 5, 2000 | Chun et al. |
6119154 | September 12, 2000 | Weaver et al. |
6141381 | October 31, 2000 | Sugiyama |
6160846 | December 12, 2000 | Chiang et al. |
6167164 | December 26, 2000 | Lee |
6181742 | January 30, 2001 | Rajagopalan et al. |
6181822 | January 30, 2001 | Miller et al. |
6185363 | February 6, 2001 | Dimitrova et al. |
6188799 | February 13, 2001 | Tan et al. |
6240135 | May 29, 2001 | Kim |
6292837 | September 18, 2001 | Miller et al. |
6327304 | December 4, 2001 | Miller et al. |
6366704 | April 2, 2002 | Ribas-Corbera et al. |
6370267 | April 9, 2002 | Miller et al. |
6400763 | June 4, 2002 | Wee |
6496537 | December 17, 2002 | Kranawetter |
6522784 | February 18, 2003 | Zlotnick |
6529638 | March 4, 2003 | Westerman |
6560366 | May 6, 2003 | Wilkins |
6594315 | July 15, 2003 | Schultz et al. |
6687303 | February 3, 2004 | Ishihara |
6697061 | February 24, 2004 | Wee et al. |
6707952 | March 16, 2004 | Tan et al. |
6765964 | July 20, 2004 | Conklin |
6876703 | April 5, 2005 | Ismaeil et al. |
6934419 | August 23, 2005 | Zlotnick |
6985526 | January 10, 2006 | Bottreau et al. |
6987866 | January 17, 2006 | Hu |
7003035 | February 21, 2006 | Tourapis et al. |
7023916 | April 4, 2006 | Pandel et al. |
7027654 | April 11, 2006 | Ameres et al. |
7170937 | January 30, 2007 | Zhou |
7227589 | June 5, 2007 | Yeo et al. |
7236524 | June 26, 2007 | Sun et al. |
7330509 | February 12, 2008 | Lu et al. |
7499492 | March 3, 2009 | Ameres et al. |
7606310 | October 20, 2009 | Ameres et al. |
7764739 | July 27, 2010 | Yamada et al. |
7813570 | October 12, 2010 | Shen et al. |
8175161 | May 8, 2012 | Anisimov |
8213518 | July 3, 2012 | Wang |
8265144 | September 11, 2012 | Christoffersen |
8401084 | March 19, 2013 | MacInnis |
8520734 | August 27, 2013 | Xu |
8743979 | June 3, 2014 | Lee et al. |
8767817 | July 1, 2014 | Xu et al. |
8948267 | February 3, 2015 | Khan |
9100509 | August 4, 2015 | Jia et al. |
9100657 | August 4, 2015 | Jia et al. |
20020012396 | January 31, 2002 | Pau et al. |
20020031184 | March 14, 2002 | Iwata |
20020039386 | April 4, 2002 | Han et al. |
20020168114 | November 14, 2002 | Valente |
20030023982 | January 30, 2003 | Lee et al. |
20030189982 | October 9, 2003 | MacInnis |
20030215018 | November 20, 2003 | MacInnis et al. |
20030219072 | November 27, 2003 | MacInnis |
20040028142 | February 12, 2004 | Kim |
20040066852 | April 8, 2004 | MacInnis |
20040120400 | June 24, 2004 | Linzer |
20040228410 | November 18, 2004 | Ameres |
20040240556 | December 2, 2004 | Winger et al. |
20040258151 | December 23, 2004 | Spampinato |
20050050002 | March 3, 2005 | Slotznick |
20050053157 | March 10, 2005 | Lillevold |
20050117655 | June 2, 2005 | Ju |
20050147165 | July 7, 2005 | Yoo et al. |
20050169374 | August 4, 2005 | Marpe et al. |
20050210145 | September 22, 2005 | Kim et al. |
20050259747 | November 24, 2005 | Schumann |
20050265447 | December 1, 2005 | Park |
20050265461 | December 1, 2005 | Raveendran |
20050276323 | December 15, 2005 | Martemyanov et al. |
20060072674 | April 6, 2006 | Saha et al. |
20060098737 | May 11, 2006 | Sethuraman et al. |
20060109912 | May 25, 2006 | Winger et al. |
20060114985 | June 1, 2006 | Linzer |
20060126726 | June 15, 2006 | Lin et al. |
20060126740 | June 15, 2006 | Lin et al. |
20060150151 | July 6, 2006 | Dubinsky |
20060215758 | September 28, 2006 | Kawashima |
20060239345 | October 26, 2006 | Taubman et al. |
20060256858 | November 16, 2006 | Chin |
20060291567 | December 28, 2006 | Filippini et al. |
20070025441 | February 1, 2007 | Ugur et al. |
20070053443 | March 8, 2007 | Song |
20070086528 | April 19, 2007 | Mauchly et al. |
20070092006 | April 26, 2007 | Malayath |
20070140342 | June 21, 2007 | Karczewicz et al. |
20070229704 | October 4, 2007 | Mohapatra et al. |
20070286288 | December 13, 2007 | Smith et al. |
20080056348 | March 6, 2008 | Lyashevsky et al. |
20080152014 | June 26, 2008 | Schreier et al. |
20080159407 | July 3, 2008 | Yang et al. |
20080198270 | August 21, 2008 | Hobbs et al. |
20080198920 | August 21, 2008 | Yang et al. |
20080212678 | September 4, 2008 | Booth et al. |
20080215317 | September 4, 2008 | Fejzo |
20080240254 | October 2, 2008 | Au |
20080267295 | October 30, 2008 | Sung |
20080298469 | December 4, 2008 | Liu |
20080317364 | December 25, 2008 | Gou |
20090002379 | January 1, 2009 | Baeza |
20090003447 | January 1, 2009 | Christoffersen et al. |
20090052529 | February 26, 2009 | Kim |
20090080534 | March 26, 2009 | Sekiguchi et al. |
20090168893 | July 2, 2009 | Schlanger |
20090225845 | September 10, 2009 | Veremeev et al. |
20090238277 | September 24, 2009 | Meehan |
20090245349 | October 1, 2009 | Zhao |
20090249178 | October 1, 2009 | Ambrosino et al. |
20100061455 | March 11, 2010 | Xu et al. |
20100158109 | June 24, 2010 | Dahlby |
20100177826 | July 15, 2010 | Bhaumik et al. |
20100183076 | July 22, 2010 | Yoon |
20100189179 | July 29, 2010 | Gu et al. |
20100215263 | August 26, 2010 | Imanaka |
20100239181 | September 23, 2010 | Lee et al. |
20100246665 | September 30, 2010 | Brederson et al. |
20100316132 | December 16, 2010 | MacInnis |
20110261884 | October 27, 2011 | Rubinstein et al. |
20120014451 | January 19, 2012 | Lee et al. |
20120128069 | May 24, 2012 | Sato |
20120147958 | June 14, 2012 | Ronca et al. |
20120213448 | August 23, 2012 | Malmborg et al. |
20120294376 | November 22, 2012 | Tanaka et al. |
20120307892 | December 6, 2012 | Xu et al. |
20130034150 | February 7, 2013 | Sadafale |
20130083161 | April 4, 2013 | Hsu et al. |
20130259137 | October 3, 2013 | Kuusela |
20150043645 | February 12, 2015 | Ventela |
20150326888 | November 12, 2015 | Jia et al. |
20170188024 | June 29, 2017 | Wang |
3510433 | March 2004 | JP |
2007-166625 | June 2007 | JP |
2008/0204 70 | February 2008 | WO |
2008/036237 | March 2008 | WO |
2010/063184 | June 2010 | WO |
- Armando J. Pinho, “Encoding of Image Partitions Using a Standard Technique for Lossless Image Compression,” Dep. Electrónica e Telecomunicacoes/ INESC Universidade de Aveiro, Portugal (IEEE 1999), 4 pp.
- B. Vasudev & N. Merhav, “DCT Mode Conversions for Field/Frame Coded MPEG Video”, IEEE 2d Workshop on Multimedia Signal Processing 605-610 (Dec. 1998).
- Bankoski et al. “Technical Overview of VP8, an Open Source Video Codec for the Web”. Dated Jul. 11, 2011.
- Bankoski et al., “VP8 Data Format and Decoding Guide”, Independent Submission RFC 6389, Nov. 2011, 305 pp.
- Bankoski et al., “VP8 Data Format and Decoding Guide draft-bankoski-vp8-bitstream-02”, Network Working Group, Internet-Draft, May 18, 2011, 288 pp.
- Fore June “An Introduction to Digital Video Data Compression in Java”, Chapter 12: DPCM video Codec, CreateSpace, Jan. 22, 2011.
- International Search Report and Written Opinion Issued in co-pending PCT International Application No. PCT/US2013/034581 dated Jun. 11, 2013.
- Li E Q et al., “Implementation of H.264 encoder on general-purpose processors with hyper-threading technology”, Proceedings of SPIE, pp. 384-395, vol. 5308, No. 1, Jan. 20, 2004.
- “Introduction to Video Coding Part 1: Transform Coding”, Mozilla, Mar. 2012, 171 pp.
- On2 Technologies Inc., White Paper TrueMotion VP7 Video Codec, Jan. 10, 2005, 13 pages, Document Version: 1.0, Clifton Park, New York.
- On2 Technologies, Inc., White Paper On2's TrueMotion VP7 Video Codec, Jul. 11, 2008, pp. 7 pages, Document Version:1.0, Clifton Park, New York.
- “Overview VP7 Data Format and Decoder”, Version 1.5, On2 Technologies, Inc., Mar. 28, 2005, 65 pp.
- Series H: Audiovisual and Multimedia Systems, Infrastructure of audiovisual services—Coding of moving video, Amendment 2: New profiles for professional applications, International Telecommunication Union, Apr. 2007, 75 pp.
- Series H: Audiovisual and Multimedia Systems, Infrastructure of audiovisual services—Coding of moving video, Advanced video coding for generic audiovisual services, Amendment 1: Support of additional colour spaces and removal of the High 4:4:4 Profile, International Telecommunication Union, Jun. 2006, 16 pp.
- Series H: Audiovisual and Multimedia Systems, Infrastructure of audiovisual services—Coding of moving video, Advanced video coding for generic audiovisual services, Version 3, International Telecommunication Union, Mar. 2005, 343 pp.
- Sharp, “Entropy slices for parallel entropy decoding”, ITU-T SG16 Meeting, Apr. 22, 2008-Feb. 5, 2008, Geneva.
- Sze, “Massively Parallel CABAC”, VCEG meeting, Jan. 7, 2009, London and MPEG meeting, Aug. 7, 2009, Geneva.
- Chen, T, Y.H. Ng; Lossless Color Image Compression Technique for Multimedia Applications; IBM Technical Disclosure Bulletin; vol. 37 No. 10, Oct. 1994.
- Tasdizen, et al.; “A High Performance Reconfigurable Motion Estimation Hardware Architecture”, Design, Automation & Test in Europe Conference & Exhibition, Apr. 20, 2009, IEEE, Piscataway, NJ, US pp. 882-885.
- Vos, Luc De and Stegherr, Michael; “Parameterizable VLSI Architectures for the Full-Search Block-Matching Algorithm”, IEEE Transactions on Circuits and Systems, vol. 36, No. 10, Oct. 1989 NY US pp. 1309-1316.
- VP6 Bitstream and Decoder Specification, Version 1.03, (On2 Technologies, Inc.), Dated Oct. 29, 2007.
- Wiegand et al, “Overview of the H 264/AVC Video Coding Standard,” IEEE Transactions on Circuits and Systems for Video Technology, vol. 13, No. 7, pp. 568, 569, Jul. 1, 2003.
- Yao Wang, “Motion Estimation for Video coding”, EE4414: Motion Estimation basics, 2005.
- Youn et al., “Motion Vector Refinement for high-performance Transcoding” IEEE Transactions on Multimedia, vol. 1, No. 1, Mar. 1999.
Type: Grant
Filed: Mar 12, 2021
Date of Patent: Nov 14, 2023
Inventors: Yaowu Xu (Saratoga, CA), Paul Wilkins (Cambridge), James Bankoski (Los Gatos, CA)
Primary Examiner: Ovidio Escalante
Application Number: 17/200,761
International Classification: H04N 19/61 (20140101); H04N 19/91 (20140101); H04N 19/82 (20140101); H04N 19/17 (20140101); H04N 19/593 (20140101); H04N 19/44 (20140101); H04N 19/174 (20140101); H04N 19/176 (20140101); H04N 19/436 (20140101); H04N 19/51 (20140101);