USPatent applicationPatented

Efficient motion vector coding for video compression

Granted 5 Aug 2008 · 2 office actions

Assignee: Microsoft Corporation

Law firm: Law firm · Log in to unlock

Attorney: Attorney · Log in to unlock

Inventors: Chih-Lung (Bruce) Lin, Ming-Chieh Lee · Examiner: Andy S Rao · AU 2621 · TC 2600

Life of the application

12 dated events
⤢ drag to zoom20042006200820102012201420162018202020222024ProsecutionOwnershipTerm & fees
ProsecutionOwnershipTerm & feeshover for detail · click to open

Abstract

Video coding efficiency is improved by jointly coding the x and y components of motion vectors with a single variable length code. The motion vector components for a block of pixels are predicted based on motion vectors of neighboring blocks of pixels. The predicted x and y components are then jointly coded by assigning a single variable length code corresponding to the pair of components, rather than a separate code for each component. If the x and y components do not have a corresponding entry in the coding table, they are coded with an escape code followed by fixed length codes.

Description

11 parts
›CROSS REFERENCE TO RELATED APPLICATION

This is a continuation of U.S. patent application Ser. No. 09/201,278, filed Nov. 30, 1998, now U.S. Pat. No. 6,383,018, the disclosure of which is hereby incorporated by reference.

›FIELD OF THE INVENTION

The invention relates to video coding, and specifically, to an improved method for coding motion vectors.

›BACKGROUND OF THE INVENTION · 1 of 2

Full-motion video displays based upon analog video signals have long been available in the form of television. With recent advances in computer processing capabilities and affordability, full-motion video displays based upon digital video signals are becoming more widely available. Digital video systems can provide significant improvements over conventional analog video systems in creating, modifying, transmitting, storing, and playing full-motion video sequences.

Digital video displays include large numbers of image frames that are played or rendered successively at frequencies of between 30 and 75 Hz. Each image frame is a still image formed from an array of pixels based on the display resolution of a particular system. As examples, VHS-based systems have display resolutions of 320×480 pixels, NTSC-based systems have display resolutions of 720×486 pixels, and high-definition television (HDTV) systems under development have display resolutions of 1360×1024 pixels.

The amounts of raw digital information included in video sequences are massive. Storage and transmission of these amounts of video information is infeasible with conventional personal computer equipment. Consider, for example, a digitized form of a relatively low resolution VHS image format having a 320×480 pixel resolution. A full-length motion picture of two hours in duration at this resolution corresponds to 100 gigabytes of digital video information. By comparison, conventional compact optical disks have capacities of about 0.6 gigabytes, magnetic hard disks have capacities of 1-2 gigabytes, and compact optical disks under development have capacities of up to 8 gigabytes.

To address the limitations in storing or transmitting such massive amounts of digital video information, various video compression standards or processes have been established, including MPEG-1, MPEG-2, and H.26X. These video compression techniques utilize similarities between successive image frames, referred to as temporal or interframe correlation, to provide interframe compression in which motion data and error signals are used to encode changes between frames.

In addition, the conventional video compression techniques utilize similarities within image frames, referred to as spatial or intraframe correlation, to provide intraframe compression in which the image samples within an image frame are compressed. Intraframe compression is based upon conventional processes for compressing still images, such as discrete cosine transform (DCT) encoding. This type of coding is sometimes referred to as “texture” or “transform” coding. A “texture” generally refers to a two-dimensional array of image sample values, such as an array of chrominance and luminance values or an array of alpha (opacity) values. The term “transform” in this context refers to how the image samples are transformed into spatial frequency components during the coding process. This use of the term “transform” should be distinguished from a geometric transform used to estimate scene changes in some interframe compression methods.

Interframe compression typically utilizes motion estimation and compensation to encode scene changes between frames. Motion estimation is a process for estimating the motion of image samples (e.g., pixels) between frames. Using motion estimation, the encoder attempts to match blocks of pixels in one frame with corresponding pixels in another frame. After the most similar block is found in a given search area, the change in position of the pixel locations of the corresponding pixels is approximated and represented as motion data, such as a motion vector. Motion compensation is a process for determining a predicted image and computing the error between the predicted image and the original image. Using motion compensation, the encoder applies the motion data to an image and computes a predicted image. The difference between the predicted image and the input image is called the error signal. Since the error signal is just an array of values representing the difference between image sample values, it can be compressed using the same texture coding method as used for intraframe coding of image samples.

Although differing in specific implementations, the MPEG-1, MPEG-2, and H.26X video compression standards are similar in a number of respects. The following description of the MPEG-2 video compression standard is generally applicable to the others.

MPEG-2 provides interframe compression and intraframe compression based upon square blocks or arrays of pixels in video images. A video image is divided into image sample blocks called macroblocks having dimensions of 16×16 pixels. In MPEG-2, a macroblock comprises four luminance blocks (each block is 8×8 samples of luminance (Y)) and two chrominance blocks (one 8×8 sample block each for Cb and Cr).

In MPEG-2, interframe coding is performed on macroblocks. An MPEG-2 encoder performs motion estimation and compensation to compute motion vectors and block error signals. For each block M N in an image frame N, a search is performed across the image of a next successive video frame N+1 or immediately preceding image frame N−1 (i.e., bi-directionally) to identify the most similar respective blocks M N+1 or M N−1 . The location of the most similar block relative to the block M N is encoded with a motion vector (DX,DY). The motion vector is then used to compute a block of predicted sample values. These predicted sample values are compared with block M N to determine the block error signal. The error signal is compressed using a texture coding method such as discrete cosine transform (DCT) encoding.

Object-based video coding techniques have been proposed as an improvement to the conventional frame-based coding standards. In object-based coding, arbitrary shaped image features are separated from the frames in the video sequence using a method called “segmentation.” The video objects or “segments” are coded independently. Object-based coding can improve the compression rate because it increases the interframe correlation between video objects in successive frames. It is also advantageous for variety of applications that require access to and tracking of objects in a video sequence.

›BACKGROUND OF THE INVENTION · 2 of 2

In the object-based video coding methods proposed for the MPEG-4 standard, the shape, motion and texture of video objects are coded independently. The shape of an object is represented by a binary or alpha mask that defines the boundary of the arbitrary shaped object in a video frame. The motion of an object is similar to the motion data of MPEG-2, except that it applies to an arbitrary-shaped image of the object that has been segmented from a rectangular frame. Motion estimation and compensation is performed on blocks of a “video object plane” rather than the entire frame. The video object plane is the name for the shaped image of an object in a single frame.

