Implementation of discrete cosine transformation and its inverse on programmable graphics processor
AssigneeMicrosoft Corporation
InventorsChanning Pierce Verbeck, Craig Carroll Peeper
Life of this patent
Estimating the term…
Abstract
The discrete cosine transform (DCT) is mapped to a graphics processing unit (GPU) instead of a central processing unit (CPU). The DCT can be implemented using a shader-based process or a host-based process. A matrix is applied to a set of pixel samples. The samples are processed in either rows or columns first, and then the processing is performed in the opposite direction. The number of times a shader program is changed is minimized by processing all samples that use a particular shader (e.g., the first shader) at the same time (e.g., in sequence).
Claims19
A method of implementing a DCT in a GPU, comprising:
- separating an image into blocks of pixels;
- loading a shader module into GPU memory and activating the shader module;
- associating a pre-determined group of pixels in each block of pixels with the active shader module;
- processing each of the associated pre-determined groups of pixels in each block of pixels, in parallel, within the active shader module prior to changing active status to another shader module, the processing comprising:
- multiplying a column or row of pixels with a predetermined matrix to generate a corresponding set of output pixels;
- determining sets of scanlines based on the corresponding sets of output pixels;
- and
- for each set of scanlines, sampling at least a portion of the pixels comprised within the scanlines and pixels relative to the scanlines for every block of pixels, and multiplying the sampled pixels with a row or column of the predetermined matrix,
- wherein said multiplying, said determining, and said sampling of the pixels is performed by said active shader module.
A method of processing pixels, comprising;
- separating an image into blocks of pixels, and associating a pre-determined group of pixels in each block of pixels with an active shader module;
- processing each associated pixel in every block of pixels within the active shader module prior to changing active status to another shader module, the processing comprising:
- creating a polyline of pixels for each column or row in each block of pixels;
- and
- creating a line for each row or column in each block of pixels, wherein the rows or columns correspond to the polylines created for each column or row;
- and
- wherein said creating a polyline of pixels for each column or row in each block of pixels and said creating a line for each row or column in each block of pixels, performed by said active shader module.
A method of processing pixels, comprising:
- separating an image into blocks of pixels, and associating a pre-determined group of pixels in each block of pixels with an active shader module;
- processing each associated pixel in every block of pixels within the active shader module prior to changing active status to another shader module, the processing comprising:
- determining a polyline of pixels for each column or row in each block of pixels;
- for each pixel in the polyline,
- sampling at least a portion of the other pixels in the corresponding column or row that lies along the polyline and pixels relative to the column or row;
- multiplying each of the other pixels by a DCT coefficient from a predetermined matrix to generate resultant values;
- and
- adding the generated resultant values together to generate a second resulting value,
- wherein said multiplying and said adding is performed by said active shader module.
A method of processing pixels comprising:
- separating an image into blocks of pixels, and associating a pre-determined group of pixels in each block of pixels with an active shader module;
- processing each associated pixel in every block of pixels within the active shader module prior to changing active status to another shader module, the processing comprising:
- for each column in a block of pixels, setting up a shader module and rendering a scanline;
- and
- for each row in a block of pixels, setting up a shader module and rendering a column;
- and
- wherein setting up the shader module and rendering the scanline and the column are performed by said active shader module.
A system to program a GPU to implement a DCT, comprising:
- adapting a processing unit to receive blocks of pixels into which an image has been separated, associating a pre-determined group of pixels in each block of pixels with an active shader module, and processing each block of pixels, in parallel, within the active shader module prior to changing active status to another shader module, the processing comprising:
- multiplying a column or row of pixels of an image with a predetermined matrix to generate a corresponding set of output pixels;
- determining sets of scanlines based on the sets of output pixels;
- and
- for each set of scanlines, sampling the pixels comprised within the scanlines and multiplying the sampled pixels with a row or column of the predetermined matrix and
- wherein said multiplying, said determining, and said sampling of the pixels is performed by said active shader module.
A method of implementing low-level video processing in a GPU, comprising:
- separating an image into blocks of pixels;
- loading a shader module into GPU memory and activating the shader module;
- associating a pre-determined group of pixels in each block of pixels with the active shader module;
- processing each of the associated groups of pixels in each block of pixels, in parallel, within the active shader module prior to changing active status to another shader module, the processing comprising:
- multiplying a column or row of pixels with a predetermined matrix to generate a corresponding set of output pixels;
- determining sets of scanlines based on the sets of output pixels;
- and
- for each set of scanlines, sampling at least a portion of the pixels comprised within the scanlines and pixels relative to the scanlines for every block of pixels, and multiplying the sampled pixels with a row or column of the predetermined matrix using a separate shader module for each set of scanlines;
- defining an array of coordinate offsets to neighboring pixels, wherein the shader module accesses the pixels in the scanlines using the offset array;
- and
- wherein said multiplying, said determining, and said sampling or the pixels is performed by said active shader module.
Dependencies are inferred from the claim text.