Abstract:
The video encoders described herein may determine an initial designation of a mode in which to encode a block of pixels in an early stage of a block processing pipeline. A component of a late stage of the block processing pipeline (one that precedes the transcoder) may determine a different mode designation for the block of pixels based on coded block pattern information, motion vector information, the position of the block in a row of such blocks, the order in which such blocks are processed in the pipeline, or other encoding related syntax elements. The component in the late stage may communicate information to the transcoder usable in coding the block of pixels, such as modified syntax elements or an end of row marker. The transcoder may encode the block of pixels in accordance with the different mode designation or may change the mode again, dependent on the communicated information.
Abstract:
Blocks of pixels from a video frame may be encoded in a block processing pipeline using wavefront ordering, e.g. according to knight's order. Each of the encoded blocks may be written to a particular one of multiple buffers such that the blocks written to each of the buffers represent consecutive blocks of the frame in scan order. Stitching information may be written to the buffers at the end of each row. A stitcher may read the rows from the buffers in order and generate a scan order output stream for the frame. The stitcher component may read the stitching information at the end of each row and apply the stitching information to one or more blocks at the beginning of a next row to stitch the next row to the previous row. Stitching may involve modifying pixel(s) of the blocks and/or modifying metadata for the blocks.
Abstract:
The forward transform and quantization components of the video encoders described herein may modify the quantization typically performed by video encoders to reduce quantization artifacts. For example, for a given pixel in an image macroblock, noise may be generated based on information about pixels in the neighborhood of the given pixel (e.g., DC transform coefficients or quantization errors of the neighbor pixels and corresponding programmable weighting coefficient values for the neighbor pixels) and this noise may be added to the DC transform coefficient for the given pixel prior to performing quantization. The weighting coefficient values may be chosen to shape the noise added to the DC transform coefficient values (e.g., to apply a filter operation). When applied to a chroma component of an image frame, this neighbor-data-based dithering approach may reduce color banding artifacts. When applied to the luma component, it may reduce blocking artifacts.
Abstract:
A video encoder may include a context-adaptive binary arithmetic coding (CABAC) encode component that converts each syntax element of a representation of a block of pixels to binary code, serializes it, and codes it mathematically, after which the resulting bit stream is output. A lookup table in memory and a context cache may store probability values for supported contexts, which may be retrieved from the table or cache for use in coding syntax elements. Depending on the results of a syntax element coding, the probability value for its context may be modified (e.g., increased or decreased) in the cache and, subsequently, in the table. After coding multiple syntax elements, and based on observed access patterns for probability values, a mapping or indexing for the cache or the table may be modified to improve cache performance (e.g., to reduce cache misses or access data for related contexts using fewer accesses).
Abstract:
Blocks of pixels from a video frame may be encoded in a block processing pipeline using wavefront ordering, e.g. according to knight's order. Each of the encoded blocks may be written to a particular one of multiple buffers such that the blocks written to each of the buffers represent consecutive blocks of the frame in scan order. Stitching information may be written to the buffers at the end of each row. A stitcher may read the rows from the buffers in order and generate a scan order output stream for the frame. The stitcher component may read the stitching information at the end of each row and apply the stitching information to one or more blocks at the beginning of a next row to stitch the next row to the previous row. Stitching may involve modifying pixel(s) of the blocks and/or modifying metadata for the blocks.
Abstract:
The forward transform and quantization components of the video encoders described herein may modify the quantization typically performed by video encoders to reduce quantization artifacts. For example, for a given pixel in an image macroblock, noise may be generated based on information about pixels in the neighborhood of the given pixel (e.g., DC transform coefficients or quantization errors of the neighbor pixels and corresponding programmable weighting coefficient values for the neighbor pixels) and this noise may be added to the DC transform coefficient for the given pixel prior to performing quantization. The weighting coefficient values may be chosen to shape the noise added to the DC transform coefficient values (e.g., to apply a filter operation). When applied to a chroma component of an image frame, this neighbor-data-based dithering approach may reduce color banding artifacts. When applied to the luma component, it may reduce blocking artifacts.
Abstract:
Methods and apparatus for caching neighbor data in a block processing pipeline that processes blocks in knight's order with quadrow constraints. Stages of the pipeline may maintain two local buffers that contain data from neighbor blocks of a current block. A first buffer contains data from the last C blocks processed at the stage. A second buffer contains data from neighbor blocks on the last row of a previous quadrow. Data for blocks on the bottom row of a quadrow are stored to an external memory at the end of the pipeline. When a block on the top row of a quadrow is input to the pipeline, neighbor data from the bottom row of the previous quadrow is read from the external memory and passed down the pipeline, each stage storing the data in its second buffer and using the neighbor data in the second buffer when processing the block.