The texture of a video object is the image sample information in a video object plane that falls within the object's shape. Texture coding of an object's image samples and error signals is performed using similar texture coding methods as in frame-based coding. For example, a segmented image can be fitted into a bounding rectangle formed of macroblocks. The rectangular image formed by the bounding rectangle can be compressed just like a rectangular frame, except that transparent macroblocks need not be coded. Partially transparent blocks are coded after filling in the portions of the block that fall outside the object's shape boundary with sample values in a technique called “padding.”

In both frame-based and object-based video coding, the encoded bit stream typically includes many interframe-coded frames (P frames). Each of these P frames includes at least one motion vector per macroblock, and each motion vector includes X and Y components that coded independently. As such, motion vectors contribute a significant amount of data for each coded P frame. There is a need, therefore, for more efficient motion vector coding schemes.

›SUMMARY OF THE INVENTION

The invention provides an improved method of coding motion vectors for video coding applications. One aspect of the invention is a method for jointly coding a motion vector with a single entropy code. This method is based on the discovery that the probability of the X and Y components of the motion vector are not totally independent. To exploit the correlation between the motion vector components, the method uses entropy coding to assign a single variable length code to a joint parameter representing the combined X and Y components of the motion vector. Motion vector component pairs that are more likely are assigned a shorter length code, while less likely component pairs are assigned a longer length code or are coded with an escape code followed by a code for each component. This approach can be used in a variety of video coding applications, including both object-based and frame based coding. In addition, joint entropy coding of motion vectors can be used in combination with spatial prediction to code motion vectors more efficiently.

For example, in one implementation, an encoder first computes a predictor for the motion vector, and then computes differential X and Y components from the X and Y components of the vector currently being processed and its predictor. A joint entropy coder then computes a single variable length code for a joint parameter representing both the X and Y differential components.

The decoder performs the inverse of the encoder operations to reconstruct the motion vector from the variable length code. In particular, it computes the joint parameter from the variable length code, and then reconstructs the motion vector from the differential components and the components of the predictor.

Additional features of the invention will become more apparent from the following detailed description and accompanying drawings.

›BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a block diagram of a video coder.

FIG. 2 is a block diagram of a video decoder.

FIG. 3 is a block diagram illustrating how an implementation of the invention jointly codes motion vector components for a macroblock with a single entropy code.

FIG. 4 is a diagram illustrating how a predictor for the motion vector of a current block is selected from motion vectors of neighboring macroblocks.

FIG. 5 is a diagram illustrating how a motion vector predictor is selected in cases where one or more neighboring macroblocks are outside the picture.

FIG. 6 is a block diagram illustrating how an implementation of the invention decodes a jointly coded motion vector.

FIG. 7 is a diagram of a computer system that serves as an operating environment for a software implementation of the invention.

›DETAILED DESCRIPTION · 1 of 4

Introduction

The first section below provides a description of a video encoder and decoder. Subsequent sections describe how to improve coding of motion vectors by exploiting the correlation between the X and Y components of the vectors.

This approach for jointly coding the X and Y components of a motion vector applies to both frame-based and object-based video coding. Both forms of video coding employ motion vectors to define the motion of a pixel or block of pixels from one frame to another. Typically, a motion vector is computed for regular sized blocks of pixels. In frame-based coding, the frame is divided into regular sized blocks. In object-based coding, each video object plane is divided into blocks. Since the object represented in a video object plane usually has a non-rectangular shape, object-based coders use the shape to determine which pixels in each block fall within the boundaries of the object. While frame-based and object-based coding differ in this respect, both approaches use motion vectors that define the motion of pixels in a block. Thus, the correlation between the X and Y components of motion vectors in both types of coders can be exploited to improve coding efficiency.

While the encoder and decoder described in the next section are object-based, they provide a sufficient basis for explaining how to implement the invention in both frame-based and object-based coding schemes.

Description of an Example Encoder and Decoder

FIG. 1 is a block diagram illustrating an implementation of an object-based video encoder. The input 30 to the encoder includes images representing the video objects in each frame, the shape of each video object and bounding rectangles. The shape information is available before the encoder codes texture or motion data. Frame-based coding differs in that the entire frame is coded without shape information, and tile input 30 consists of a series of image frames.

The shape coding module 32 reads the definition of an object including its bounding rectangle and extends the bounding rectangle to integer multiples of macroblocks. The shape information for an object comprises a mask or “alpha plane.” The shape coding module 32 reads this mask and compresses it, using for example, a conventional chain coding method to encode the contour of the object.

Motion estimation module 34 reads an object including its bounding rectangle and a previously reconstructed image 36 and computes motion estimation data used to predict the motion of an object from one frame to another. The motion estimation module 34 searches for the most similar macroblock in the reconstructed image for each macroblock in the current image to compute a motion vector for each macroblock. The specific format of the motion vector from the motion estimation module 34 can vary depending on the motion estimation method used. In the implementation described below, there is a motion vector for each macroblock, which is consistent with current MPEG and H26X formats.

The motion compensation module 38 reads the motion vectors computed by the motion estimation module and the previously reconstructed image 36 and computes a predicted image for the current frame. Each pixel in the predicted image is constructed by using the motion vector for the macroblock that it resides in to find the corresponding pixel in the previously reconstructed image 36 . The encoder then finds the difference between the image sample values in the input image block as specified in the input 30 and the corresponding sample values in the predicted image block as computed in the motion compensation module 38 to determine the error signal for the macroblock.

Texture coding module 40 compresses this error signal for inter-frame coded objects and compresses image sample values for the object from the input data stream 30 for intra-frame coded objects. The feedback path 42 from the texture coding module 40 represents the error signal. The encoder uses the error signal blocks along with the predicted image blocks from the motion compensation module to compute the previously reconstructed image 36 .

The texture coding module 40 codes intra-frame and error signal data for an object using any of a variety of still image compression techniques. Example compression techniques include DCT, wavelet, as well as other conventional image compression methods.

The bit stream of the compressed video sequence includes the shape, motion and texture coded information from the shape coding, motion estimation, and texture coding modules. Multiplexer 44 combines and formats this data into the proper syntax and outputs it to the buffer 46 . As explained in more detail below, the encoder also includes a motion vector encoder that uses entropy coding to jointly code the x and y components of the motion vector for each macroblock. The motion vector encoder may be implemented as part of the motion estimation module 34 or as part of the data formatting functions in the multiplexer 44 .

While the encoder can be implemented in hardware or software, it is most likely implemented in software. In a software implementation, the modules in the encoder represent software instructions stored in memory of a computer and executed in the processor, and the video data stored in memory. A software encoder can be stored and distributed on a variety of conventional computer readable media. In hardware implementations, the encoder modules are implemented in digital logic, preferably in an integrated circuit. Some of the encoder functions can be optimized in special-purpose digital logic devices in a computer peripheral to off-load the processing burden from a host computer.

FIG. 2 is a block diagram illustrating a decoder for an object-based video coding method. A demultiplexer 60 receives a bit stream representing a compressed video sequence and separates shapes, motion and texture encoded data on an object by object basis. The demultiplexer also includes a motion vector decoder that reconstructs the motion vector for each macroblock from a single variable length code.

›DETAILED DESCRIPTION · 2 of 4

Shape decoding module 64 decodes the shape or contour for the current object being processed. To accomplish this, it employs a shape decoder that implements the inverse of the shape encoding method used in the encoder of FIG. 1 . The resulting shape data is a mask, such as a binary alpha plane or gray scale alpha plane representing the shape of the object.

The motion decoding module 66 decodes the motion information in the bit stream. The decoded motion information includes the motion vectors for each macroblock that are reconstructed from entropy codes in the incoming bitstream. The motion decoding module 66 provides this motion information to the motion compensation module 68 , and the motion compensation module 68 uses the motion vectors to find predicted image samples in the previously reconstructed object data 70 .

The texture decoding module 74 decodes error signals for inter-frame coded texture data and an array of color values for intra-frame texture data and passes this information to a module 72 for computing and accumulating the reconstructed image. For inter-frame coded objects, this module 72 applies the error signal data to the predicted image output from the motion compensation module to compute the reconstructed object for the current frame. For intra-frame coded objects the texture decoding module 74 decodes the image sample values for the object and places the reconstructed object in the reconstructed object module 72 . Previously reconstructed objects are temporarily stored in object memory 70 and are used to construct the object for other frames.

Like the encoder, the decoder can be implemented in hardware, software or a combination of both. In software implementations, the modules in the decoder are software instructions stored in memory of a computer and executed by the processor, and video data stored in memory. A software decoder can be stored and distributed on a variety of conventional computer readable media. In hardware implementations, the decoder modules are implemented in digital logic, preferably in an integrated circuit. Some of the decoder functions can be optimized in special-purpose digital logic devices in a computer peripheral to off-load the processing burden from a host computer.

Improved Coding of Motion Vectors

The coding efficiency of motion vectors can be improved by exploiting the correlation between the X and Y components of a motion vector. Traditional coding methods code the X and Y components separately based on the premise that the probability distribution of the X and Y components are independent. We have discovered that the X and Y components are not totally independent, but instead, have a correlation.

To take advantage of this correlation, an implementation of the invention assigns a single entropy code to the joint X and Y components of a motion vector. Before coding, sample video data for a target bit rate and content scenario is used to generate a codebook. This codebook assigns a single variable length code to pairs of X and Y components based on their frequency of occurrence. More frequent, and therefore statistically more probable pairs, are assigned shorter length codes, while less frequent pairs are assigned longer length codes. A statistical analysis program computes the probability of each of the joint X and Y components by extracting the motion vector data generated from an encoder for several example video sequences that have the desired type of content. The program creates a probability distribution for pairs of motion vectors (namely, differential motion vectors) and then assigns codes to a subset of the motion vectors that are most probable.

To limit the size of the codebook, low probability pairs need not be assigned a code. Instead, these pairs can be coded by using an escape code to indicate that the motion vector components follow in fix length bit fields. Pairs are excluded from the codebook based on where they fall in the probability distribution.

While not required, the coding of motion vectors can be improved by using a differential coding process that takes advantage of the spatial dependency of motion vectors. In particular, a motion vector for a small block of pixels is likely to point in a similar direction as the motion vector for a neighboring block, especially if both the current block and its neighbor are in a region of the frame having nearly uniform motion. One way to take advantage of this spatial dependency is to code the difference between a motion vector for the current block and the motion vector for a neighboring block, called the predictor. The implementation uses a form of spatial prediction to encode the X and Y components before assigning a joint entropy code.

FIG. 3 is a block diagram illustrating how our implementation encodes motion vectors. The features shown in FIG. 3 are implemented in the encoder and operate on the motion vectors computed in the motion estimation block 34 . First, the motion estimation block computes a motion vector for each macroblock in the frame. When a frame consists of more than one video object plane, the motion estimation block computes motion vectors for the macroblocks of each video object plane.

The encoder begins coding the motion vector for each macroblock by computing a predictor for the current motion vector. The implementation shown in FIG. 3 selects a predictor from among neighboring macroblocks. FIG. 4 shows an example of the positioning of the candidates for the predictor relative to the current macroblock for which the motion vector is being encoded. In this example, the candidate macroblocks include the ones to the left 400 , above 402 , and above-right 404 relative to the current macroblock 406 . The motion vectors for the candidate macroblocks are referred to as MV 1 , MV 2 , and MV 3 , respectively.

As shown in FIG. 3 , the encoder computes the predictor separately for the X and Y components of the current macroblock. In particular, the motion vector predictors 300 , 302 compute the median of the X and Y components for the candidate macroblocks. The median of these three values is chosen as the predictor for the X and Y components. The precise method of computing the predictor is not critical to the invention and other ways of selecting a predictor are possible. One alternative is to select a neighboring block located in the direction of the lowest gradient of the neighboring motion vectors. Another alternative is to compute an average of motion vectors of neighboring blocks.

›DETAILED DESCRIPTION · 3 of 4

Once the motion vector predictor selects the predictor, the encoder computes differential motion vector components. For each X and Y component, the encoder computes the difference between the component of the current motion vector and the corresponding component of the predictor. As reflected by subtractor units 304 , 306 in FIG. 3 , the X component of the predictor is subtracted from the X component of the current vector MVx, and the Y component of the predictor is subtracted from the Y component of the current vector MVy.

The resulting differential X and Y components (MVDx and MVDy) are then formed into a joint parameter that is coded with a single variable length code, or an escape code followed by fixed code word for each differential component. The implementation uses a joint Huffman coding table that is trained for a target bit rate and video content. The joint entropy coder 308 looks up the joint parameter in the table to find a corresponding variable length code. If the coder finds a match in the table, it codes the joint parameter with a single variable length code. Otherwise, it codes an escape code followed by a fixed length code word for each component.

The entropy codes 310 shown in FIG. 3 refer to the Huffman coding table. An example of a Huffman coding table trained for low bit rate, talking head applications is set forth at the end of this section in Table 1. Following Table 1, Table 2 is an example of a Huffman table trained for more general video applications. While our implementation uses Huffman coding tables, the entropy codes can be computed using other forms of entropy coding such as arithmetic coding.

Since the predictor is selected from motion vectors of neighboring blocks of pixels, the encoder applies special rules to address the situation where one or more neighboring blocks are outside the picture. FIG. 5 illustrates cases where a neighboring block is outside the picture and shows the motion vectors that are used to predict the motion vector in the current macroblock.

If one neighboring block is outside the picture (e.g., block 500 in FIG. 5 ), a zero motion vector ( 0 , 0 ) is used in its place. The predictor of the current macroblock 506 is computed as the median of the zero motion vector, and motion vectors MV 2 and MV 3 for the other two neighboring macroblocks 502 , 504 . As another example, the configuration on the far right of FIG. 5 shows the case where the above-right macroblock 524 is out of the picture. In this case, MV 1 and MV 2 for the other two macroblocks 520 , 522 inside the picture are used along with the zero motion vector for the third macroblock 524 to predict the motion vector for the current macroblock 526 .

If two candidate macroblocks 512 , 514 are out of the picture (as shown in the middle diagram of FIG. 5 ), then the motion vector for the third neighboring macroblock 510 is selected as the predictor for the current macroblock 516 .

FIG. 6 is a diagram illustrating an implementation of a decoder for decoding a single variable length code representing joint motion vector components into X and Y motion vector components. The joint entropy decoder 600 reads the variable length code as input and finds the corresponding differential X and Y components in the entropy codes 602 . In the current implementation, the entry codes are in the form of a Huffman table (e.g., tables 1 or 2 listed below). As noted above, the encoder can also use an alternative entropy coding scheme, in which case, the decoder would have the appropriate codebook to correspond with the codebook used in the encoder.

In some cases, the motion vector may be coded with an escape code followed by two fixed length codes representing the differential motion vector components. In this case, the joint entropy decoder 600 recognizes the escape code and interprets the following data as differential motion vectors instead of a variable length code. It then passes the differential X and Y components to the next stage.

Next, the decoder forms the motion vector from the differential motion vector components MVDx, MVDy and the X and Y components of the predictor. In particular the decoder adds each differential motion vector component MVDx, MVDy and the X and Y components of the predictor (see adders 604 , 606 , FIG. 6 ). The decoder computes the predictor components in the same way as the encoder. In particular, it has a motion vector predictor that computes the predictor of the motion vectors previously decoded for the three neighboring macroblocks (MVx 1 , MVy) (MVx 2 , MVy 2 ) and (MVx 3 , MVy 3 ). In the implementation, the motion vector predictor blocks 608 , and 610 represent the computation of the median of the X and Y components, respectively, of the neighboring macroblocks. As noted above, other ways of computing the predictor are possible. Regardless of the specific form of prediction, the decoder performs inverse prediction according to the prediction scheme used in the encoder.

Once the motion vector for the current macroblock (MVx, MVy) is reconstructed, it is stored and used to decode the motion vector for neighboring macroblocks according to the prediction scheme.

The following tables provide examples of Huffman coding tables trained for talking head video (Table 1) and more general video content (Table 2).

Brief Overview of a Computer System

FIG. 7 and the following discussion are intended to provide a brief, general description of a suitable computing environment in which the invention may be implemented. Although the invention or aspects of it may be implemented in a hardware device, the encoder and decoder described above are implemented in computer-executable instructions organized in program modules. The program modules include the routines, programs, objects, components, and data structures that perform the tasks and implement the data types described above.

While FIG. 7 shows a typical configuration of a desktop computer, the invention may be implemented in other computer system configurations, including hand-held devices, multiprocessor systems, microprocessor-based or programmable consumer electronics, minicomputers, mainframe computers, and the like. The invention may also be used in distributed computing environments where tasks are performed by remote processing devices that are linked through a communications network. In a distributed computing environment, program modules may be located in both local and remote memory storage devices.

›DETAILED DESCRIPTION · 4 of 4

FIG. 7 illustrates an example of a computer system that serves as an operating environment for the invention. The computer system includes a personal computer 720 , including a processing unit 721 , a system memory 722 , and a system bus 723 that interconnects various system components including the system memory to the processing unit 721 . The system bus may comprise any of several types of bus structures including a memory bus or memory controller, a peripheral bus, and a local bus using a bus architecture such as PCI, VESA, Microchannel (MCA), ISA and EISA, to name a few. The system memory includes read only memory (ROM) 724 and random access memory (RAM) 725 . A basic input/output system 726 (BIOS), containing the basic routines that help to transfer information between elements within the personal computer 720 , such as during start-up, is stored in ROM 724 . The personal computer 720 further includes a hard disk drive 727 , a magnetic disk drive 728 , e.g., to read from or write to a removable disk 729 , and an optical disk drive 730 , e.g., for reading a CD-ROM disk 731 or to read from or write to other optical media.

The hard disk drive 727 , magnetic disk drive 728 , and optical disk drive 730 are connected to the system bus 723 by a hard disk drive interface 732 , a magnetic disk drive interface 733 , and an optical drive interface 734 , respectively. The drives and their associated computer-readable media provide nonvolatile storage of data, data structures, computer-executable instructions (program code such as dynamic link libraries, and executable files), etc. for the personal computer 720 . Although the description of computer-readable media above refers to a hard disk, a removable magnetic disk and a CD, it can also include other types of media that are readable by a computer, such as magnetic cassettes, flash memory cards, digital video disks, Bernoulli cartridges, and the like.

