2

AN OVERBROAD PATENT ON run-level encoding for video - This application from Cisco seeks to patent work that was previously published as open-source software! 10 minutes of your time can help narrow US patent applications before they become patents. Follow @askpatents on twitter to help.

I believe there is good prior art for this patent. Now the applicant is trying to patent the same idea in the US!

Quantized transform coefficients representing pixel values in a Video

Controversy is explained in full here:

QUESTION - Have you seen anything that was published before 12/30/2008 that discusses: Run-level coders for video

From x264.nl: A run-level coder is a function that takes an array of values and calculates the distances between nonzero values (runs) in the array, as well as the indices of the nonzero values (levels). This is necessary for practically any video format that makes use of run-level compression (H.264, MPEG-2, Theora, etc). Here's one of x264's unoptimized run-level coders.

This function is run often enough that high performance is very important. Naively, there is no obvious way to make use of SIMD in such an algorithm, so some trickery has to be used to write a fast assembly function for it. Near the end of 2008, I added optimized assembly implementations of two run-length coders (for block decimation and CAVLC) to x264.

So why the deja vu? Because this patent application was an exact, step-by-step description of the algorithm I came up with for decimate_score (and later coeff_level_run) in x264 in 2008!

  • Publication Number: US 20100166076 A1
  • Application Number: US 12/649,764
  • Assignee: Tandberg Telecom (now Cisco)
  • Prior Art Date: Seeking prior Art predating 12/30/2008
  • Link to Google Prior Art Search - "Find Prior Art"

Claim 1 requires each and every step below:

A method for calculating run and level representations of quantized transform coefficients representing pixel values included in a block of a video picture, the method comprising:

  1. Packing, at a video processing apparatus, each quantized transform coefficients in a value interval [Max, Min] by setting all quantized transform coefficients greater than Max equal to Max, and all quantized transform coefficients less than Min equal to Min;

  2. Reordering, at the video processing apparatus, the quantized transform coefficients according to a predefined order depending on respective positions in the block resulting in an array C of reordered quantized transform coefficients;

  3. Masking, at the video processing apparatus, C by generating an array M containing ones in positions corresponding to positions of C having non-zero values, and zeros in positions corresponding to positions of C having zero values;

  4. Generating, at the video processing apparatus, for each position containing a one in M, a run and a level representation by setting the level value equal to an occurring value in a corresponding position of C; and

  5. Setting, at the video processing apparatus, for each position containing a one in M, the run value equal to the number of proceeding positions relative to a current position in M since a previous occurrence of one in M.

5
  • This PCT application seems to be what the blog post you link to is referencing. google.com/patents/WO2010077148A1?cl=en
    – George White
    Nov 13, 2013 at 17:28
  • Hi, AskPatents is an online service in Q&A format where users help find prior art on US Patent Applications and US Patents and ask questions about the US Patent process. Prior art requests for non-US patent applications are currently outside the scope of the site (the laws and processes vary from country to country). If the subject PCT application is filed as a US patent application a prior art request is definitely on-topic for Ask Patents. Sorry for any confusion. Nov 13, 2013 at 17:37
  • 1
    looking at the links you provide I see that there is a related US application google.com/patents/US20100166076. As seen on Public PAIR, it has been rejected multiple times and is now queued up for a new round of examination.
    – George White
    Nov 13, 2013 at 19:39
  • Great find, George. I must have missed that on Google Patents. Definitely on topic then; we will write up a prior art request for the OP Nov 14, 2013 at 3:32
  • It is now abandoned, at least in the USPTO
    – George White
    Apr 28, 2021 at 18:40

2 Answers 2

2

So this is a trivial combination of a zero-run-length encoder with a quantiser. That somebody thinks this is worthy of patenting beggars belief.

In any case, the same technique is used in the JPEG/JFIF format, which counts as a video codec because many cameras (prior to the introduction of cheap realtime MPEG4 encoders) used Motion JPEG for video recording, leveraging their existing JPEG acceleration hardware. Motion JPEG simply encodes each frame of the video as a separate JPEG image.

The steps for encoding JPEG are essentially similar to the claim here:

0) The source pixel data is transformed into a series of coefficients (DCT).

1) The coefficients are quantised, effectively reducing their range of possible values.

2) These coefficients are reordered using a specific "zigzag" pattern. It would be natural to have an array describing the required order, but optimised code would probably be unrolled to express it directly using loads and stores to specific indices. This "fastcoding" technique is widely used when performance is critical.

3) The resulting reordered series of quantised coefficients typically contains long runs of zeroes. These are encoded using RLE.

4) The remaining, nonzero coefficients are encoded individually using a Huffman scheme (in most implementations) or with arithmetic coding (rarely, due to - yes - patent concerns).

The JPEG standard was published at least by September 1992 as an ITU Recommendation. It was ratified as a formal ISO standard two years later. Additionally, it is my understanding that all MPEG-family video codecs ultimately trace their heritage back to JPEG, especially the basic DCT-quantisation scheme described here.

The only step in the claim but not in the above is the creation of a mask to identify the zero and non-zero coefficients. This appears to have been introduced as part of an optimisation. It's not immediately obvious to me how this code works or why it is supposed to be faster than examining the elements individually, but my grasp of x86 SIMD assembly is hazy at best - all I can gather so far is that the 2008 x264 code makes a mask involving four coefficients at a time, and then does something complicated with it.

1

Not exactly what you were looking for, but if Animated GIF counts as video encoding, then GNU plotutils had a weird bastardised version of GIF that used RLE instead of LZW in 1998. The original Compuserve work on creating GIF was to replace an RLE based graphics format. LZW was used in GIF instead of RLE because it was considered a more efficient upgrade, but RLE was certainly known to the creators of GIF, and would have been a fairly obvious choice if LZW hadn't been available. (Obvious in the real world definition, anyway. Possibly not obvious in the legal sense.)

https://www.gnu.org/software/plotutils/manual/en/html_node/History-and-Acknowledgements.html#History-and-Acknowledgements

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .