text:
|Publication number
|Publication type
|Application number
|Publication date
|Aug 18, 2009
|Filing date
|May 26, 2006
|Priority date
|Dec 17, 2001
|Fee status
|Also published as
|Publication number
|Sridhar Srinivasan
|Original Assignee
|Microsoft Corporation
|Export Citation
|BiBTeX, EndNote, RefMan
|Patent Citations (32), Non-Patent Citations (23), Referenced by (17), Classifications (63), Legal Events (3)
|External Links: USPTO, USPTO Assignment, Espacenet
The present application is a continuation of U.S. patent application Ser. No. 10/322,171, entitled "Spatial Extrapolation of Pixel Values in Intraframe Video Coding and Decoding," filed Dec. 17, 2002 now U.S. Pat. No. 7,116,830, the disclosure of which is incorporated by reference, which claims the benefit of U.S. Provisional Patent Application Ser. No. 60/341,674, entitled "Techniques and Tools for Video Encoding and Decoding," filed Dec. 17, 2001, the disclosure of which is incorporated by reference. The following U.S. patent applications relate to the present application: 1) U.S. patent application Ser. No. 10/322,383, entitled, "Motion Compensation Loop With Filtering," filed Dec. 17, 2002, now U.S. Pat. No. 7,120,197; 2) U.S. patent application Ser. No. 10/322,351, entitled, "Multi-Resolution Motion Estimation and Compensation," filed Dec. 17, 2002; and 3) U.S. patent application Ser. No. 10/322,352, entitled, "Sub-Block Transform Coding of Prediction Residuals," filed Dec. 17, 2002, now U.S. Pat. No. 7,266,149.
Techniques and tools for spatial extrapolation of pixel values in intraframe video encoding and/or decoding are described. For example, to predict the pixel values for a block of pixels, a video encoder or decoder uses spatial extrapolation from the pixel values of pixels in a causal neighborhood for the block of pixels.
Digital video consumes large amounts of storage and transmission capacity. A typical raw digital video sequence includes 15 or 30 frames per second. Each frame can include tens or hundreds of thousands of pixels (also called pels). Each pixel represents a tiny element of the picture. In raw form, a computer commonly represents a pixel with 24 bits. Thus, the number of bits per second, or bitrate, of a typical raw digital video sequence can be 5 million bits/second or more.
Most computers and computer networks lack the resources to process raw digital video. For this reason, engineers use compression (also called coding or encoding) to reduce the bitrate of digital video. Compression can be lossless, in which quality of the video does not suffer but decreases in bitrate are limited by the complexity of the video. Or, compression can be lossy, in which quality of the video suffers but decreases in bitrate are more dramatic. Decompression reverses compression.
In general, video compression techniques include intraframe compression and interframe compression. Intraframe compression techniques compress individual frames, typically called I-frames, or key frames. Interframe compression techniques compress frames with reference to preceding and/or following frames, and are called typically called predicted frames, P-frames, or B-frames.
Microsoft Corporation's Windows Media Video, Version 7 ["WMV7"] includes a video encoder and a video decoder. The WMV7 encoder uses intraframe and interframe compression, and the WMV7 decoder uses intraframe and interframe decompression.
A. Intraframe Compression in WMV7
The encoder then quantizes (120) the DCT coefficients, resulting in an 8�8 block of quantized DCT coefficients (125). For example, the encoder applies a uniform, scalar quantization step size to each coefficient, which is analogous to dividing each coefficient by the same value and rounding. For example, if a DCT coefficient value is 163 and the step size is 10, the quantized DCT coefficient value is 16. Quantization is lossy. The reconstructed DCT coefficient value will be 160, not 163. Since low frequency DCT coefficients tend to have higher values, quantization results in loss of precision but not complete loss of the information for the coefficients. On the other hand, since high frequency DCT coefficients tend to have values of zero or close to zero, quantization of the high frequency coefficients typically results in contiguous regions of zero values. In addition, in some cases high frequency DCT coefficients are quantized more coarsely than low frequency DCT coefficients, resulting in greater loss of precision/information for the high frequency DCT coefficients.
The encoder then prepares the 8�8 block of quantized DCT coefficients (125) for entropy encoding, which is a form of lossless compression. The exact type of entropy encoding can vary depending on whether a coefficient is a DC coefficient (lowest frequency), an AC coefficient (other frequencies) in the top row or left column, or another AC coefficient.
The encoder encodes the DC coefficient (126) as a differential from the DC coefficient (136) of a neighboring 8�8 block, which is a previously encoded neighbor (e.g., top or left) of the block being encoded. (
The entropy encoder can encode the left column or top row of AC coefficients as a differential from a corresponding column or row of the neighboring 8�8 block.
The encoder scans (150) the 8�8 block (145) of predicted, quantized AC DCT coefficients into a one-dimensional array (155) and then entropy encodes the scanned AC coefficients using a variation of run length coding (160). The encoder selects an entropy code from one or more run/level/last tables (165) and outputs the entropy code.
A key frame contributes much more to bitrate than a predicted frame. In low or mid-bitrate applications, key frames are often critical bottlenecks for performance, so efficient compression of key frames is critical.
B. Interframe Compression in WMV7
Interframe compression in the WMV7 encoder uses block-based motion compensated prediction coding followed by transform coding of the residual error.
The WMV7 encoder splits a predicted frame into 8�8 blocks of pixels. Groups of 4 8�8 blocks form macroblocks. For each macroblock, a motion estimation process is performed. The motion estimation approximates the motion of the macroblock of pixels relative to a reference frame, for example, a previously coded, preceding frame. In
Motion estimation and compensation are effective compression techniques, but various previous motion estimation/compensation techniques (as in WMV7 and elsewhere) have several disadvantages, including:
The encoder then quantizes (450) the DCT coefficients, resulting in an 8�8 block of quantized DCT coefficients (455). The quantization step size is adjustable. Again, since low frequency DCT coefficients tend to have higher values, quantization results in loss of precision, but not complete loss of the information for the coefficients. On the other hand, since high frequency DCT coefficients tend to have values of zero or close to zero, quantization of the high frequency coefficients results in contiguous regions of zero values. In addition, in some cases high frequency DCT coefficients are quantized more coarsely than low frequency DCT coefficients, resulting in greater loss of precision/information for the high frequency DCT coefficients.
The encoder then prepares the 8�8 block (455) of quantized DCT coefficients for entropy encoding. The encoder scans (460) the 8�8 block (455) into a one dimensional array (465) with 64 elements, such that coefficients are generally ordered from lowest frequency to highest frequency, which typical creates long runs of zero values.
The encoder entropy encodes the scanned coefficients using a variation of run length coding (470). The encoder selects an entropy code from one or more run/level/last tables (475) and outputs the entropy code.
In summary of
The amount of change between the original and reconstructed frame is termed the distortion and the number of bits required to code the frame is termed the rate. The amount of distortion is roughly inversely proportional to the rate. In other words, coding a frame with fewer bits (greater compression) will result in greater distortion and vice versa. One of the goals of a video compression scheme is to try to improve the rate-distortion—in other words to try to achieve the same distortion using fewer bits (or the same bits and lower distortion).
Compression of prediction residuals as in WMV7 can dramatically reduce bitrate while slightly or moderately affecting quality, but the compression technique is less than optimal in some circumstances. The size of the frequency transform is the size of the prediction residual block (e.g., an 8�8 DCT for an 8�8 prediction residual). In some circumstances, this fails to exploit localization of error within the prediction residual block.
C. Post-Processing with a Deblocking Filter in WMV7
For block-based video compression and decompression, quantization and other lossy processing stages introduce distortion that commonly shows up as blocky artifacts—perceptible discontinuities between blocks.
To reduce the perceptibility of blocky artifacts, the WMV7 decoder can process reconstructed frames with a deblocking filter. The deblocking filter smoothes the boundaries between blocks.
While the deblocking filter in WMV7 improves perceived video quality, it has several disadvantages. For example, the smoothing occurs only on reconstructed output in the decoder. Therefore, prediction processes such as motion estimation cannot take advantage of the smoothing. Moreover, the smoothing by the post-processing filter can be too extreme.
D. Standards for Image and Video Compression and Decompression
Aside from WMV7, several international standards relate to video compression and decompression. These standards include the Motion Picture Experts Group ["MPEG"] 1, 2, and 4 standards and the H.261, H.262, and H.263 standards from the International Telecommunication Union ["ITU"]. Like WMV7, these standards use a combination of intraframe and interframe compression, although the standards typically differ from WMV7 in the details of the compression techniques used. For additional detail about the standards, see the standards' specifications themselves.
In addition, several international standards relate to still image compression and decompression, for example, the standards specified by the Joint Photographic Experts Group ["JPEG"]. These standards use intraframe compression to compress a single image, but typically differ from WMV7 in the details of the compression techniques used for the intraframe compression. For additional detail about the standards, see the standards' specifications themselves.
In particular, the JPEG standard includes a "lossless mode" that uses predictive coding (not just block-based DCT operations as used in other modes).
Predictor Modes in JPEG Lossless Mode
Predictor Mode
The encoder then compares the predictor with the actual value for the current pixel X (610) and encodes the difference losslessly. Pixels in the first row use the predictor 1, and pixels in the first column use the predictor 2. For additional information about JPEG lossless mode, see the relevant sections of the JPEG standard as codified by the ITU: ITU-T T.81 "Information Technology-Digital Compression and Coding of Continuous-Tone Still Images-Requirements and Guidelines (1992).
While JPEG lossless mode has some advantages, the overall compression ratio for JPEG lossless mode is not good in many cases. In addition, since JPEG lossless mode works on a pixel-by-pixel basis, it does not easily integrate with some block-based coding schemes.
Given the critical importance of video compression and decompression to digital video, it is not surprising that image and video compression and decompression are richly developed fields. Whatever the benefits of previous image and video compression and decompression techniques, however, they do not have the advantages of the following techniques and tools.
In summary, the detailed description is directed to various techniques and tools for spatial extrapolation of pixel values in intraframe video encoding and decoding. Spatial extrapolation of pixel values in intraframe video encoding and decoding addresses several of the disadvantages of intraframe compression according to the prior art, improving the efficiency of the intraframe encoding and decoding. The various techniques and tools can be used in combination or independently.
According to a first set of techniques and tools, a video encoder encodes a block of pixels in a frame using spatial extrapolation from pixels in one or more neighboring blocks in the frame, which improves the efficiency of intraframe coding. The video encoder selects the orientation of the extrapolation from any of multiple available directions. For example, for a current block in a frame, the video encoder extrapolates from sets of values within blocks to the left, top-left, and/or top according to one of thirteen extrapolation patterns, which include horizontal, vertical, and diagonal orientations. A video decoder decodes the block of pixels by extrapolating from the pixels in neighboring blocks in the frame according the extrapolation mode of the extrapolation used in the encoder.
According to a second set of techniques and tools, a video encoder predicts the extrapolation mode of a current block from the known extrapolation modes of neighboring blocks to improve coding efficiency. Prediction of extrapolation orientation can speed up selection of the extrapolation mode and/or reduce the average number of bits spent encoding the extrapolation mode. For example, a video encoder predicts the extrapolation mode of a current block based upon generalizations of the extrapolation modes of the top and left blocks. Starting from the predicted orientation, the encoder checks possible extrapolation orientations in a ranked order associated with the predicted extrapolation mode. The encoder finds a satisfactory orientation faster than with a full search through all available orientations. Moreover, the encoder uses short variable length codes for early indices in the ranked order and long variable length codes for later indices in the ranked order to reduce the average bits spent encoding the indices. Or, the encoder spends no bits encoding an extrapolation mode if the current block uses a predicted extrapolation mode or an orientation that the decoder will otherwise deduce from contextual information in the neighboring blocks in decoding. A video decoder predicts the extrapolation mode of a current block from the known orientations of neighboring blocks when reconstructing the current block, which improves decoding efficiency. For example, the decoder decodes a variable length code for the index in a ranked order associated with the predicted extrapolation mode of the current block and determines the actual extrapolation mode. Or, the decoder determines extrapolation orientation for the current block based upon contextual information in the neighboring blocks, without a variable length code for the mode of the current block.
According to a third set of techniques and tools, a video encoder uses a re-oriented frequency transform to address non-stationarity in the prediction residual of a spatially extrapolated current block of pixels. In general, spatial extrapolation for a current block yields more accurate values close to neighboring block(s) from which values are extrapolated into the current block. As a result, the prediction residual is more significant (e.g., higher variance) further from the neighboring block(s). The video encoder addresses this non-stationarity with the re-oriented frequency transform. For example, for a block of DCT coefficients, the video encoder lifts one of more AC coefficients as a function of the DC coefficient to compensate for the non-stationarity, which increases energy compaction in the prediction residual. A video decoder also addresses the non-stationarity in the prediction residual. For example, the decoder applies a re-oriented inverse DCT and compensates for the non-orthogonality by inverse lifting selected AC coefficients. In various circumstances, the video encoder can disable the re-oriented frequency transform (using the ordinary frequency transform instead), and the decoder can do the same for the inverse transform, based upon contextual information.
According to a fourth set of techniques and tools, depending on the extrapolation orientation for a current block, a video encoder selects from among plural available scan patterns for converting the frequency coefficients for a prediction residual into a one-dimensional array for entropy encoding, which improves entropy encoding efficiency. For example, a video encoder selects a scan pattern for a generalization of the extrapolation orientation, and the scan pattern decreases entropy in the one-dimensional array for subsequent run-level encoding. Depending on the extrapolation orientation for a current block, a video decoder selects from among plural available scan patterns for converting a one-dimensional array of values into frequency coefficients of a prediction residual.
According to a fifth set of techniques and tools, depending on contextual information in neighboring blocks, a video encoder selects or switches an entropy encoding table from among plural available entropy encoding tables for a spatially extrapolated current block. For example, based upon the minimum number of non-zero values among neighboring blocks of a current block, the encoder selects among available entropy encoding tables for encoding a DC frequency coefficient, and the encoder switches between available entropy encoding tables during encoding of AC frequency coefficients. Depending on contextual information in neighboring blocks, a video decoder selects or switches an entropy decoding table from among plural entropy decoding tables, for example, based upon the minimum number of non-zero values among neighboring blocks of a current block.
According to a sixth set of techniques and tools, a video encoder processes reconstructed blocks within a spatial extrapolation loop to reduce block boundaries, which improves the quality of spatial extrapolation for subsequent blocks in the frame. For example, a video encoder processes one or more rows or columns of a reconstructed neighboring block to reduce discontinuities between the reconstructed current block and reconstructed neighboring blocks. A video decoder also processes reconstructed blocks within a spatial extrapolation loop to reduce block boundaries.
Additional features and advantages will be made apparent from the following detailed description of different embodiments that proceeds with reference to the accompanying drawings.
The present application relates to techniques and tools for video encoding and decoding. In various described embodiments, a video encoder incorporates techniques that improve the efficiency of intraframe coding, a video decoder incorporates techniques that improve the efficiency of intraframe decoding, and a bitstream format includes flags and other codes to incorporate the techniques.
The various techniques and tools can be used in combination or independently. Different embodiments implement one or more of the described techniques and tools.
I. Computing Environment
With reference to
A computing environment may have additional features. For example, the computing environment (700) includes storage (740), one or more input devices (750), one or more output devices (760), and one or more communication connections (770). An interconnection mechanism (not shown) such as a bus, controller, or network interconnects the components of the computing environment (700). Typically, operating system software (not shown) provides an operating environment for other software executing in the computing environment (700), and coordinates activities of the components of the computing environment (700).
The storage (740) may be removable or non-removable, and includes magnetic disks, magnetic tapes or cassettes, CD-ROMs, DVDs, or any other medium which can be used to store information and which can be accessed within the computing environment (700). The storage (740) stores instructions for the software (780) implementing the video encoder or decoder.
The input device(s) (750) may be a touch input device such as a keyboard, mouse, pen, or trackball, a voice input device, a scanning device, or another device that provides input to the computing environment (700). For audio or video encoding, the input device(s) (750) may be a sound card, video card, TV tuner card, or similar device that accepts audio or video input in analog or digital form, or a CD-ROM or CD-RW that reads audio or video samples into the computing environment (700). The output device(s) (760) may be a display, printer, speaker, CD-writer, or another device that provides output from the computing environment (700).
The communication connection(s) (770) enable communication over a communication medium to another computing entity. The communication medium conveys information such as computer-executable instructions, audio or video input or output, or other data in a modulated data signal. A modulated data signal is a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal. By way of example, and not limitation, communication media include wired or wireless techniques implemented with an electrical, optical, RF, infrared, acoustic, or other carrier.
The techniques and tools can be described in the general context of computer-readable media. Computer-readable media are any available media that can be accessed within a computing environment. By way of example, and not limitation, with the computing environment (700), computer-readable media include memory (720), storage (740), communication media, and combinations of any of the above.
The techniques and tools can be described in the general context of computer-executable instructions, such as those included in program modules, being executed in a computing environment on a target real or virtual processor. Generally, program modules include routines, programs, libraries, objects, classes, components, data structures, etc. that perform particular tasks or implement particular abstract data types. The functionality of the program modules may be combined or split between program modules as desired in various embodiments. Computer-executable instructions for program modules may be executed within a local or distributed computing environment.
For the sake of presentation, the detailed description uses terms like "determine," "select," "adjust," and "apply" to describe computer operations in a computing environment. These terms are high-level abstractions for operations performed by a computer, and should not be confused with acts performed by a human being. The actual computer operations corresponding to these terms vary depending on implementation.
II. Generalized Video Encoder and Decoder
The relationships shown between modules within the encoder and decoder indicate the main flow of information in the encoder and decoder; other relationships are not shown for the sake of simplicity. In particular,
The encoder (800) and decoder (900) are block-based and use a 4:2:0 macroblock format with each macroblock including 4 luminance 8�8 luminance blocks (at times treated as one 16�16 macroblock) and two 8�8 chrominance blocks. Alternatively, the encoder (800) and decoder (900) are object-based, use a different macroblock or block format, or perform operations on sets of pixels of different size or configuration than 8�8 blocks and 16�16 macroblocks.
Depending on implementation and the type of compression desired, modules of the encoder or decoder can be added, omitted, split into multiple modules, combined with other modules, and/or replaced with like modules. In alternative embodiments, encoder or decoders with different modules and/or other configurations of modules perform one or more of the described techniques.
A. Video Encoder
The encoder system (800) compresses predicted frames and key frames. For the sake of presentation,
A predicted frame [also called p-frame, b-frame for bi-directional prediction, or inter-coded frame] is represented in terms of prediction (or difference) from one or more other frames. A prediction residual is the difference between what was predicted and the original frame. In contrast, a key frame [also called i-frame, intra-coded frame] is compressed without reference to other frames.
If the current frame (805) is a forward-predicted frame, a motion estimator (810) estimates motion of macroblocks or other sets of pixels of the current frame (805) with respect to a reference frame, which is the reconstructed previous frame (825) buffered in the frame store (820). In alternative embodiments, the reference frame is a later frame or the current frame is bi-directionally predicted. The motion estimator (810) can estimate motion by pixel, � pixel, � pixel, or other increments, and can switch the resolution of the motion estimation on a frame-by-frame basis or other basis. The resolution of the motion estimation can be the same or different horizontally and vertically. The motion estimator (810) outputs as side information motion information (815) such as motion vectors. A motion compensator (830) applies the motion information (815) to the reconstructed previous frame (825) to form a motion-compensated current frame (835). The prediction is rarely perfect, however, and the difference between the motion-compensated current frame (835) and the original current frame (805) is the prediction residual (845). Alternatively, a motion estimator and motion compensator apply another type of motion estimation/compensation.
A frequency transformer (860) converts the spatial domain video information into frequency domain (i.e., spectral) data. For block-based video frames, the frequency transformer (860) applies a discrete cosine transform ["DCT"] or variant of DCT to blocks of the pixel data or prediction residual data, producing blocks of DCT coefficients. Alternatively, the frequency transformer (860) applies another conventional frequency transform such as a Fourier transform or uses wavelet or subband analysis. In embodiments in which the encoder uses spatial extrapolation (not shown in
A quantizer (870) then quantizes the blocks of spectral data coefficients. The quantizer applies uniform, scalar quantization to the spectral data with a step-size that varies on a frame-by-frame basis or other basis. Alternatively, the quantizer applies another type of quantization to the spectral data coefficients, for example, a non-uniform, vector, or non-adaptive quantization, or directly quantizes spatial domain data in an encoder system that does not use frequency transformations. In addition to adaptive quantization, the encoder (800) can use frame dropping, adaptive filtering, or other techniques for rate control.
When a reconstructed current frame is needed for subsequent motion estimation/compensation, an inverse quantizer (876) performs inverse quantization on the quantized spectral data coefficients. An inverse frequency transformer (866) then performs the inverse of the operations of the frequency transformer (860), producing a reconstructed prediction residual (for a predicted frame) or a reconstructed key frame. If the current frame (805) was a key frame, the reconstructed key frame is taken as the reconstructed current frame (not shown). If the current frame (805) was a predicted frame, the reconstructed prediction residual is added to the motion-compensated current frame (835) to form the reconstructed current frame. The frame store (820) buffers the reconstructed current frame for use in predicting the next frame. In some embodiments, the encoder applies a deblocking filter to the reconstructed frame to adaptively smooth discontinuities in the blocks of the frame.
The entropy coder (880) compresses the output of the quantizer (870) as well as certain side information (e.g., motion information (815), spatial extrapolation modes, quantization step size). Typical entropy coding techniques include arithmetic coding, differential coding, Huffman coding, run length coding, LZ coding, dictionary coding, and combinations of the above. The entropy coder (880) typically uses different coding techniques for different kinds of information (e.g., DC coefficients, AC coefficients, different kinds of side information), and can choose from among multiple code tables within a particular coding technique.
The entropy coder (880) puts compressed video information (895) in the buffer (890). A buffer level indicator is fed back to bitrate adaptive modules.
The compressed video information (895) is depleted from the buffer (890) at a constant or relatively constant bitrate and stored for subsequent streaming at that bitrate. Therefore, the level of the buffer (890) is primarily a function of the entropy of the filtered, quantized video information, which affects the efficiency of the entropy coding. Alternatively, the encoder system (800) streams compressed video information immediately following compression, and the level of the buffer (890) also depends on the rate at which information is depleted from the buffer (890) for transmission.
Before or after the buffer (890), the compressed video information (895) can be channel coded for transmission over the network. The channel coding can apply error detection and correction data to the compressed video information (895).
B. Video Decoder
The decoder system (900) decompresses predicted frames and key frames. For the sake of presentation,
A buffer (990) receives the information (995) for the compressed video sequence and makes the received information available to the entropy decoder (980). The buffer (990) typically receives the information at a rate that is fairly constant over time, and includes a jitter buffer to smooth short-term variations in bandwidth or transmission. The buffer (990) can include a playback buffer and other buffers as well. Alternatively, the buffer (990) receives information at a varying rate. Before or after the buffer (990), the compressed video information can be channel decoded and processed for error detection and correction.
The entropy decoder (980) entropy decodes entropy-coded quantized data as well as entropy-coded side information (e.g., motion information (815), spatial extrapolation modes, quantization step size), typically applying the inverse of the entropy encoding performed in the encoder. Entropy decoding techniques include arithmetic decoding, differential decoding, Huffman decoding, run length decoding, LZ decoding, dictionary decoding, and combinations of the above. The entropy decoder (980) frequently uses different decoding techniques for different kinds of information (e.g., DC coefficients, AC coefficients, different kinds of side information), and can choose from among multiple code tables within a particular decoding technique.
If the frame (905) to be reconstructed is a forward-predicted frame, a motion compensator (930) applies motion information (915) to a reference frame (925) to form a prediction (935) of the frame (905) being reconstructed. For example, the motion compensator (930) uses a macroblock motion vector to find a macroblock in the reference frame (925). A frame buffer (920) stores previous reconstructed frames for use as reference frames. The motion compensator (930) can compensate for motion at pixel, � pixel, � pixel, or other increments, and can switch the resolution of the motion compensation on a frame-by-frame basis or other basis. The resolution of the motion compensation can be the same or different horizontally and vertically. Alternatively, a motion compensator applies another type of motion compensation. The prediction by the motion compensator is rarely perfect, so the decoder (900) also reconstructs prediction residuals.
When the decoder needs a reconstructed frame for subsequent motion compensation, the frame store (920) buffers the reconstructed frame for use in predicting the next frame. In some embodiments, the encoder applies a deblocking filter to the reconstructed frame to adaptively smooth discontinuities in the blocks of the frame.
An inverse quantizer (970) inverse quantizes entropy-decoded data. In general, the inverse quantizer applies uniform, scalar inverse quantization to the entropy-decoded data with a step-size that varies on a frame-by-frame basis or other basis. Alternatively, the inverse quantizer applies another type of inverse quantization to the data, for example, a non-uniform, vector, or non-adaptive quantization, or directly inverse quantizes spatial domain data in a decoder system that does not use inverse frequency transformations.
An inverse frequency transformer (960) converts the quantized, frequency domain data into spatial domain video information. For block-based video frames, the inverse frequency transformer (960) applies an inverse DCT ["IDCT"] or variant of IDCT to blocks of the DCT coefficients, producing pixel data or prediction residual data for key frames or predicted frames, respectively. Alternatively, the frequency transformer (960) applies another conventional inverse frequency transform such as a Fourier transform or uses wavelet or subband synthesis. In embodiments in which the decoder uses spatial extrapolation (not shown in
III. Intraframe Encoding and Decoding
In one or more embodiments, a video encoder exploits redundancies in typical still images in order to code the information using a smaller number of bits. The video encoder uses spatial extrapolation of a current block of the image being encoded from its previously decoded neighborhood in the image. The encoder encodes information describing the direction and type of the spatial extrapolation, and then encodes the difference between the block as predicted with spatial extrapolation and the original block. Various features of the spatial extrapolation can be used in combination or independently. These features include, but are not limited to:
1a) Using spatial extrapolation in an encoder or decoder to reduce block entropy in intraframe compression.
1b) Using one of multiple extrapolation modes in an encoder or decoder. The modes can include linear directional, blended, and/or bi-directional modes.
2a) Prediction of extrapolation mode for a current block from contextual information in neighboring blocks. Differential orientations are rank ordered conditioned on a predicted extrapolation mode.
2b) Using the rank orderings to compute spatial extrapolations, which improves the performance of the encoder.
2c) Selectively transmitting differential orientations, which reduces overall bitrate.
3a) Using a skewed frequency transform in an encoder or decoder for coding/decoding a prediction residual for a spatially extrapolated block. The skewed frequency transform exploits the non-stationary nature of the prediction residual.
3b) Adaptively disabling the skewed frequency transform, thereby preventing banding artifacts.
4) Using one of multiple scan patterns depending on extrapolation mode in an encoder or decoder.
5a) Using contextual information in neighboring blocks to select entropy code tables in an encoder or decoder.
5b) Using contextual information in neighboring blocks to switch entropy code tables in an encoder or decoder.
6a) Using a deblocking filter in a spatial extrapolation loop in an encoder or decoder to smooth block discontinuities, which improves spatial extrapolation.
6b) Using an adaptive deblocking filter in such a spatial extrapolation loop.
Spatial extrapolation is performed on a block basis across the luminance channel for macroblocks in 4:2:0 or another macroblock format. In the chrominance channels, coding takes place block by block, with the spatial extrapolation information being pulled from the corresponding luminance blocks. The extrapolation mode (sometimes called the orientation mode or prediction mode) determines the specific operation used to extrapolate the block. In general, side information regarding the mode of a block is transmitted as part of the bitstream (exceptions are dealt with later).
With reference to
A. Extrapolation Modes
Extrapolation modes are sets of rules that determine the extrapolation of the current block from its causal neighborhood. Each mode is associated with a distinct extrapolator, and one out of these modes is picked for encoding the current block. In one implementation, the video encoder and decoder uses thirteen extrapolation modes. These include horizontal, vertical and seven diagonal extrapolations of the predicting edges (i.e. edge pixels of the causal neighbor blocks abutting the current block), smooth blends of horizontal and vertical predictions, and a bi-directional diffusion type operation called the null prediction. In addition, there is a mode used when the causal blocks have negligible variation (flat condition).
A video encoder gets (1110) a block of pixels such as an 8�8 block of pixels in a key frame. The encoder initializes (1120) the context for the block by initializing data structures and settings used to select the extrapolation mode for the block. For example, the encoder initializes arrays as shown in
The video encoder selects (1130) an extrapolation mode for the block. For example, the video encoder selects a mode from among the thirteen modes described below. The video encoder can select an extrapolation mode using prediction of the extrapolation mode as shown in
The encoder encodes (1150) the extrapolation mode for transmission as side information. For example, the encoder encodes an index representing a differential ordering in a rank order for extrapolation modes selected using prediction. Alternatively, the encoder encodes the extrapolation mode using a Huffman code or other entropy code, or sends the extrapolation mode as a literal value. In some embodiments, the encoder need not encode or send the extrapolation mode for a block if the extrapolation mode can be derived using contextual information available to the encoder and the decoder. Orientation information is not transmitted for the chrominance channels in any case. Chrominance blocks use a meta-direction of the top-left block in the corresponding luminance macroblock. Alternatively, an encoder selects a spatial extrapolation mode and encodes mode information for chrominance blocks as well as luminance blocks.
The encoder encodes (1170) the residual error between the original block and the spatially extrapolated block. For example, the encoder uses a skewed DCT, which can be selected from among one or more available skewed DCTs. Alternatively, the encoder uses another frequency transform or sends the residual in an uncompressed form. In some embodiments, the encoder does not encode or send the residual, for example, due to bitrate constraints, because the spatial extrapolation alone is adequate, or because the encoder did not compute a residual. The encoder can also use entropy encoding to encode the residual, as described below.
The encoder reconstructs the block so that the block can be used for spatial extrapolation of other blocks in the frame. In some embodiments, the encoder applies a deblocking filter to the reconstructed block to smooth block discontinuities with other, previously reconstructed blocks.
The encoder determines (1180) whether there are more blocks in the key frame. If not, the technique (1100) ends. If so, the encoder gets (1190) the next block in the key frame and initializes the context (1120) for it.
1. Initializing Context for a Block
In one implementation, the encoder predicts the orientation for the current block from that of it causal neighbors. The predicted extrapolation mode can be null, horizontal or vertical. If the current block is at the top left corner of the image, the predicted extrapolation mode is null. Otherwise, if the current block is in the topmost row, the predicted extrapolation mode is horizontal (8), or if the current block is in leftmost column, the predicted extrapolation mode is vertical (4). In other cases, the predicted extrapolation mode is a function of the top-left (TL), left (L) and top (T) block meta-directions.
The encoder maps a meta-direction from an actual orientation direction, for example, as shown to Table 2. Alternatively, the encoder uses a linear function or other non-linear function to map an actual orientation direction to a meta-direction.
Mapping Actual Orientation Directions to Meta-directions
Actual Orientation
Horizontal (8)
Vertical (4)
All others
Null (0)
Based on the meta-directions of the top-left (TL), left (L) and top (T) blocks, and a quantization parameter ["QP"], the encoder computes the predicted extrapolation mode, for example, as shown in Table 3. Alternatively, the encoder uses a linear or other non-linear function to compute a predicted extrapolation mode for a block from the meta-directions from the neighboring blocks, or uses more or fewer predicted modes than Table 3. Working with the same contextual information during decoding, the decoder can also compute a predicted extrapolation mode for the predicted block.
Determining Predicted Extrapolation Mode from Meta-Directions
Extrapolation Mode
If the meta-directions of blocks L
and T are the same, use the meta-
direction as the predicted mode.
Horizontal continuity from left.
Vertical continuity from top.
Horizontal continuity over-rides
Code segment:
if (TL==L) PEM=T;
else {
if (QP>12) PEM=T;
else {
if (TL==T) PEM=L;
else PEM=TL;
With reference to
Before spatial extrapolation of a block, the encoder performs a set of operations on the causal predicting edges. A decoder performs the same operations on the same causal predicting edges, such that the encoder and decoder can use the same information for spatial extrapolation and context. The encoder and decoder use the pixel information when evaluating extrapolation modes, and can also use contextual information to select extrapolations modes by default under certain circumstances.
First, the encoder/decoder fills the arrays pLeft[ ] and pTop[ ]. If the predicted block is at the top left boundary of a key frame, all neighbors pLeft[ ] and pTop[ ]are set to 128. If the predicted block is on the top row (but not at the left extreme), pLeft[0] and pTop[ ]are set to pLeft[1]. If the predicted block is in the first column (but not at the top extreme), all elements of pLeft[ ]are set to pTop[0]. The neighboring elements are copied from the causal reconstructed neighbor blocks of the current color plane.
Next, the encoder/decoder computes contextual information. Specifically, the encoder/decoder computes the range of the immediate neighbors (i.e., the maximum value minus the minimum value of pLeft[0 . . . 8] and pTop[0 . . . 7]). In general, a large range indicates extrapolation could be useful for the predicted block; a small range indicates the predicted block is likely similar to the neighboring blocks, and the predicted extrapolation mode will likely suffice. For example, if the range is either less than QP or less than 3, the predicted extrapolation mode of the predicted block is reset to the null predictor. If range is less than 3, flat mode is activated, which is described below.
For luminance channels, if the range is smaller than 2QP, and the predicted block is not on the top or left periphery of the image, horizontal and vertical predicted extrapolation modes are changed to blended horizontal and blended vertical modes, which are described below. Also, if the range is smaller than 2QP, the orientation mode is not transmitted (or received). This ensures that bits are not wasted transmitting spatial orientation information if there is little information in the causal boundary to begin with.
Alternatively, the encoder/decoder compute other contextual information and/or check other contextual conditions.
2. Selecting an Extrapolation Mode
The encoder computes (1310) a predicted extrapolation mode, as described above. The encoder then initializes (1320) the context for the block and determines (1325) whether the encoder needs to check other extrapolation modes, as described above. If the context indicates what the extrapolation mode should be for the block, the technique (1300) ends. For example, the range of the immediate neighboring pixels of the block might indicate that the mode should be blended horizontal, blended vertical, or flat.
Otherwise, the encoder then checks (1330) an extrapolation mode in a rank order associated with predicted extrapolation mode. For example, exemplary rank orders for null, horizontal, and vertical predicted extrapolation modes are shown in
Exemplary Rank Orders
Predicted Mode
Rank Orders
int orderArray[ ] = {0, 8, 4, 10, 11, 2, 6, 9, 1, 3, 5, 7};
int orderArrayH[ ] = {8, 0, 4, 10, 11, 1, 7, 2, 6, 9, 3, 5};
int orderArrayV[ ] = {4, 0, 8, 11, 10, 3, 5, 2, 6, 9, 1, 7};
Alternatively, the encoder uses different rank orders.
The rank orders indicate by mode index the order in which the encoder should try extrapolation modes. The first element of each array is the associated predicted extrapolation mode, and the remaining modes are ordered roughly according to likelihood of suitability for the block. Later, shorter variable length codes can be assigned to indices early in a rank order, and longer variable length codes to indices later in the rank order.
The encoder checks (1330) an extrapolation mode by applying the extrapolation to the block and comparing the spatial extrapolation to the original block. The encoder can measure the magnitude of the difference in the spatial domain or in the frequency domain (e.g., DCT of the difference block) with an error measure. The error measure is a sum of absolute differences ["SAD"], mean square error ["MSE"], a perceptual distortion measure, or other error measure. The encoder can also consider the relative bit costs of variable length codes associated with extrapolation mode information when evaluating the fitness of an extrapolation mode, which favors modes with shorter corresponding variable length codes (which typically appear earlier in the rank order).
In one implementation, if the encoder determines that the orientation of a certain 8�8 block is significant, the encoder estimates the orientation. The estimation process starts by rank-ordering 12 possible orientation directions in one of three orderings corresponding to the prediction meta-direction (as shown in the rank orders above).
The encoder then computes a cost function for each orientation. The cost function considers the difference between the actual pixel values of the block being encoded and the spatial extrapolation resulting from applying the particular orientation. The cost function is a composite of: (1) the quantization error of the DCT coefficients associated with the error signal, (2) a simplification of the run-length information, and (3) a base cost corresponding to the rank order of the particular orientation.
The base cost is defined as
where QP is the quantization parameter. The quantization error is defined as:
abs(reconstructed_value−unquantized_value) (1),
which is summed over all coefficients (i.e., SAD). Coefficients that are quantized to zero have the quantization error:
abs(unquantized_value) (2).
The simplified run-length cost is only accrued for coefficients quantized to non-zero values. This cost is given by:
(index+32)*QP (3),
where index is the scan order index in the appropriate zigzag scan order for the current orientation. Scan orders are described below.
In other implementations, the encoder uses different cost functions and/or considers more or less information. Alternatively, the encoder evaluates the fitness of an extrapolation mode using an open-loop or heuristic approach.
The encoder determines (1350) whether it should continue checking additional extrapolation modes. The encoder stops if it has checked the last extrapolation mode in a rank order. The encoder can do a full search of all extrapolation modes. Alternatively, the encoder terminates the search if certain conditions are satisfied. For example, the encoder terminates the search if the fitness measure for the mode the encoder just checked exceeds the fitness measure of the best mode checked so far, with the assumption that matches get worse further down in the rank order. Or, the encoder can terminate on other conditions.
If the encoder determines (1350) it should not continue, the technique (1300) ends and the encoder goes on with the encoding of the extrapolation mode and residual error, reconstruction, etc. Otherwise, the encoder gets (1370) and checks (1330) the next extrapolation mode in the rank order.
3. Horizontal and Vertical Modes
where └ ┘ is a downward rounding operation.
The vertical extrapolation mode (mode index 4) is the transpose of horizontal extrapolation mode. In other words, on a column-by-column basis, the pixel values a and b in the bottom two rows of the reconstructed block to the top of the predicted block are averaged. The averaged value c is copied across all rows of the corresponding column of the predicted block.
Alternatively, the encoder and decoder use other formulas for horizontal and vertical extrapolation.
4. Diagonal Modes
Alternatively, the encoder and decoder use other formulas for diagonal extrapolation.
5. Blended Modes
The blended modes are the default modes under certain circumstances, depending on context. For example, for some blocks, if the range of immediate neighboring values is less than 2QP, a blended horizontal or vertical extrapolation mode is used for a horizontal or vertical predicted mode, respectively, and extrapolation mode information is not transmitted.
Alternatively, the encoder and decoder use other formulas for blended extrapolation.
6. Null Mode
The null mode is the most common mode for low bitrate applications.
Therefore, in one implementation, the null extrapolation mode is based on an approximate separable reformulation of the above that is faster to compute. In this simplification, the encoder computes two arrays of cumulants corresponding to the pixel locations of the predicting edges. The current predicted pixel is then a linear sum of one element from each cumulant array.
The first stage of building the cumulant arrays is to set up an array of weights roughly corresponding to lowpass filtered left and top predicting edge pixels. These cumulant arrays are labeled pLeftSum and pTopSum respectively.
Once the arrays pLeftSum and pTopSum are set up, the predicted block is computed by summing the appropriate element from each array, using the rule.
where the weight arrays pWtsT[i][j] and pWtsL[i][j] are shown in
Alternatively, the encoder and decoder use other formulas for bi-directional extrapolation or different weights.
7. Flat Mode
The flat extrapolation mode (no index number) is used under circumstances in which the encoder finds little significant information in the causal boundary of the current block. Therefore, the encoder assigns to each pixel of the current block an average value from the causal boundary. For example, the encoder computes a DC value iDcValue:
The flat mode is the default mode under certain circumstances, depending on context. For example, for some blocks, if the range of immediate neighboring values is less than 3, flat mode is used and extrapolation mode information is not transmitted. The residual block for a block predicted in flat mode is computed and encoded. Special treatment of predicted blocks and residual blocks under flat mode is further described below.
Alternatively, the encoder and decoder use other formulas for flat extrapolation.
B. Orientation Transmission
The encoder transmits the orientation of the predicted block (i.e., the extrapolation mode or differential rank ordering) when the decoder needs such information to determine the actual extrapolation mode of the predicted block. Under certain circumstances (e.g., the circumstances discussed above with respect to initialization of context), the encoder does not transmit (nor does the decoder expect) orientation information.
In one implementation, the encoder transmits orientation information only for luminance blocks, not chrominance blocks, of macroblocks. The chrominance blocks are spatially extrapolated using information provided or derived for the luminance blocks (e.g., information for the top-left luminance blocks, median information, mean information).
When the encoder selects extrapolation mode using prediction, the encoder can send (and the decoder can receive) extrapolation mode information as a difference between the actual extrapolation mode and a predicted extrapolation mode, for example, a rank order differential. A rank order differential is an index in a rank order. The rank order can be associated with a predicted extrapolation mode, in which case the encoder/decoder selects a rank order conditioned on the direction of the predicted extrapolation mode. For example, exemplary orderings for null, horizontal, and vertical predicted extrapolation modes are shown above in Table 4. Alternatively, the encoder uses different rank orders and/or rank orders for more or fewer predicted extrapolation modes.
If a decoder receives a differential index 7 for a block whose predicted extrapolation mode is horizontal, orderArrayH[7] gives the actual orientation to be mode 2 (diagonal from the top-right). Orderings are designed for coding efficiency—shorter variable length codes are assigned to earlier indices for more likely modes, and longer variable length codes are assigned to later indices for less likely modes. Table 5 shows Huffman code tables for differential orientation values in one implementation. Specifically, Table 5 shows two Huffman code tables for typical low bitrate conditions (e.g., indicated by QP>12). A flag signaled in the bitstream indicates which set of codes (e.g., set 0 or set 1) to use. In this implementation, different sets of Huffman code tables are used for typical high bitrate conditions (e.g., indicated by QP<=12). Other implementations use different entropy codes and/or different code tables for different predicted orientations.
Huffman Codes for Differential Orientation Values, Low Bitrate
Code Set 0
Code Set 1
With reference to
The encoder determines (1630) whether it needs to send a code or other extrapolation mode information to the decoder. For example, if the range is less than 3 or less than 2 QP, a default mode (e.g., flat, null, horizontal blended, or vertical blended) is used, and the encoder does not need to send rank order index information to the decoder. If the encoder does not need to send a code or other information, the technique ends.
Otherwise, the encoder determines (1650) the predicted orientation of the predicted block. For example, the encoder uses the predicted extrapolation mode computed during initialization. The encoder then determines (1660) the actual orientation of the predicted block. For example, the encoder uses the actual extrapolation mode as computed above by evaluating potential orientations in a rank ordering.
The encoder outputs (1670) difference information indicating the difference between the actual orientation and the predicted orientation of the predicted block. For example, the encoder outputs a Huffman code for a rank order index that indicates the difference between a predicted extrapolation mode and an actual extrapolation mode in a rank order.
With reference to
The decoder determines (1730) whether to expect a code or other extrapolation mode information from the encoder. For example, if the range is less than 3 or less than 2 QP, a default mode (e.g., flat, null, horizontal blended, or vertical blended) is used, and the encoder does not need to send rank order index information to the decoder. If the decoder does not receive a code or other information, the technique ends.
Otherwise, the decoder determines (1750) the predicted orientation of the predicted block. For example, the decoder uses a predicted extrapolation mode computed during initialization.
The decoder then decodes (1760) difference information received from the encoder. The difference information indicates a difference between the predicted orientation and an actual orientation of the predicted block. For example, the difference information is a Huffman code for a rank order index that indicates the difference between a predicted extrapolation mode and an actual extrapolation mode in a rank order.
The decoder computes (1770) the actual orientation of the predicted block. For example, the decoder combines a predicted extrapolation mode with a rank order index to determine an actual extrapolation mode in a rank ordering.
C. Re-Oriented Frequency Transform
In the residual block for a spatially extrapolated block of pixels, variance typically increases sharply from points near to point far from the abutting causal block(s). The local spatio-frequency description of the pixels varies correspondingly. The residual error of spatial prediction is typically smaller at pixels close to the block edges abutting causal block(s) from which the prediction is made. For example, for a block predicted in null mode, the abutting causal blocks are both the left and top blocks. For a horizontal (alt. vertical) extrapolator, pixels lying on the left column (alt. top row) show smaller prediction residuals.
These observations suggest the use of a re-oriented frequency transform that shows an upward trend in values at spatial locations away from the prediction edge(s). The re-oriented frequency transform addresses non-stationarity of prediction residuals, resulting in more efficient compression of the prediction residuals.
One embodiment of a re-oriented frequency transform uses basis functions that show an upward trend in values at spatial locations away from the prediction edge(s). Such basis functions are not easily implemented in practice. Therefore, some embodiments of a re-oriented frequency transform use an approximation of such an ideal frequency transform to exploit non-stationarity across pixels in a residual block in the encoding of the residual block. The approximation uses lifting in the encoder and inverse lifting in the decoder. In contrast to prior art methods that use lifting in the spatial domain, the encoder and decoder use lifting and inverse lifting in the frequency domain.
A video encoder can switch between multiple available re-oriented frequency transform modes, as shown in
In one implementation, the re-oriented transforms are re-oriented variations of DCT termed skewed DCT. Using a skewed DCT results in improved coding efficiency. The skew of the DCT is horizontal, vertical, or bi-directional and relates to the extrapolation mode of the predicted block. The horizontal and vertical SDCTs are skewed in one dimension only, whereas the null SDCT is skewed in both dimensions. Also, the horizontal and vertical skews are transposes.
The skewed inverse DCT is defined:
where T( ) is an array of frequency coefficients, B( ) is a set of basis functions, and B.(0,0) is the DC basis function for a frequency transform mode indicated by the subscript *, for example, H, V, or O for horizontal, vertical, or null (bi-directional) transform modes.
The forward SDCT is not orthonormal, and can be defined in terms of the pseudoinverse of the inverse SDCT. This potentially affects all coefficients of the forward transform. An approximation to the pseudoinverse is obtained using lifting and inverse lifting.
The encoder then lifts (2080) one or more of the DCT coefficients, where the lifting is a function of the reconstructed DC DCT coefficient value (2066). The DCT transform lifting occurs by subtracting the DC DCT coefficient (2066) from certain coefficients of the DCT coefficients. Namely, the encoder adjusts selected AC coefficients of the left column (as shown in
The lifting (2080) produces a block of skewed DCT coefficients (2085), which the encoder then quantizes (2090), for example, using a technique described in the next section. In alternative embodiments, the encoder performs lifting as a function of coefficients other than or in addition to the DC coefficient, adjusts coefficients other than the AC coefficients shown in
Inverse lifting modifies the inverse quantized transform coefficients to weight the DC response at pixels distant from the predicting edge(s). In one implementation, the decoder can use any one of four lifting modes which correspond to four skewed IDCT modes. The first lifting mode leaves the DCT coefficients untouched. The second and third lifting modes operate on the first row and column of the coefficients, respectively, resulting in horizontal and vertical weighting. The fourth lifting mode operates across the entire block. The second, third and fourth lifting modes are termed horizontal, vertical and bi-directional lifting modes, respectively. The four lifting modes correspond to, in order, regular IDCT, and horizontal, vertical and bi-directional re-oriented IDCTs.
The horizontal and vertical lifting modes are transposes of each other. Let the input inverse quantized transform coefficient matrix for the current block be denoted by pBlock[i][j], where i and j vary from 0 through 7. The horizontal lifting mode modifies four coefficients of the block according to:
The bi-directional lifting mode uses the following rule
where pBwt is the 8�8 array of weights shown in
The flat condition is a particular situation where the skewed transform presents a liability rather than an advantage. In such situations, the encoder and decoder use the ordinary DCT/IDCT on the residual for a current block. The flat condition is indicated by a coincidence of (i) range less than 3 among luminance pixels in the causal boundary of the current block (which would activate flat extrapolation mode), (ii) quantized DC coefficient being −1, 0 or 1, and (iii) no non-zero AC coefficients. Without any adjustment for the flat condition for such blocks, banding artifacts are observed resulting from "hunting" and quantization of skewed values. Lack of detail in the block makes these artifacts stand out and visually annoying.
Adjustment for the flat condition proceeds by setting all pixels in the block to a common DC value. This DC value is determined as shown in the code below, where iDC is the quantized DC coefficient, and the predicting edge DC value iDcValue is determined during setup. After adjusting for iDC, the DC value is stored back in iDcValue.
where clamp( ) returns its integer argument clamped between 0 and 255. Quantization and dequantization of DC coefficients (QuantizeDC and DeuantizeDC) are defined in the next section. The flat condition triggers the flat prediction mode in which all pixels in the predicted block are set to iDcValue. Alternatively, the flat condition is implemented with other formulas.
Following a frequency transform (e.g., DCT) of a residual block, the encoder (2310) quantizes the DC coefficient. The encoder reconstructs the DC coefficient by inverse quantization for use in later computations. The encoder then lifts (2320) one or more of the AC coefficients by adjusting the one or more AC coefficients as a function of the quantized DC coefficient. The encoder then quantizes (2330) the AC coefficients. Following steps in the encoder such as scanning and entropy coding of the quantized coefficients are not shown in
In the decoder, following entropy decoding and scanning (not shown), the decoder inverse quantizes (2340) the AC coefficients and inverse quantizes (2350) the DC coefficient. The decoder then (2360) inverse lifts the one or more of the AC coefficients that were lifted by the encoder. The decoder then applies an inverse frequency transform (not shown) such as an inverse DCT to the inverse lifted coefficients.
D. Quantization and Dequantization
The video encoder quantizes the frequency coefficients of the residual blocks. In decoding, the video decoder inverse quantizes the frequency coefficients of the residual blocks.
In one embodiment, the DC transform coefficient of a block is quantized by a flat quantizer. The reconstruction rule to generate ŷ given the quantized coefficient x is ŷ=x�QP, where QP is the quantization parameter. Quantization of AC transform coefficients is performed by a nearly-flat quantizer which has equally sized bins, except for the wider bin centered at zero. When the quantized input AC transform coefficient is x, the dequantized reconstruction ŷ is given by:
where QP is the quantization parameter and R is a reconstruction value that is either a constant for all transform coefficients or a position-dependent value. The former case is the default mode of operation, while the latter case is termed non-flat (de)quantization. In the default mode, R is 256. In this mode, the division and round-down step may be eliminated. For non-flat (de)quantization, the value of R is determined from the array gaReconstructionLevels[ ] shown in
The variable QP denotes the quantization step size. In practice, QP refers to two distinct step sizes, which are stepSize and stepSizeC. The latter quantity is used only for the chrominance DCT DC coefficient, and is related to stepSize as:
In embodiments that use the flat condition, quantization is defined at the decoder as well as the encoder. Quantization of DC coefficients proceeds by first computing an integer inverse QP:
The quantized value x corresponding to raw integer DC coefficient y is:
The dequantized value ŷ of quantized DC coefficient x is xQP.
Alternatively, the encoder/decoder use different techniques for quantization/dequantization.
E. Scan Order
Following quantization in the video encoder, the encoder scans a two-dimensional block of quantized frequency coefficients into a one-dimensional array for entropy encoding. The video decoder scans the one-dimensional array into a two-dimensional block before inverse quantization. A scan pattern indicates how elements of the two-dimensional block are ordered in the one-dimensional array. Both the encoder and the decoder use one or more scan patterns.
In some embodiments, the encoder and decoder select between multiple, available scan patterns for a residual block.
The encoder/decoder selects (2510) a scan pattern for scanning the residual block. For example, an encoder/decoder selects a scan pattern based upon contextual information for the block such as a meta-direction for the block. The meta-direction can be computed from the actual extrapolation mode of the block as shown in Table 2. For blocks which have only a predicted or default extrapolation mode, the meta-direction can be computed from that information. The encoder/decoder then applies (2520, 2530, or 2540) the selected scan pattern by reordering elements of a two-dimensional block into a one-dimensional array, or vice versa. For the sake of simplicity,
Alternatively, the encoder/decoder selects between more or fewer scan patterns and/or selects a scan pattern based upon other criteria.
F. Significant Coefficient Estimation
In the video encoder, quantized frequency coefficients that have been scanned into a one-dimensional array are entropy encoded using an entropy code table to map values to entropy codes. Conversely, in the video decoder, entropy-coded information is decoded into quantized frequency coefficients using an entropy code table to map entropy codes to values.
With reference to
The encoder/decoder then selects (2720) an entropy code table. For example, the encoder/decoder selects the entropy code table used for the first batch of n frequency coefficients (up until the switch). Alternatively, the encoder/decoder use one of multiple available entropy code tables for the first batch of n frequency coefficients. The encoder can select the code table depending on contextual information, according to encoder settings, after closed loop testing of results with different tables, or after an open loop estimation of performance with different tables. The encoder can select the table for the first batch of coefficients on a sequence-by-sequence, frame-by-frame, block-by-block, switch-by-switch, or other basis. The encoder can use the same or different tables for luminance and chrominance information. When the table selection is not based upon context, the encoder outputs a flag or other information identifying the selected entropy code table. The decoder can select the code table based upon contextual information or based upon a table selection flag received from the encoder.
The encoder/decoder processes (2730) the value for a coefficient, for example, encoding a coefficient with an entropy code in the encoder, or decoding an entropy code to a coefficient value in the decoder. If the encoder/decoder determines (2740) that there are no more coefficients or entropy codes to process, the technique ends.
Otherwise, the encoder/decoder determines (2750) whether to switch entropy code tables. For example, the encoder/decoder checks whether it has encoded/decoded n coefficients yet.
If the encoder/decoder does not switch tables, the encoder/decoder gets (2770) the next value for a coefficient and processes (2730) it. For example, if n coefficients have not yet been processed, the encoder/decoder gets (2770) the next value for a coefficient and processes (2730) it.
Otherwise, the encoder/decoder switches (2760) tables. For example, the encoder/decoder selects the entropy code table used for the second batch of frequency coefficients (after n coefficients). Alternatively, the encoder/decoder use one of multiple available entropy code tables for the second batch of frequency coefficients, as previously described. The encoder/decoder then gets (2770) the next value for a coefficient and processes (2730) it.
For the sake of simplicity,
In one implementation, an encoder and decoder use table switching based upon context as well as table selection information that is signaled. In a given I frame, all symbols of a certain type (or category) are encoded using one Huffman code table chosen out of a candidate set of tables for the type. The type is inferred from causal information available at the decoder. The index of the chosen table within the candidate set for the type is indicated by a fixed length code that precedes the first symbol of the particular type for the frame.
In this implementation, the type of a symbol includes a dependence on QP, which indicates typical low bitrate (e.g., QP>12) or high bitrate (e.g., QP<=12) conditions.
In this implementation, the DC coefficient (absolute value level) is coded jointly with a binary symbol last that signals whether there are any subsequent coefficients (last=false) or not (last=true). The joint symbol level-last is translated into a bin index and a fine address within the bin. The size of each bin (i.e., the number of joint level-last symbols in the bin, which can vary depending on the index) is known at the decoder and is 2k. The fine address for a bin is k bits long, uniquely and efficiently specifying the symbol within the bin. The index values are Huffman coded. Six types are defined for DC coefficients, three types each for low bitrate and high bitrate scenarios. The three types are shown in Table 6. Huffman code tables for each type are drawn from a candidate set of tables.
Types for DC coefficients
Luminance block; count n of non-zero AC coefficients
in causal blocks is zero.
Luminance block; count n of non-zero AC coefficients
in causal blocks is non-zero.
Chrominance block.
In this implementation, the first coded symbol (for the DC coefficient) in the transform block indicates whether there are subsequent AC value symbols. If there are, the AC value symbols are run-length encoded as a combination of run, level, and last values. The run value corresponds to the number of zero-values transform coefficients separating the current coefficient from the previously coded coefficient. Level is the magnitude of the current (nonzero) coefficient, and last is a boolean variable denoting whether the current coefficient is the last in the current block.
In this implementation, the run-level-last space is mapped into an index-fine space, where index is an address that partitions the run-level-last space into several bins (each bin containing 2k symbols) and fine is k bits uniquely identifying symbols within bins. Some bins may contain only a single triple (k=0) whereas other bins contain multiple triples (k>0). For uncommon run-level-last values, index values may be used as escape symbols. The index values are Huffman coded. Eight types are defined for AC coefficients, four types each for low bitrate and high bitrate scenarios. The four types are shown in Table 7. Huffman code tables for each type are drawn from a candidate set of tables.
Types for AC coefficients
Luminance block; DIFFORIENT value > 4.
Luminance block; DIFFORIENT <= 4; current symbol
count is less than count n of non-zero AC coefficients
in causal blocks.
Luminance block; DIFFORIENT <= 4; current symbol
count is greater than or equal to count n of non-zero
AC coefficients in causal blocks.
Chrominance block.
Alternative embodiments use different entropy coding and decoding techniques.
G. In-Loop Deblocking
Quantization and other lossy processing of the residual blocks for predicted blocks can introduce blocky artifacts into a frame. In some embodiments, an encoder/decoder applies a deblocking filter within a spatial extrapolation loop. The deblocking filter can be the same or different filter than a filter used in post-processing. The deblocking filter removes boundary discontinuities between a reconstructed predicted block and neighboring reconstructed blocks, which improves the quality of spatial extrapolation for subsequent predicted blocks. The encoder/decoder performs deblocking after decoding a block in order for spatial prediction to work as expected. This contrasts with the typical deblocking processes, which operate on the whole image after decoding.
With reference to
The video encoder/decoder filters (2830) the boundaries of the predicted block with neighboring reconstructed blocks. For example, after decoding an 8�8 block in either luminance or chrominance planes, the left and top edges of the block are subjected to a deblocking filter process.
In one implementation, the deblocking procedure is similar to MPEG-4 deblocking with a key difference. The criterion for deciding the existence of a discontinuity is dependent on the quantization parameter QP, which allows the deblocking filter to disregard false discontinuities that may be caused by the skewed IDCT. A horizontal deblocking filter operates on a left-right pair of blocks, and a vertical deblocking filter operates on a top-bottom pair. Horizontal and vertical deblocking filters are transposes. The horizontal deblocking filter is explained here with reference to
As in MPEG-4, two deblocking modes are used—one mode applies a short filter to one pixel on either side of the block edge whereas the other mode applies a longer filter to two pixels on either side. For each of the eight horizontal edge pixel-pairs labeled as v4-v5 in
If E is less than 6, the encoder/decoder chooses the short filter, which is defined as in MPEG-4. If E is greater than or equal to 6, the range of the values v0 through v9 is computed. Range is defined as the maximum minus the minimum value of these ten variables. If the range is greater than or equal to 2QP, the encoder/decoder uses the short filter. Otherwise, the long filter is applied, and v3 through v6 are modified as follows
The encoder/decoder performs no vertical deblocking for the top row of blocks and no horizontal deblocking for the left column. Horizontal deblocking is followed by vertical deblocking for the block. Other binary conditions relating to existence of residuals (which are non-zero transform coefficients for the current block) and absolute spatial orientation also apply:
deblock(int blockX, int blockY, bool bResidual, int iOrient) { if ((blockY > 0) && (bResidual || (iOrient != 0 && iOrient != 4))) horizontalDeblockFilter( ); if ((blockX > 0) && (bResidual || (iOrient != 0 && iOrient != 8))) verticalDeblockFilter( ); }
where blockX and blockY are horizontal and vertical block indices, bResidual is true when the flat condition is activated or when there is at least one non-zero coefficient in the residual, and iOrient is the absolute orientation direction.
In other implementations, the filter definitions, number of different filters, and/or adaptive filtering conditions are different than above. In alternative embodiments, only those pixels that contribute to spatial extrapolation of subsequent blocks are filtered by the in-loop deblocking filter.
Following the filtering, the encoder/decoder determines (2840) whether there are any more blocks in the frame. If not, the technique ends. If so, the encoder/decoder gets (2850) block information for the next predicted block and reconstructs (2820) the next predicted block.
In some embodiments, the video encoder enables or disables in-loop deblocking of predicted blocks based upon encoder settings, context information, or other criteria. The encoder can embed a switch at a frame, sequence, or other level to enable/disable deblocking.
IV. Interframe Encoding and Decoding
Inter-frame coding exploits temporal redundancy between frames to achieve compression. Temporal redundancy reduction uses previously coded frames as predictors when coding the current frame.
A. Motion Estimation
In one or more embodiments, a video encoder exploits temporal redundancies in typical video sequences in order to code the information using a smaller number of bits. The video encoder uses motion estimation/compensation of a macroblock or other set of pixels of a current frame with respect to a reference frame. A video decoder uses corresponding motion compensation. For additional detail about motion estimation and motion compensation in some embodiments, see U.S. patent application Ser. No. 10/322,351, entitled "Multi-Resolution Motion Estimation and Compensation," filed Dec. 17, 2002.
B. Coding of Prediction Residuals
Motion estimation is rarely perfect, and the video encoder uses prediction residuals to represent the differences between the original video information and the video information predicted using motion estimation. In one or more embodiments, a video encoder exploits redundancies in prediction residuals in order to code the information using a smaller number of bits. For additional detail about coding of prediction residuals in some embodiments, see U.S. patent application Ser. No. 10/322,352, entitled "Sub-Block Transform Coding of Prediction Residuals," filed Dec. 17, 2002.
C. Loop Filtering
Quantization and other lossy processing of prediction residuals can cause blocky artifacts in reference frames that are used for motion estimation/compensation for subsequent predicted frames. In one or more embodiments, a video encoder processes a reconstructed frame to reduce blocky artifacts prior to motion estimation using the reference frame. A video decoder processes the reconstructed frame to reduce blocky artifacts prior to motion compensation using the reference frame. With deblocking, a reference frame becomes a better reference candidate to encode the following frame. Thus, using the deblocking filter improves the quality of motion estimation/compensation, resulting in better prediction and lower bitrate for prediction residuals. For additional detail about using a deblocking filter in motion estimation/compensation in some embodiments, see U.S. patent application Ser. No. 10/322,383, entitled "Motion Compensation Loop With Filtering," filed Dec. 17, 2002.
Having described and illustrated the principles of my invention with reference to various embodiments, it will be recognized that the various embodiments can be modified in arrangement and detail without departing from such principles. It should be understood that the programs, processes, or methods described herein are not related or limited to any particular type of computing environment, unless indicated otherwise. Various types of general purpose or specialized computing environments may be used with or perform operations in accordance with the teachings described herein. Elements of embodiments shown in software may be implemented in hardware and vice versa.
In view of the many possible embodiments to which the principles of my invention may be applied, I claim as my invention all such embodiments as may come within the scope and spirit of the following claims and equivalents thereto.
|Cited Patent
|Filing date
|Publication date
|Jun 15, 1990
|Nov 26, 1991
|General Instrument Corporation
|Adaptive motion compensation for digital television
|Feb 21, 1991
|Nov 9, 1993
|Gte Laboratories Incorporated
|Layered DCT video coder for packet switched ATM networks
|Apr 29, 1993
|Aug 15, 1995
|Rca Thomson Licensing Corporation
|Error concealment apparatus for MPEG-like video data
|Jun 18, 1993
|Nov 14, 1995
|Samsung Electronics Co., Ltd.
|Apparatus and method of coding/decoding video data
|Dec 22, 1992
|Nov 14, 1995
|Microsoft Corporation
|Method and system for compressing video data
|Jan 29, 1993
|Aug 6, 1996
|Microsoft Corporation
|Digital video data compression technique
|Mar 22, 1996
|Jun 9, 1998
|Microsoft Corporation
|Representation and encoding of general arbitrary shapes
|Mar 22, 1996
|Jul 7, 1998
|Microsoft Corporation
|Sprite coding
|Jan 19, 1996
|Aug 25, 1998
|Microsoft Corporation
|Method for expanding contracted video images
|Oct 18, 1994
|Sep 1, 1998
|Intel Corporation
|Encoding video signals using local quantization levels
|Dec 18, 1995
|Dec 15, 1998
|Lucent Technologies Inc.
|Method and apparatus for post-processing images
|Dec 31, 1997
|Aug 31, 1999
|Microsoft Corporation
|Video coding using adaptive coding of block parameters for coded/uncoded blocks
|Oct 11, 1996
|Sep 14, 1999
|Intel Corporation
|Encoding image data for decode rate control
|Jun 4, 1996
|Sep 28, 1999
|Microsoft Corporation
|Transform coding of dense motion vector fields for frame and object based video coding applications
|Jun 4, 1996
|Oct 19, 1999
|Microsoft Corporation
|Image compression and affine transformation for image motion compensation
|Jan 14, 1997
|May 2, 2000
|Nec Corporation
|Motion compensated interframe prediction method based on adaptive motion vector interpolation
|May 28, 1997
|Nov 14, 2000
|Matsushita Electric Industrial Co., Ltd.
|Image predictive coding method
|Apr 22, 1998
|Apr 10, 2001
|Netergy Networks, Inc.
|Deblocking filter for encoder/decoder arrangement and method with divergence reduction
|Mar 28, 1996
|Apr 10, 2001
|Microsoft Corporation
|Table-based compression with embedded coding
|Nov 30, 1998
|May 22, 2001
|Equator Technologies, Inc.
|Image processing circuit and method for reducing a difference between pixel values across an image boundary
|Aug 11, 1997
|Aug 28, 2001
|Microsoft Corporation
|Spatial and temporal filtering mechanism for digital motion video signals
|Feb 25, 2000
|Sep 18, 2001
|Matsushita Electric Industrial Company, Limited
|Image predictive decoding apparatus
|Dec 14, 1998
|Oct 9, 2001
|Microsoft Corporation
|Entrophy code mode switching for frequency-domain audio coding
|Dec 22, 1998
|Jan 15, 2002
|Matsushita Electric Industrial Co., Ltd.
|Moving picture encoding decoding processing apparatus
|May 5, 1997
|May 27, 2003
|Microsoft Corporation
|Intra compression of pixel blocks using predicted mean
|Apr 28, 2000
|Nov 25, 2003
|Sun Microsystems, Inc.
|Block-based, adaptive, lossless video coder
|Jul 13, 1999
|Apr 27, 2004
|Samsung Electronics Co., Ltd.
|De-blocking method and apparatus
|Dec 6, 2000
|Jul 20, 2004
|Realnetworks, Inc.
|System and method for intracoding video data
|Nov 30, 1998
|Jul 25, 2002
|Chih-Lung (Bruce) Lin
|"Coding techniques for coded block parameters of blocks of macroblocks"
|Nov 20, 2002
|May 29, 2003
|Limin Wang
|Macroblock level adaptive frame/field coding for digital video content
|Jun 7, 2004
|Jun 23, 2005
|Daeyang Foundation (Sejong University)
|Method of encoding mode determination, method of motion estimation and encoding apparatus
|Dec 11, 1987
|Aug 24, 1988
|ANT Nachrichtentechnik GmbH
|Method for the transmission and reproduction of sequences of television pictures
|Bjontegaard,"H.26L Test Model Long Term No. 5 (TML-5) draft0," q15k59d1.doc, 35 pp. (document marked Oct. 2000).
|CCITT Recommendation T.81, "Digital Compression and Coding of Continuous-Tone Still Images," pp. 1-20, H-1-H-6 (1992).
|Fernandez i Ubiergo, "Lossless Region-based Multispectal Image Compression," 6th Int'l Conf. on Image Processing and its Applications, vol. 1, 5 pp. (1997).
|Guenter et al., "Motion Compensated Compression of Computer Animation Frames," Proc. SIGGRAPH 93, 8 pp. (1993).
|Heising et al., "Video Coding Using Spatial Extrapolation Based Motion Field Segmentation," IEEE Int. Conf. Image Processing, vol. 2, 4 pp. (1996).
|ISO/IEC 14496-2, "Coding of Audio-Visual Objects: Visual, ISO/IEC 14496-2," pp. i-v, 136-144, 229 (1998).
|ISO/IEC, "ISO/IEC 11172-2, Information technology-Coding of moving pictures and associated audio for digital storage media at up to about 1,5 Mbit/s-Part 2: Video," 112 pp. (1993).
|ISO/IEC, "JTC1/SC29/WG11 N2202, Information Technology-Coding of Audio-Visual Objects: Visual, ISO/IEC 14496-2," 329 pp. (1998).
|ITU-T Recommendation H.263, "Series H: Audiovisual and Multimedia Systems, Infrastructure of Audiovisual Services-Coding of Moving Video," International Telecommunication Union, pp. i-x, 4, 73-84 (Feb. 1998).
|ITU-T, "ITU-T Recommendation H.261, Video Codec for Audiovisual Services at p x 64 kbits," 25 pp. (1993).
|ITU-T, "ITU-T Recommendation H.262, Information Technology-Generic Coding of Moving Pictures and Associated Audio Information: Video," 205 pp. (1995).
|ITU-T,"ITU-T Recommendation H.263, Video coding for low bit rate communication," 162 pp. (1998).
|Liang et al., "Fast Multiplierless Approximation of the DCT with the Lifting Scheme," Proc. SPIE Apps. of Digital Image Procesing XXIII, 12 pp. (Aug. 2000).
|Mehrotra et al., "Adaptive Coding Using Finite State Hierarchical Table Lookup Vector Quantization with Variable Block Sizes," 5 pp. (1996).
|Pennebaker et al., "JPEG: Still Image Data Compression Standard," Van Nostrand Reinhold, New York, pp. vii-xi, 92-93, 109-116, 182-185, 190-198, 257-259, 332-333, 631 (1993).
|Printouts of FTP directories from http://ftp3.itu.ch , 8 pp. (downloaded from the World Wide Web on Sep. 20, 2005.).
|Reader, "History of MPEG Video Compression-Ver. 4.0," 99 pp., document marked Dec. 16, 2003.
|Study Group 16-Contribution 999, "Draft Text of Recommendation H.263 Version 2 ("H.263+") for Decision," International Telecommunication Union, 17 pp. (1997).
|Sullivan et al., "The H.264/AVC Advanced Video Coding Standard: Overview and Introduction to the Fidelity Range Extensions," 21 pp. (Aug. 2004).
|Tseng et al., "Compatible Video Coding of Stereoscopic Sequences Using MPEG-2's Scalability and Interlaced Structure," Int'l Workshop on HDTV '94, Torino, Italy, 10 pp. (1994).
|Wang et al., "Lossless Wavelet Coder with Adaptive Orientional Prediction," TENCON '99, 3 pp. (1999).
|Wiegand, "Joint Model No. 1, Revision 1 (JM1-r1)," JVT-A003r1, 80 pp. (document marked "Generated: 2002-01-18").
|Wien et al., "16 Bit Adaptive Block size Transforms," JVT-C107r1, 54 pp. (document marked "3rd Meeting: Fairfax, Virginia, USA 6-1 May, 2002").
|Citing Patent
|Filing date
|Publication date
|Sep 7, 2006
|Jun 15, 2010
|Industry-Academia Coorperation Group Of Sejong University
|Method of and apparatus for lossless video encoding and decoding
|May 8, 2007
|Jun 7, 2011
|Arris Group, Inc.
|Methods and systems for rate-distortion optimized quantization of transform blocks in block transform video coding
|Apr 5, 2011
|Mar 17, 2015
|Samsung Electronics Co., Ltd.
|Method and apparatus for encoding video by using transformation index, and method and apparatus for decoding video by using transformation index
|Feb 2, 2015
|May 26, 2015
|Samsung Electronics Co., Ltd.
|Method and apparatus for encoding video by using transformation index, and method and apparatus for decoding video by using transformation index
|Feb 2, 2015
|May 26, 2015
|Samsung Electronics Co., Ltd.
|Method and apparatus for encoding video by using transformation index, and method and apparatus for decoding video by using transformation index
|Apr 5, 2011
|Jun 2, 2015
|Samsung Electronics Co., Ltd.
|Method and apparatus for encoding video based on internal bit depth increment, and method and apparatus for decoding video based on internal bit depth increment
|Feb 2, 2015
|Jun 2, 2015
|Samsung Electronics Co., Ltd.
|Method and apparatus for encoding video by using transformation index, and method and apparatus for decoding video by using transformation index
|Apr 22, 2011
|Mar 15, 2016
|Thomson Licensing
|Method and device for lossy encoding data and corresponding device for reconstructing data
|Apr 27, 2015
|Mar 22, 2016
|Samsung Electronics Co., Ltd.
|Method and apparatus for encoding video by using transformation index, and method and apparatus for decoding video by using transformation index
|Apr 5, 2011
|Jun 14, 2016
|Samsung Electronics Co., Ltd.
|Low complexity entropy-encoding/decoding method and apparatus
|Jan 10, 2014
|Nov 22, 2016
|Futurewei Technologies, Inc.
|Method and apparatus of depth prediction mode selection
|May 16, 2016
|Mar 21, 2017
|Samsung Electronics Co., Ltd.
|Low complexity entropy-encoding/decoding method and apparatus
|Jul 22, 2005
|Jan 5, 2006
|Medialive, A Corporation Of France
|Automatic and adaptive process and system for analyzing and scrambling digital video streams
|Sep 7, 2006
|Mar 22, 2007
|Industry-Academia Cooperation Group Of Sejong University
|Method of and apparatus for lossless video encoding and decoding
|May 8, 2007
|Nov 13, 2008
|Kyeong Ho Yang
|Methods and Systems for Rate-Distortion Optimized Quantization of Transform Blocks in Block Transform Video Coding
|Apr 22, 2011
|Feb 6, 2014
|Thomson Licensing
|Method and device for lossy compress-encoding data and corresponding method and device for reconstructing data
|Jan 10, 2014
|Jul 17, 2014
|Futurewei Technologies Co., Ltd.
|Method and apparatus of depth prediction mode selection
|U.S. Classification
|382/238, 382/233
|International Classification
|Cooperative Classification
|European Classification
|Oct 4, 2012
|Fee payment
Year of fee payment: 4
|Dec 9, 2014
Owner name: MICROSOFT TECHNOLOGY LICENSING, LLC, WASHINGTON
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:MICROSOFT CORPORATION;REEL/FRAME:034542/0001
Effective date: 20141014
|Feb 2, 2017
|Fee payment
Year of fee payment: 8


text:
Modestokidzdental.com is a 1 year old domain.
It was registered by Ummer Aftab . The site is owned by Preneur Technologies. Registration details show that it was registered on 08 Jan 2016 through Go Daddy and will expire on 08 Jan 2017.
The site returns a status code of 200. It is being generated using Powered by Slider Revolution 5.1.6 - res. The site is being served through Apache.

subset: commoncrawl


text:
Wild and Wacky Winter
By Jill Gallina
To play the media you will need to update yourFlash plugin.
Choral (Parts)
Composed by Jill Gallina and Michael Gallina. Shawnee Press. Shawnee Press #UB0137. Published by Shawnee Press (HL.35025893).
Item Number: HL.35025893
ISBN 1495009378. 8.5x11 inches.
Unexplainable weather systems have caused the staff of the weather channel to go into a tailspin. When an unknown weather system named "El Meaño" comes forth to announce that he is the source of all of their problems. El Meaño explains that our failure to take good care of the earth has "precipitated" his appearance. This comical look at our weather systems teaches an important lesson about preserving this great earth that we live on. Performance time: Approx. 35 minutes.


text:
It only takes a minute to get started. Fill out our simple sign up form and login to the site.
This step is voluntary but will seriously boost your chances of receiving views from other daters on the site. Tell people about yourself, your interests and upload a nice photograph of yourself.
Use our website's sophisticated search to locate members who match your desired requirements. Or just scan through listings and locate members that attract you.
Located someone who looks right? Send a letter to them or just a wink and take it from there. With a little luck you'll be on your way to finding your ideal date.
You won't regret it


text: hi guys for some reason beyond me my instrument cluster has changed to german not a problem until it was telling me my handbrake was on which i only realised when i got to work (dont know what your handbrake is on is in german) any ideas how to change it back ???


text:
Free shipping To
UNITED STATES Free Shipping With Tracking Number
If you think the price is too high, please click to apply for lower price
HY-668 Day and Night Nice-view Car Sunvisor - Yellow + Grey
Free shipping
Net Bag Car Trunk Luggage Fixed Network Storage Container - Black
Free shipping
Net Bag Car Trunk Luggage Fixed Network Storage Container - Black
Free shipping
Carking PU Leather Cover Touch Activated Red LED Light Shift Knob - Black + Silver
Free shipping
Net Bag Car Trunk Luggage Fixed Network Storage Container - Black
Free shipping
All packages from DX.com are sent without DX logo or any information indicating DX.com. Due to package variations from suppliers, the product packaging customers receive may be different from the images displayed.
To enable volume discounts on this site, use coupon code: BULKRATE during checkout. You will see a discount applied at the bottom of the shopping cart. Competitive pricing is available. Contact us for details.
|3+ units
|5+ units
|10+ units
|US$21.79 shipped
|US$21.72 shipped
|US$21.65 shipped
What is Bulk Rate? BulkRate is a semi-wholesale system with items priced separately from retail. When you use bulk rates, a flat $1.70 registered air mail fee will automatically be added to your cart to ensure delivery of package. While BulkRate's intention is to offer cheaper prices when you buy in bulk, because it is priced separately it on occassions show a higher than retail price. That's why we ask you to enter BULKRATE as a coupon code to manually activate the rates. You can always opt not to use the bulk rates. If you are looking for wholesale prices please feel free to contact us.
Looking to get even more?
Share your reviews, photos and videos here!Review Program
- They look incredibly good for the price. - The metal they're made out of is sturdy and durable. - Has "Mugen" logos - Adds a fair amount of grip to the pedal. (Great for rainy days) - Amazing value! - is some a... Read more
The first thing to note is that these are obviously not genuine Mugen pedals. However these ones are very close to the originals and don't give many clues. The one visable one is that the Mugen logo isn't etched in to the... Read more
Please note that DealExtreme Forums are not a sales or product support board. For support questions, please contact us via support ticket at http://cs.dx.com/ for a guaranteed response. We make every effort to make the quickest replies.


text:
Laurel Springs, NJ 08021 View Profile & Reviews
See All Results
orEmail Us
Mount Royal Inpatient Drug and Alcohol Rehab Facilities
If you're looking to help yourself or someone you love struggling with in Mount Royal, , Rehabs.com a of exclusive executive programs, as well as . We can clinics for a to . Search for a top rehabilitation program in Mount Royal now, and on the .
Today's Featured Rehabs
Laurel Springs, NJ 08021 View Profile & Reviews
Egg Harbor City, NJ 08215 View Profile & Reviews
Laurel Springs, NJ 08021
Medford, NJ 08055
Egg Harbor City, NJ 08215
Ewing, NJ 08628
West Chester, PA 19382
Chester, PA 19013
Chester, PA 19013
Chester, PA 19013
Chester, PA 19013
Chester, PA 19013
Chester, PA 19013
Chester, PA 19013
Chester, PA 19013
Chester, PA 19013
1 Review
Overall Rehabs.com Rating3.3
Talk to a Treatment Rep Near You
Even if You're Not Ready to Visit a FacilityFind a Local Rep
Latest Reviews of Rehab Centers in Mount Royal, NJ and Nearby
Was not good experiences for me I suffered from depression and anxiety and patient's their seemed mu...
counselors and staff are great. it is a great facility if you really want to recover. ...
helped my loved one get sober weird smell in the bathrooms One of the therapists was really cute...
30, 60, 90-Day Inpatient Vs. Outpatient Rehabilitation in Mount Royal, New Jersey
from Klonopin, Subutex, alcohol or you or your loved one is addicted to takes an . Two options of programs in Mount Royal can help you succeed: either Inpatient or Outpatient Rehabilitation. offers with in an excellent rehabilitation facility. may be , but lack the of 45-day programs to . Ultimately, , and we are here to help you .
As a Licensed Chemical Dependency Professional, Peter is passionate about giving back what he was fortunate enough to receive from others in his recovery journey. Stemming from a solution-based therapeutic approach, the Five Essential Elements of recovery, Peter's therapeutic focus is on cultivati...
Clinical Services of Rhode Island, South Kingstown
JJ brings a unique blend of legal and addiction treatment management experience to Townsend. Prior to joining Townsend, he worked for Liskow & Lewis and Fisher & Phillips where he practiced in the areas of employment law, business law, and commercial litigation. He graduated magna cum laude from Loy...
Townsend Treatment Centers
Kimberly has her Bachelor's of Science in Psychology and is currently working on her Master's of Science in Counseling Psychology at Palm Beach Atlantic University. Kimberly has been working in the Substance Abuse field for three years and her passion continues to grow as she understands the im...
The Palm Beach Institute
refers to simultaneously . For instance, an addiction to . , a , incorporating quality with , such as one might in . Luxury drug rehabs in Mount Royal, New Jersey will provide with upscale amenities for anyone requiring the very best , just as Mount Royal alcohol rehab centers will help those battling to .
Note About Insurance for Addiction Treatment: , and your , and you can find out more about here.
Our provides many alternatives in Mount Royal, to help you . Once you have , you've taken the . Our can then help you to recover from with excellent facilities in Mount Royal.
Recently Viewed
Browse Other States