A number of program modules may be stored in the drives and RAM 725 , including an operating system 735 , one or more application programs 736 , other program modules 737 , and program data 738 . A user may enter commands and information into the personal computer 720 through a keyboard 740 and pointing device, such as a mouse 742 . Other input devices (not shown) may include a microphone, joystick, game pad, satellite dish, scanner, or the like. These and other input devices are often connected to the processing unit 721 through a serial port interface 746 that is coupled to the system bus, but may be connected by other interfaces, such as a parallel port, game port or a universal serial bus (USB). A monitor 747 or other type of display device is also connected to the system bus 723 via an interface, such as a display controller or video adapter 748 . In addition to the monitor, personal computers typically include other peripheral output devices (not shown), such as speakers and printers.

The personal computer 720 may operate in a networked environment using logical connections to one or more remote computers, such as a remote computer 749 . The remote computer 749 may be a server, a router, a peer device or other common network node, and typically includes many or all of the elements described relative to the personal computer 720 , although only a memory storage device 750 has been illustrated in FIG. 7 . The logical connections depicted in FIG. 7 include a local area network (LAN) 751 and a wide area network (WAN) 752 . Such networking environments are commonplace in offices, enterprise-wide computer networks, intranets and the Internet.

When used in a LAN networking environment, the personal computer 720 is connected to the local network 751 through a network interface or adapter 753 . When used in a WAN networking environment, the personal computer 720 typically includes a modem 754 or other means for establishing communications over the wide area network 752 , such as the Internet. The modem 754 , which may be internal or external, is connected to the system bus 723 via the serial port interface 746 . In a networked environment, program modules depicted relative to the personal computer 720 , or portions thereof, may be stored in the remote memory storage device. The network connections shown are merely examples and other means of establishing a communications link between the computers may be used.

›CONCLUSION

While the invention has been illustrated using a specific implementation as an example, the scope of the invention is not limited to the specific implementation described above. Spatial prediction effectively exploits the spatial dependency of motion vectors and improves the efficiency of jointly coding motion vectors with a single entropy code. However, the specific form of prediction used on the motion vectors is not critical to the invention. In fact, it is possible to implement the invention without using a prediction scheme.

The implementation described above specifically uses a Huffman coding scheme to compute entropy codes for a joint motion vector parameter. As noted, it is also possible to use other forms of entropy coding to encode the joint parameter with a single entropy code.

In view of the many possible implementations of the invention, it should be recognized that the implementation described above is only examples of the invention and should not be taken as a limitation on the scope of the invention. Rather, the scope of the invention is defined by the following claims. We therefore claim as our invention all that comes within the scope and spirit of these claims.

›Tables in the description — 1
TABLE 1 — XY Joint VLC Motion Vector Table for Talking Head Video
IndexMv_xMv_yNumber of bitsCode
00011
10−0.540011
2−0.5040101
300.540111
40.50500010
5−0.5−0.5501000
60.5−0.5501101
7−0.50.56000000
80.50.56000001
9016011001
101070000101
110−170001111
12−1070010110
1301.5800001001
14−0.51800001101
151−0.5800001110
161.50800011011
170−1.5800011101
1810.5800100001
190.5−1800100110
20−1.50800101000
210.51800101010
22−10.5800101110
23−1−0.5801001100
24−0.5−1801001101
25−0.51.59000010001
261.5−0.59000110000
27−1.5−0.59000110001
280.5−1.59000110011
291.50.59000110101
300.51.59001000000
311−19001001010
32−0.5−1.59001001011
33−1.50.59001010010
34−119001011110
35119010010010
36−1−19011000000
3720100000110011
38−20100000111111
3902100001101000
401−1.5100001110000
412.50100001110001
42−11.5100010010000
43−2.50100010011100
440−2100010011101
45−3.50100010011111
463.50100010101100
470−2.5100010101101
4811.5100100100010
4902.5100100100011
501.51100100101000
511.5−1.5100100111001
521.5−1100100111011
53−0.52100110000011
541.51.5100110000101
55−1.51100110000110
560−3.5100110001000
57−1.5−1100110001001
58−1−1.5100110001111
59−1.51.51100001000001
602.50.51100001100001
61−2.5−0.51100001100010
622−0.51100001111101
63301100011001000
642.5−0.51100011010011
650.5−21100011100100
6603.51100011100111
67−0.5−21100100000100
68−1.5−1.51100100000101
69−0.52.51100100100100
70−2−0.51100100100101
7120.51100100111100
720.5−2.51100100111101
73−121100101001111
741−21100101111100
750.521100101111101
760.52.51100101111110
77−20.51101001000000
78−2.50.51101001001100
79−3.5−0.51101001001111
80−0.5−2.51101001010110
81−301101001011100
823.5−0.51101001110001
83031101001110100
840−31101100010110
85−0.5−3.51101100010111
860.5−3.51101100011001
873.50.51101100011100
88−0.53.512000010000100
893−0.512000010000101
90−2112000010000111
912−112000011001000
92−5.5012000011001001
93−4.5012000011001010
945.5012000011001011
952112000011110001
961212000011110010
974.5012000011111000
98−1−212000110010101
99−3.50.512000110100101
100−2−112000111001101
101−0.5312001000001101
102−12.512001001000111
1031−2.512001001001101
10430.512001010011101
1051.5−212001010111000
10614.5012001010111110
10712.512010010011010
108−21.512010010011100
109−1312010010100111
1102.5−1.512010010101000
1112.5112010010101011
1121.5−2.512010010101110
113−2.5−1.512010010101111
1142−1.512010010110101
115−14.5012010010110110
11613.5012010010110111
1173112010010111100
1182.51.512010010111110
1190−14.512010010111111
120−0.5−312010011100001
121−1.5212010011111100
122−3−0.512010011111101
1230.5312010011111111
1242.5−112011000001000
1250.5−312011000001001
126−2.51.512011000001010
127−2.5112011000001011
1281.52.512011000010000
1291−312011000011100
1301−3.512011000011110
1314012011000011111
1325012011000101010
1330.53.512011000101011
1340−4.512011000110000
135−1.52.512011000110111
136−14012011000111010
137−13.50130000100000000
138−2−1.5130000100000001
139−40130000100001100
140−3.5−1.5130000110000011
1411.52130000110001110
1423.5−1.5130000111100000
1433−1130000111100001
14404.5130000111101111
145−4.5−0.5130000111110010
146−2.5−1130000111110011
1470−5.5130001100100101
148−13.5130001100100110
1491.5−3.5130001100100111
150−31130001100101000
15113130001100101001
152140130001101001001
15321.5130001110010100
154−1.53.5130001110010101
155−50130001110011001
156−30.5130010000011000
1574.50.5130010010011000
158−12.50130010010011001
159−1−2.5130010010011100
1603−1.5130010010011110
161−1−3.5130010010011111
1622−2130010100110000
163−1.5−2.5130010100110010
164−1−3130010101110011
1654.5−0.5130010101110100
166−3−1130010101110101
167−3.51.5130010101111011
1680−4130010101111111
1691−4130010111111100
170−4−0.5130100100001111
1713.51130100100110110
172−15.50130100101001010
173−3.5−1130100101001011
1743.51.5130100101001100
17504130100101010010
176−2−2130100101010011
177−1.53130100101010100
1780−13.5130100101010101
17931.5130100101101000
180−3−1.5130100101101001
18122130100101110101
182−22130100101110110
18315.50130100101110111
184−23130100101111011
1853.5−1130100111000000
186−4.50.5130100111000001
187−5.5−0.5130100111110110
188−31.5130100111110111
1891.5−3130100111111100
190−0.5−4.5130100111111101
1911.53130110000100110
19212.50130110000100111
193−0.54.5130110000111010
194−1.5−2130110001010000
195−1.5−3.5130110001010001
196−22.5130110001010010
197−14130110001010011
198−2.52.5130110001110110
1991.53.51400001000000100
200−1501400001000000101
201321400001000000110
20240.51400001100000001
20313.51400001100000010
2042.5−3.51400001100000011
205−1.5−31400001100000100
2063−21400001100000101
2075.5−0.51400001100011000
208−3−21400001100011001
209051400001100011010
2100.5−4.51400001100011011
2115−0.51400001100011110
212−40.51400001111011010
2134−0.51400001111011011
214−23.51400001111011100
2150−15.51400001111011101
216013.51400011001001000
2170−51400011001001001
2182−2.51400011001011110
2190−141400011001011111
2205.50.51400011010010000
221−3.511400011010010001
222−5.50.51400011100101101
223−0.5−41400011100101110
224−14.51400011100101111
225−0.5−14.51400011100110000
2264.51.51400011100110001
227−1.54.51400100100011010
2280.54.51400100100011011
2292.5−21400100100111010
230−321400100100111011
2312.521400101001100010
232−2.5−21400101001110001
23313.50.51400101001110010
234−4.51.51400101001110011
2350.5−5.51400101011100100
2361.5−4.51400101011100101
237−0.5−5.51400101011101101
238−0.5−51400101011101110
2392.52.51400101011101111
2403−2.51400101011110000
2413.5−2.51400101011110001
24205.51400101011110010
243−4.5−1.51400101011110011
2440141400101011110100
245−2.53.51400101011110101
2462.5−2.51400101011111100
2472−3.51401001000010101
248−0.513.51401001000010110
249411401001000010111
250−3.5−2.51401001000011000
251−2.5−2.51401001000011001
2523−31401001000011010
253−0.541401001000011011
25422.51401001000011100
255−2−2.51401001000011101
256−0.514.51401001001101111
2572−31401001001110100
258−3.53.51401001001110101
2596.50.51401001001110110
260−14.5−0.51401001001110111
2611−51401001010010000
26232.51401001010010001
2633.5−3.51401001010010010
2644−11401001010010011
2653−3.51401001010011010
266−1−41401001011001010
267014.51401001011001011
268−6.5−0.51401001011001100
269−411401001011001101
270−3.5−3.51401001011001110
271−331401001011001111
2726.501401001011101000
273−601401001011101001
274−4−11401001011110100
2750.5−14.51401001011110101
2760.514.51401001111011101
277−0.55.51401001111011110
2784.5−1.51401001111011111
2791−4.51401001111100000
2803.5−21401001111100001
2817.501401001111100010
2824−21401001111100011
2831301401001111100100
28413.5−0.51401001111100101
2854.511401001111100110
2860.5−13.51401001111100111
287−14.50.51401001111101000
288−7.501401001111101001
28914.50.51401001111101010
29050.51401001111101011
291−151401100001000100
292−32.51401100001000101
293−1.5−4.51401100001000110
294231401100001000111
29514.5−0.51401100001001000
2960.541401100001001001
2972.5−31401100001001010
2981501401100001001011
299−2−31401100001110110
300−3.52.51401100011011001
301331401100011011010
302−3.521401100011011011
3033−41401100011101110
304−7.5−1.51401100011101111
305−4.5−115000010000001110
3061−615000010000001111
3070.5−515000010000110100
308−5.5−1.515000010000110101
3090.5−415000010000110110
3108.5015000010000110111
311−2.54.515000011000000000
3120−1515000011000000001
313−4.5115000011110101001
314−2.5−3.515000011110101010
315−50.515000011110101011
316−4−1.515000011110101100
317−5−0.515000011110101101
3183.53.515000011110101110
3195.51.515000011110101111
320−2.5215000011110110000
3212.5−415000011110110001
322−13015000011110110010
3235−115000011110110011
3247.50.515000110010110000
325−3−2.515000110010110001
326−1615000110010110010
327−0.51415000110010110011
3284.5−115000110010110100
3293.5215000110010110101
3300.5−6.515000110010110110
331−5115000110010110111
3326.5−0.515000110010111000
3332−415000110010111001
3340−815000110010111010
3356.51.515000110010111011
336−6.5015000111001011000
337−5315001001000100100
338−1−5.515001001000100101
339−13.50.515001001000100110
340−13.5−0.515001001000100111
341−7.5−0.515001001000101000
342−1.5−5.515001001000101001
343−51.515001001000101010
344−0.5−13.515001001000101011
345−0.5−7.515001001000101100
3465.5−1.515001001000101101
3472.5315001001000101110
348−2.5315001001000101111
3490−715001001000110000
35001315001001000110001
3510−6.515001001000110010
3520.55.515001001000110011
35314.515001010011000110
3545.5−115001010011000111
3551.54.515001010011001100
356−1.55.515001010011001101
357−33.515001010011001110
358−5−1.515001010011001111
3590−12.515001010011010000
360−6.5−1.515001010011010001
3610−7.515001010011010010
362−3.5−215001010011010011
363−0.5−6.515001010011010100
3644.5−215001010011010101
3658.5−0.515001010011010110
366−2−3.515001010011010111
3671−6.515001010011011000
368−2415001010011011001
3693.5−315001010011011010
3701−5.515001010011011011
371−6.50.515001010011011100
3722.53.515001010011011101
3733−4.515001010011011110
374−1.5415001010011011111
375−5.5−115001010011100000
37623.515001010011100001
3775115001010111011000
378−41.515010010000011011
3798015010010000011100
380−8015010010000011101
381−2−415010010000011110
3828.50.515010010000011111
383−5−115010010000100000
3841415010010000100001
385−0.57.515010010000100010
38633.515010010000100011
3873.52.515010010000100100
3886015010010000100101
389−10.50.515010010000100110
3901.5−415010010000100111
391−1−4.515010010000101000
3920.56.515010010000101001
3930.57.515010010011011100
394−4.5−2.515010010011011101
395−2−4.515010010100110110
3960.5515010010100110111
3977015010010110000000
398−8.5015010010110000001
399−9.50.515010010110000010
400−4215010010110000011
4014.52.515010010110000100
402−42.515010010110000101
4031−7.515010010110000110
4041−715010010110000111
405−1−515010010110001000
406−3415010010110001001
407−4315010010110001010
408−9015010010110001011
40914−0.515010010110001100
410−5.51.515010010110001101
411−1.5−415010010110001110
4123.5−7.515010010110001111
413−4.5−3.515010010110010000
4141.5−7.515010010110010001
4152.5−4.515010010110010010
41615.50.515010010110010011
4176.5115010011110100010
4180.59.515010011110100011
4191515010011110100100
4207.5−0.515010011110100101
4214.5215010011110100110
422−5215010011110100111
4235−1.515010011110101000
4241.5−5.515010011110101001
4251.5−515010011110101010
426−4.52.515010011110101011
4270615010011110101100
4281.55.515010011110101101
4295.5−3.515010011110101110
43007.515010011110101111
431−12.50.515010011110110000
432−0.56.515010011110110001
4334.5−2.515010011110110010
434−6−0.515010011110110011
435−0.51315010011110110100
436−8−0.515010011110110101
437−9.5015010011110110110
43815.5−0.515010011110110111
439−3.5315010011110111000
440−15.515010011110111001
4410−615011000011101110
4421.57.515011000011101111
443−16.515011000110001000
444−11115011000110001001
445−0.5−15.515011000110001010
4465−315011000110001011
4477.5115011000110001100
4483.5315011000110001101
4493−915011000110001110
4504−515011000110001111
4514−415011000110100000
4529.50.515011000110100001
45311.5115011000110100010
45412015011000110100011
455−7015011000110100100
456−5.52.515011000110100101
4573.5−5.515011000110100110
4583.5−4.515011000110100111
4590.58.515011000110101000
460−7.51.515011000110101001
4614.5−4.515011000110101010
462−4.5−215011000110101011
463−43.515011000110101100
4645.53.515011000110101101
465−3.5−4.515011000110101110
466−0.511.515011000110101111
467−60.515011000110110000
468−6.5−115011000110110001
4696.5−1160000110001111100
470−15.515.5160000110001111101
4711−8160000110001111110
472−0.55160000110001111111
473−5−2160000111100110000
4741.5−9.5160000111100110001
475−8.50.5160000111100110010
47670.5160000111100110011
47771.5160000111100110100
4781.5−6.5160000111100110101
479−0.57160000111100110110
480−25.5160000111100110111
481−1.5−7.5160000111100111000
482−1.5−6.5160000111100111001
483−4.52160000111100111010
4844.53.5160000111100111011
485−2.5−4160000111100111100
486−9−0.5160000111100111101
48710.50160000111100111110
48810.50.5160000111100111111
489−2.5−3160000111101000000
490−4−2160000111101000001
491015160000111101000010
49212.50.5160000111101000011
493015.5160000111101000100
494−7.50.5160000111101000101
49553.5160000111101000110
4962.5−6.5160000111101000111
497−1.58.5160000111101001000
4980.5−7.5160000111101001001
499−15.5−0.5160000111101001010
500−3.55.5160000111101001011
5010−9.5160000111101001100
5020−8.5160000111101001101
50315.5−1.5160000111101001110
504−3−3.5160000111101001111
50541.5160000111101010000
50660.5160000111101010001
5072−4.5160001110010110010
508−0.58.5160001110010110011
5093.54.5160010000011001000
510−6−2160010000011001001
511−6−1.5160010000011001010
51261160010000011001011
513−4.53160010000011001100
5140.5−12.5160010000011001101
515114.5160010000011001110
5161.5−10.5160010000011001111
5170.59160010000011100000
5180.5−9.5160010000011100001
519−24.5160010000011100010
5204.5−6.5160010000011100011
521−4.57.5160010000011100100
5224.5−3.5160010000011100101
5234.5−3160010000011100110
524−1.5−8.5160010000011100111
525−3.55160010000011101000
526−34.5160010000011101001
5278.5−1.5160010000011101010
528−1.56.5160010000011101011
529−4−2.5160010000011101100
5302.5−7.5160010000011101101
5318.51.5160010000011101110
53290160010000011101111
5339.5−1.5160010000011110000
5349.50160010000011110001
535−3−4160010000011110010
5363.5−9.5160010000011110011
537−3.5−3160010000011110100
538−3−3160010000011110101
539−8.5−0.5160010000011110110
5403.5−4160010000011110111
541−70.5160010000011111000
5425−2160010000011111001
543−7.5−1160010000011111010
544−14−0.5160010000011111011
545−0.5−10.5160010000011111100
54606.5160010000011111101
54707160010000011111110
548140.5160010000011111111
549−15.50.5160010010001000000
55051.5160010010001000001
551012.5160010010001000010
552−160160010010001000011
553−100160010010001000100
554−6.51.5160010010001000101
5551.56.5160010010001000110
556−5.51160010010001000111
5574.5−10.5160010101110110010
558−7.52.5160010101110110011
559−35160010101111110100
560−63.5160010101111110101
5616.52.5160010101111110110
5627−0.5160010101111110111
56308.5160010111111101000
5642.5−5.5160010111111101001
565−5−2.5160010111111101010
5667.5−1.5160010111111101011
567−1.57.5160010111111101100
568−0.510.5160010111111101101
569−2.54160010111111101110
570−1.59.5160010111111101111
571−1−8160010111111110000
572−5.5−3160010111111110001
5730.5−15.5160010111111110010
5741.54160010111111110011
575−7−1160010111111110100
576−3.54.5160010111111110101
5770.56160010111111110110
57891160010111111110111
5799.5−3.5160010111111111000
5805−2.5160010111111111001
581−15−0.5160010111111111010
582−8.51.5160010111111111011
5839.51.5160010111111111100
58410.5−0.5160010111111111101
5850.5−8.5160010111111111110
586−3.58.5160010111111111111
587−1.5−15.5160100100000100000
58811.51.5160100100000100001
5892.54160100100000100010
5903−13.5160100100000100011
5910.513160100100000100100
5923−5.5160100100000100101
59313.5−1.5160100100000100110
5943−5160100100000100111
5950.513.5160100100000101000
5963.56.5160100100000101001
597−9.5−0.5160100100000101010
5980−11.5160100100000101011
5994−3160100100000101100
60014.5−11.5160100100000101101
60114.5−1.5160100100000101110
6020−10.5160100100000101111
603−11.50160100100000110000
6046−1160100100000110001
605−14.5−14.5160100100000110010
606−0.5−9.5160100100000110011
607−1.5−6160100100000110100
608−3.5−7160100100000110101
609−0.5−6160100111010100000
610−2.5−10.5160100111010100001
611−4.5−14.5160100111010100010
612−11.5−1.5160100111010100011
613−3.54160100111010100100
614−11.5−0.5160100111010100101
615−1.510.5160100111010100110
616−6−1160100111010100111
617−1−7.5160100111010101000
618−1−6160100111010101001
61952.5160100111010101010
620−7−0.5160100111010101011
621−25160100111010101100
622−3.57.5160100111010101101
623−27.5160100111010101110
624−211160100111010101111
625−5.53160100111010110000
626−1.5−11.5160100111010110001
6275.51160100111010110010
628−1.5−9.5160100111010110011
6295.52.5160100111010110100
630−3−5.5160100111010110101
6316−3.5160100111010110110
6326−2.5160100111010110111
633−5.55.5160100111010111000
63435160100111010111001
635−5.56.5160100111010111010
636−44160100111010111011
6376.5−3.5160100111010111100
6386.5−2.5160100111010111101
6391.57160100111010111110
6403.5−5160100111010111111
641−5−3.5160100111100000000
6421.510.5160100111100000001
6432−6160100111100000010
6441−15160100111100000011
6451−9160100111100000100
6466.53.5160100111100000101
6471−8.5160100111100000110
648−1.5−5160100111100000111
649−0.56160100111100001000
65071160100111100001001
651−3.5−5.5160100111100001010
65273160100111100001011
653−80.5160100111100001100
654−7.5−2.5160100111100001101
655−0.58160100111100001110
656−61160100111100001111
657010160100111100010000
6587.51.5160100111100010001
6597.57.5160100111100010010
6607.58.5160100111100010011
661011160100111100010100
6628.5−15160100111100010101
6638.5−9.5160100111100010110
6648.5−4.5160100111100010111
665−0.510160100111100011000
666−15.5−1.5160100111100011001
667−2.56.5160100111100011010
668−2−5160100111100011011
6693.58.5160100111100011100
6703.511160100111100011101
671−5.5−5.5160100111100011110
67224160100111100011111
673−4.55160100111100100000
6749.5−0.5160100111100100001
675−15−1160100111100100010
6764−1.5160100111100100011
6779.51160100111100100100
6780−16160100111100100101
67910.5−3.5160100111100100110
680−4−4.5160100111100100111
681−19.5160100111100101000
682−4−4160100111100101001
683−113.5160100111100101010
684−5.5−2160100111100101011
68543160100111100101100
68612.5−1.5160100111100101101
68712.5−0.5160100111100101110
688−0.5−15160100111100101111
6894.5−9.5160100111100110000
69013−0.5160100111100110001
6910−12160100111100110010
692−10−0.5160100111100110011
693−140.5160100111100110100
6940−10160100111100110101
69516.5160100111100110110
69613.54.5160100111100110111
697−0.5−12.5160100111100111000
6980−9160100111100111001
699−9.5−1160100111100111010
700−11.5−3.5160100111100111011
7011.5−7160100111100111100
702−35.5160100111100111101
7031.5−6160100111100111110
7042.55.5160100111100111111
70514.51.5160100111101000000
7062.56160100111101000001
70715.5−15.5160100111101000010
708−38.5160100111101000011
709ESCESC70010001

Claims as granted

42 claims

Log in to read the claims of this application.

Log in to unlock

Classifications

10 codes
IPC · International Patent Classification
Section G — Physics
  • G06T9/00
Section H — Electricity
  • H04N7/36
  • H04N7/32
  • H03M7/36
  • H03M7/42
  • H04N7/26
  • H04N7/18
USPC · US Patent Classification
375/240.16375/240.17375/240.23

Claim changes

Soon
Coming soonHow the claims changed between publication and grant

See which claims were amended, added or cancelled during examination, with every added and removed word marked.

AmendedAddedCancelledUnchanged

The published claims of this application are not paired with the granted ones in what we hold.

File wrapper

⤢ drag to zoomJul 2004Jan 2005Jul 2005Jan 2006Jul 2006Jan 2007Jul 2007Jan 2008Jul 2008USPTOApplicantNon-final rejectionResponse after non-finalResponse after finalNotice of allowance
USPTOApplicanthover for detail · click to open
Pendency
4.1 y
1,497 days filing → grant
Office actions
2
non-final + final
Responses
3
no RCE
Examiner
Andy S Rao
art unit 2621 · TC 2600
Citations: 269 back · 4 forward

See the full prosecution history — every USPTO and applicant action on this file, in order.

Log in to unlock

Documents

Log in to open the documents of this file: the application as filed, every office action and response, the notice of allowance.

Log in to unlock

Chain of title

⤢ drag to zoom2015201620172018201920202021202220232024Owner 1
Titlehover for detail · click to open

See the full assignment history — every owner this patent has passed through, with recordation dates and reel/frame numbers.

Log in to unlock