Coding interpolation filter

By employing an interpolation filter with a decoded movement vector and reusing movement vectors and interpolation filters from neighboring blocks, the video compression technique addresses inefficiencies in existing methods, resulting in improved coding efficiency and reduced output bitstream size.

DE102016125456B4Active Publication Date: 2025-04-24GOOGLE LLC
View PDF 1 Cites 0 Cited by

Patent Information

Application Number
DE102016125456
Authority / Receiving Office
DE · DE
Patent Type
Patents
Current Assignee / Owner
Priority Date
2016-04-15
Filing Date
2016-12-22
Publication Date
2025-04-24
Estimated Expiration
2036-12-22

AI Technical Summary

Technical Problem

Existing video compression techniques face inefficiencies due to the large data size of video streams, particularly in specifying movement vectors and interpolation filters, which increase the output bitstream size and reduce coding efficiency.

Method used

The proposed solution involves using an interpolation filter with a decoded movement vector for video decoding and coding, where previously used movement vectors and interpolation filters from neighboring blocks are reused to reduce the need for explicit specification in the output bitstream.

Benefits of technology

This approach improves coding efficiency by reducing the size of the output bitstream and minimizing the data required for movement vectors and interpolation filters, thereby enhancing the compression and transmission of video data.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure 00000000_0000_ABST
    Figure 00000000_0000_ABST
Patent Text Reader

Abstract

Procedure, comprehensive: decoding the first block of a current frame from an encoded video stream, wherein decoding the first block includes the following: decoding a first motion vector from the encoded video stream; decoding (820) an identifier of a first interpolation filter from the encoded video stream; and Reconstructing the first block using the first motion vector and the first interpolation filter; decoding, with a processor, in response to instructions stored on a non-transitory computer-readable medium, a second block of the current frame from the encoded video stream, wherein decoding the second block includes: the identification (840) of the first motion vector from the first block as the selected motion vector for the prediction of the second block in response to the decoding (830) of an identifier of an inter-prediction mode from various possible prediction modes for decoding the second block; Identifying the first interpolation filter as a selected interpolation filter for predicting the second block in response to identifying the first motion vector from the first block as the selected motion vector for predicting the second block; and the reconstruction (850) of the second block using the first motion vector and the first interpolation filter; and output or storage of the first block and the second block; including the various possible prediction modes: a prediction mode with a new motion vector mode in which a new motion vector for the current block is explicitly signaled in the encoded video stream, a prediction mode with a zero-motion vector mode where no motion is present, a prediction mode with a next motion vector mode in which a motion vector that was used to encode an adjacent, previously encoded block is identified as the next motion vector and used to predict the current block, and a prediction mode with a near motion vector mode, in which a motion vector that was used for encoding an adjacent, previously encrypted block and identified as the near motion vector is used for the prediction of the current block.
Need to check novelty before this filing date? Find Prior Art

Description

BACKGROUND

[0001] Digital video technology can be used, for example, for virtual business meetings via video conferencing, high-definition video entertainment, video advertising, or the distribution of user-generated videos. Due to the large amount of data generated by videos, high-performance compression is required for transmission and storage. Various approaches already exist for reducing the amount of data in video streams, including compression and other encoding and decoding techniques. These techniques can include subpixel interpolation for partial motion.

[0002] US 2015 / 055705 A1 discloses a method in which a motion vector is generated for an input coding unit. A weight parameter is generated based on a prediction unit. This weight parameter is applied to the prediction signal to generate a prediction macroblock, and a residual value is generated based on the received coding unit and the prediction block. The same motion parameter is assigned to the merged blocks, and the blocks are transmitted to the decoder.

[0003] Mukherjee et al. “A technical overview of VP9 - the latest open-source video codec” in: SMPTE motion imaging journal, Vol. 124, 2015, No. 1, pp. 44-54, refers to a technical overview of the coding tools included in VP9 as well as comparisons of the coding performance with other state-of-the-art video codecs - namely H.264 / AVC and HEVC - on standard test sets. SUMMARY

[0004] This application relates to the encoding and decoding of video stream data for transmission or storage. It discloses aspects of the systems, methods, and devices relating to the mapping of a motion vector to an interpolation filter for the inter-prediction of blocks of a video data frame.

[0005] One aspect is a method according to claim 1. The method is a method for video decoding using an interpolation filter with a decoded motion vector. The decoding can include: a first block of a current frame from an encoded video stream, decoding by a processor in response to instructions stored on a non-transitory, computer-readable medium, a second block of the current frame from the encoded video stream, and the output and / or storage of the first and second blocks. The decoding of the first block can include: decoding a first motion vector from the encoded video stream, decoding an identifier of a first interpolation filter from the encoded video stream, and reconstructing the first block using the first motion vector and the first interpolation filter.Decoding the second block may involve: identifying the first motion vector from the first block as a selected motion vector for the prediction of the second block in response to the decoding of an inter-prediction mode identifier for the decoding of the second block, identifying the first interpolation filter as the selected interpolation filter for the prediction of the second block in response to the identification of the first motion vector from the first block as the selected motion vector for the prediction of the second block, and reconstructing the second block using the first motion vector and the first interpolation filter.

[0006] Another aspect is a method according to claim 10. The method is a video encoding method using an interpolation filter with a decoded motion vector. The encoding may include: generating a first encoded block by encoding a first block from a current frame from an input video stream, thereby outputting the first encoded block; generating, by a processor in response to instructions stored on a non-transitory, computer-readable medium, a second encoded block by encoding a second block from the current frame; and transmitting or storing the output bitstream. The encoding of the first block may include identifying a first motion vector for predicting the first block and identifying a first interpolation filter for predicting the first block.The output of the first encrypted block may include the first motion vector in an output bitstream, including an identifier for the first interpolation filter in the output bitstream. The encoding of the second block may include the identification of a candidate motion vector for predicting the second block. The candidate motion vectors may include a first motion vector and a second motion vector for predicting the second block, where the second motion vector is different from the first motion vector and is a non-zero motion vector.The encoding of the second block can include identifying, from the candidate motion sectors, a selected motion vector for the prediction of the second block and, given that the selected motion vector is the first motion vector, identifying the first interpolation filter as the selected interpolation filter for the prediction of the second block and omitting the selected motion vector for the prediction of the second block and the identifier of the selected interpolation filter for the prediction of the second block from the output bitstream.

[0007] Variations of these and other aspects are described in detail below. BRIEF DESCRIPTION OF THE DRAWINGS

[0008] This description refers to the accompanying drawings, where identical reference numbers in the different views refer to identical parts unless otherwise stated. Fig. Figure 1 is a diagram of a computer device according to implementations of this disclosure. Fig. Figure 2 is a diagram of a computer and communication system according to implementations of this disclosure. Fig. Figure 3 is a diagram of a video stream for use in encoding and decoding according to implementations of this disclosure. Fig. Figure 4 is a block diagram of an encoder according to implementations of this revelation. Fig. Figure 5 is a block diagram of a decoder according to implementations of this revelation. Fig. Figure 6 is a block diagram of a motion vector with subpixel accuracy in accordance with implementations of this disclosure. Fig. Figure 7 is a flowchart of a process for encoding with an interpolation filter associated with a coded motion vector in accordance with implementations of this disclosure. Fig. Figure 8 is a flowchart of a process for decoding with an interpolation filter connected to a decoded motion vector in accordance with implementations of this disclosure. DETAILED DESCRIPTION

[0009] Video compression models can involve breaking each image or frame into smaller parts, such as blocks, and generating an output bitstream using techniques that limit the information each block contains in the output. An encoded bitstream can then be decoded to reconstruct the original images from this limited information. The information for each block in the output can be restricted by reducing spatial redundancy, reducing temporal redundancy, or a combination of both. For example, temporal or spatial redundancy can be reduced by predicting a frame based on information available to the encoder and decoder, and by including information that represents a difference or residual value between the predicted and the original frame.

[0010] Motion prediction can involve the use of an inter-prediction mode, in which parts of a reference frame are compared to a block in a current frame. A motion vector can be defined to represent a block or pixel offset between the reference frame and the corresponding block or pixel in the current frame. However, specifying the motion vector in the output bitstream can increase the size of the output bitstream, potentially reducing encoding efficiency. Encoding efficiency can be improved by encoding blocks with motion vectors that were previously used to encode adjacent or spatially close blocks.For example, the encoder can evaluate previously encoded adjacent blocks to identify the candidate motion vectors for encoding the current block, select one of the candidate motion vectors from the previously encoded blocks as the motion vector for encoding the current block, specify an inter-prediction mode that corresponds to the selected motion vector in the output bitstream, and not specify the motion vector for predicting the current block in the output bitstream.

[0011] An interpolation filter can be used to adjust for subblock or subpixel motion between the reference frames and the current frame. Subpixel motion can also be referred to as subpixel motion or fractional pixel motion. The encoder can identify a motion vector and a subpixel interpolation filter for encoding a block and specify the motion vector and an identifier of the subpixel interpolation filter in the encoded video stream.For example, the encoder can evaluate previously encoded adjacent blocks to identify candidate motion vectors for encoding the current block, select one of the candidate motion vectors from the previously encoded blocks as the motion vector for encoding the current block, specify an inter-prediction mode corresponding to the selected motion vector in the output bitstream, not specify the motion vector for predicting the current block in the output bitstream, and specify a subpixel interpolation filter identifier to identify the current block in the output bitstream. However, specifying the subpixel interpolation filter identifier in the output bitstream can increase the size of the output bitstream, potentially reducing encoding efficiency.

[0012] Encoding efficiency can be improved by encoding blocks with interpolation filters that were previously used to encode adjacent or spatially close blocks. For example, the encoder can evaluate previously encoded adjacent blocks to identify the candidate motion vectors for encoding the current block, select one of the candidate motion vectors from the previously encoded blocks as the motion vector for encoding the current block, identify the interpolation filter that was used to encode the adjacent, previously encoded block and corresponds to the selected motion vector, specify an inter-prediction mode that corresponds to the selected motion vector and the identified interpolation filter in the output bitstream, and exclude the motion vector and the identified interpolation filter from the prediction of the current block in the output bitstream.

[0013] Fig. Figure 1 is a diagram of a computer device 100 according to implementations of this disclosure. A computer device 100 as shown includes a communication interface 110, a communication unit 120, a user interface (UI) 130, a processor 140, a memory 150, instructions 160, and a power source 170. As used herein, the term "computer" includes any unit or combination of units capable of performing any of the procedures or parts thereof described herein.

[0014] The computer device 100 can be a stationary computer device, such as a PC, server, workstation, minicomputer, or mainframe, or a mobile computer device, such as a mobile phone, personal digital assistant (PDA), laptop, or tablet PC. Although represented as a single unit, one or more elements of the computer device 100 can be integrated into any number of separate physical units. For example, the user interface (UI) 130 and the processor 140 can be integrated into a first physical unit, and the memory 150 can be integrated into a second physical unit.

[0015] The communication interface 110 can be, as shown, a wireless antenna, a wired communication port such as an Ethernet port, an infrared port, a serial interface, or any other wired or wireless interface capable of communicating with a wired or wireless electronic communication medium 180.

[0016] The communication unit 120 is configured to send and receive signals via a wired or wireless medium 180. For example, as shown, the communication unit 120 is operationally connected to an antenna configured to communicate via radio signals. Although not explicitly stated in Fig. As shown in Figure 1, the Communication Unit 120 can be configured to transmit, receive, or both transmit any wired or wireless communication medium, such as UV light, visible light, radio frequency (RF), fiber optic cable, cable, or a combination thereof. Although Fig. 1 represents a single communication unit 120 and a single communication interface 110, any number of communication units and any number of communication interfaces can be used.

[0017] The UI 130 includes any unit that provides an interface with the user, such as a virtual or physical keyboard, a touchpad, a display, a touchscreen, a speaker, a microphone, a video camera, a sensor, or a combination thereof. The UI 130 can be operationally connected to the processor or to another element of the computer device 100, such as the power source 170, as shown. Although depicted as a single unit, the UI 130 can include one or more physical units. For example, the UI 130 can include an audio interface for conducting audio communications with a user. The UI 130 can include a touchscreen for conducting touch-based communications with a user. Although depicted as separate units, the communication interface 110, the communication unit 120, and the UI 130, or parts thereof, can form a combined unit.For example, the communication interface 110, the communication unit 120 and the UI 130 can be implemented as a communication port that establishes an interface with an external touchscreen device.

[0018] The Processor 140 includes any device or system capable of manipulating or processing a signal or other information, whether existing now or to be developed later, including optical processors, quantum processors, molecular processors, or a combination thereof. For example, the Processor 140 may include a special-purpose processor, a digital signal processor (DSP), a variety of microprocessors, one or more microprocessors in conjunction with a DSP core, a controller, a microcontroller, an application-specific integrated circuit (ASIC), a field-programmable gate array (FPGA), a programmable logic array, a programmable logic controller, microcode, firmware, and any type of integrated circuit (IC), a state machine, or a combination thereof. As used herein, the term "processor" includes a single processor or multiple processors.The processor 140 is operationally connected to the communication interface 110, the communication unit 120, the UI 130, the memory 150, the instructions 160 and the power source 170 in the example of . Fig. 1 connected.

[0019] Memory 150 includes any non-transient, digitizable, or computer-readable medium, such as any tangible device, that can contain, store, communicate, or transport, for example, the instructions 160 or any other related information for use by or in connection with the processor 140. The non-transient, digitizable, or computer-readable medium can be, for example, a solid-state drive, a memory card, a removable medium, read-only memory (ROM), working memory (RAM), any type of storage medium including a hard disk, a floppy disk, an optical disc, a magnetic or optical card, an application-specific integrated circuit (ASIC), or any type of non-transient media suitable for storing electronic information, or a combination thereof.For example, memory 150 can be connected to processor 140, for example via a memory bus (not explicitly shown).

[0020] Instructions 160 contain instructions for executing any one of the methods disclosed herein, or one or more parts thereof. Instructions 160 can be implemented in hardware, software, or a combination thereof. For example, Instructions 160 can be implemented as information stored in memory 150, such as a computer program that can be executed by Processor 140 to perform the respective methods, algorithms, aspects, or combinations thereof as described herein. Instructions 160, or a part thereof, can be implemented as a special processor or special circuit, including special hardware that can contain any number of the methods, algorithms, aspects, or combinations thereof as described herein.Parts of the 160 guide can be distributed across multiple processors on the same or different machines, or in a network such as a LAN, a WAN, the Internet, or a combination thereof.

[0021] The power source 170 is any suitable device for supplying power to the communication interface 110. The power source 170 can, for example, include a wired power source, one or more dry-cell batteries such as nickel-cadmium (NiCd), nickel-zinc (NiZn), nickel-metal hydride (NiMH), lithium-ion (Li-ion), solar cells, fuel cells, or any other device capable of supplying power to the communication interface 110. The communication interface 110, the communication unit 120, the user interface 130, the processor 140, the instructions 160, and the memory 150 are operationally connected to the power source 170.

[0022] Although they are shown as separate elements, the communication interface 110, the communication unit 120, the UI 130, the processor 140, the instructions 160, the power source 170, the memory 150, or any combination thereof, can be integrated into one or more electronic devices, circuits, or chips.

[0023] Fig. Figure 2 is a diagram of a computer and communications system 200 according to implementations of this disclosure. The computer and communications system 200 includes one or more computer and communications devices 100A / 100B / 100C, one or more access points 210A / 210B, one or more networks 220, or a combination thereof. For example, the computer and communications system 200 may be a multiple access system that provides one or more wired or wireless communications devices such as the computer and communications devices 100A / 100B / 100C with communications such as voice, data, video, messaging, transmitting, or a combination thereof. Although Fig. 2 For the sake of simplicity, where three computer and communication devices 100A / 100B / 100C, two access points 210A / 210B and one network 220 are represented, any number of computer and communication devices, access points and networks can be used.

[0024] A computer and communication device 100A / 100B / 100C is, for example, a computer device such as the computer device 100, shown in Fig. 1. As shown, computer and communication devices 100A / 100B can be end devices such as mobile computers, laptops, thin clients, or a smartphone, and computer and communication device 100C can be a server, such as a mainframe or a cluster. Although computer and communication devices 100A / 100B are described as end devices and computer and communication device 100C is described as a server, each computer and communication device can perform some or all of the functions of a server, some or all of the functions of an end device, or some or all of the functions of both a server and an end device.

[0025] Each 100A / 100B / 100C computer and communication device can be configured to perform wired or wireless communication. For example, a 100A / 100B / 100C computer and communication device can be configured to transmit or receive wired or wireless communication signals and can include a terminal equipment (TE), mobile station, fixed or mobile subscriber unit, mobile phone, PC, tablet computer, server, consumer electronics, or similar device. Although each 100A / 100B / 100C computer and communication device is represented as a single unit, a computer and communication device can contain any number of interconnected elements.

[0026] Each Access Point 210A / 210B is any device configured to communicate with a Computer and Communication Device 100A / 100B / 100C, a Network 220, or both, via wired or wireless communication links 180A / 180B / 180C. For example, an Access Point 210A / 210B might include a Base Station, Base Transceiver Station (BTS), Node-B, Enhanced Node-B (eNode B), Home Node-B (HNode-B), Wireless Router, Wired Router, Hub, Relay, Switch, or any similar wired or wireless device. Although each Access Point 210A / 210B is shown as a single unit, an Access Point can contain any number of interconnected elements.

[0027] Network 220 is any type of network configured to provide services such as voice, data, applications, Voice over Internet Protocol (VoIP), or other communication protocols or combinations thereof, over a wired or wireless communication link. For example, Network 220 could be a local area network (LAN), a wide area network (WAN), a virtual private network (VPN), a cellular or mobile phone network, the internet, or any other means of electronic communication. The network can use a communication protocol such as Transmission Control Protocol (TCP), User Datagram Protocol (UDP), Internet Protocol (IP), Real-time Transport Protocol (RTP), Hypertext Transport Protocol (HTTP), or a combination thereof.

[0028] The 100A / 100B / 100C computer and communication devices can communicate with each other over the 220 network using one or more wired or wireless communication links, or a combination of both. For example, the 100A / 100B computer and communication devices communicate over the 180A / 180B wireless communication links, as shown, and the 100C computer and communication device communicates over a wired communication link. Any one of the 100A / 100B / 100C computer and communication devices can communicate over a wired or wireless communication link or links.For example, a first computer and communication device 100A communicates via a first access point 210A using a first type of communication link, a second computer and communication device 100B communicates via a second access point 210B using a second type of communication link, and a third computer and communication device 100C communicates via a third access point (not shown) using a third type of communication link. Similarly, the access points 210A / 210B communicate with the network 220 via one or more types of wired or wireless communication links 230A / 230B. Although... Fig. 2. The computer and communication devices 100A / 100B / 100C represent communication over the network 220. The computer and communication devices 100A / 100B / 100C can communicate with each other over any number of communication links, such as directly wired or wireless communication links.

[0029] Other implementations of the Computer and Communication System 200 are possible. For example, the Network 220 can be an ad-hoc network and omit one or more access points 210A / 210B. The Data Processing and Communication System 200 can include devices, units, or elements that are not in Fig. Figure 2 is shown. For example, the data processing and communication system 200 can include many other communication devices, networks, and access points.

[0030] Fig. Figure 3 is a diagram of a video stream 300 for use in encoding and decoding according to implementations of this disclosure. A video stream 300, such as a video stream recorded by a video camera or a video stream generated by a computer device, includes a video sequence 310. The video sequence 310 includes a sequence of contiguous frames 320. Although three contiguous frames 320 are represented, the video sequence 310 can include any number of contiguous frames 320. Each frame 330 of the contiguous frames 320 can represent a frame from the video stream. A frame 330 can contain blocks 340. Although in Fig. Unless explicitly shown in Figure 3, a block contains pixels. For example, a block can contain a 1×16 pixel group, an 8×8 pixel group, an 8×16 pixel group, or any other pixel group. Unless otherwise specified herein, the term "block" can include a superblock, a macroblock, a segment, a slice, or any other part of a single frame. A single frame, a block, a pixel, or a combination thereof can contain display information, such as brightness information, color information, or other information that can be used to store, modify, or communicate the video stream or any portion thereof.

[0031] Fig. Figure 4 is a block diagram of an encoder 400 according to implementations of this disclosure. The encoder 400 can be implemented in a device such as the one described in Fig. 1 computer device shown 100 or in the in Fig. 2 computer and communication devices 110A / 100B / 100C shown, such as in a computer software program stored in a data storage device, such as the one in Fig. 1. Memory 150 shown. The computer software program can contain machine instructions that are executed by a processor, such as the processor 140, which is in Fig. Figure 1 shows the encoder, and it can instruct the device to encode the video data as described here. The encoder 400 can be implemented as dedicated hardware, for example in computer device 100.

[0032] The encoder 400 can encode an input video stream 402, such as video stream 300, which is in Fig. Figure 3 shows how to generate an encoded (compressed) bitstream 404. As shown, the encoder 400 includes a forward path for generating the compressed bitstream 404. The forward path includes an intra- / inter-prediction unit 410, a transformation unit 420, a quantization unit 430, and an entropy coding unit 440. The encoder 400 may include a reconstruction path (represented by the broken connecting lines) for reconstructing a single frame for encoding further blocks. The reconstruction path includes a dequantization unit 450, an inverse transformation unit 460, a reconstruction unit 470, and a loop filter unit 480. Other structural variations of the encoder 400 can be used to encode the video stream 402.

[0033] To encode video stream 402, each frame in the video stream 402 can be processed into units of blocks. This allows the current block to be identified from the blocks in a single frame, and the current block can then be encoded.

[0034] In the intra- / inter-prediction unit 410, the current block is coded either using intraframe prediction, which can be implemented within a single frame, or interframe prediction, which can be implemented from frame to frame. Intraframe prediction can involve generating a prediction block from samples in the current frame that were previously coded and reconstructed. Interframe prediction can involve generating a prediction block from samples in one or more previously constructed reference frames. Generating a prediction block for a current block in a current frame can involve performing a motion estimation to generate a motion vector that creates a suitable reference block in the reference frame.

[0035] The intra- / inter-prediction unit 410 subtracts the prediction block from the current block (e.g., a raw block) to produce a residual block. The transformation unit 420 performs a block-based transformation, which may involve transforming the residual block into transformation coefficients, such as in the frequency domain. Examples of block-based transformations include the Karhunen-Loeve transformation (KLT), the discrete cosine transformation (DCT), and the singular value decomposition transformation (SVD). In one example, the DCT involves transforming a block into the frequency domain. The DCT uses transformation coefficient values ​​based on spatial frequency, with the lowest frequency coefficient (i.e., DC) located in the upper left of the matrix and the highest frequency coefficient in the lower right of the matrix.

[0036] The quantization unit 430 converts the transformation coefficients into discrete quantum values, which can be called quantized transformation coefficients, based on a quantization value or quantization level (also called a quantizer). The quantized transformation coefficients can be entropy-encoded by the entropy coding unit 440 to produce entropy-encoded coefficients. Entropy encoding can involve the use of a probability distribution metric. The entropy-encoded coefficients and information used to decode the block, which may include the type of prediction used, motion vectors, and quantizer values, can be output to the compressed bitstream 404. The compressed bitstream 404 can be formatted using various techniques, such as run-length encoding (RLE) and zero-run encoding.

[0037] The reconstruction path can be used to maintain a reference frame synchronization between the encoder 400 and a corresponding decoder, such as the decoder 500 in Fig. 5. The reconstruction path can be similar to the decoding process discussed below and involves, as shown, dequantizing the quantized transformation coefficients in the dequantization unit 450 and performing the inverse transformation of the dequantized transformation coefficients in the inverse transformation unit 460 to produce a derivative residual block. The reconstruction unit 470 adds the prediction block generated by the intra- / inter-prediction unit 410 to the derivative residual block to create a reconstructed block. The loop filter unit 480 can be applied to the reconstructed block to reduce distortions, such as blocking artifacts.

[0038] Other variations of the 400 encoder can be used to encode the compressed 404 bitstreams. For example, a non-transform-based encoder can quantize the remaining block directly without the 420 transform unit. The 430 quantization unit and the 450 dequantization unit can be combined into a single unit.

[0039] Fig. Figure 5 is a block diagram of a decoder 500 according to implementations of this disclosure. The decoder 500 can be implemented in a device such as the one described in Fig. 1 computer device shown 100 or in the in Fig. 2 computer and communication devices 110A / 100B / 100C shown, such as in a computer software program stored in a data storage device 150, such as the one in Fig. 1 shown. The computer software program can contain machine instructions that are executed by a processor, such as the 160 processor shown in Fig. Figure 1 shows the decoder, and it can instruct the device to decode the video data as described here. The Decoder 500 can be implemented as dedicated hardware, for example in the Computer Device 100.

[0040] The decoder 500 receives a compressed bitstream 502, such as the compressed bitstream 404, which is in Fig. The decoder 500 is shown in Figure 4 and decodes the compressed bitstream 502 to produce an output video stream 504. As shown, the decoder 500 includes an entropy decoding unit 510, a dequantization unit 520, an inverse transformation unit 530, an intra- / inter-prediction unit 540, a reconstruction unit 550, a loop filter unit 560, and a deblocking filter unit 570. Other structural variations of the decoder 500 can be used to decode the compressed bitstream 502.

[0041] The entropy decoder unit 510 decodes data elements within the compressed bitstream 502 using an entropy encoding scheme to generate a set of quantized transformation coefficients. The entropy decoder unit 510 can, for example, use Context Adaptive Binary Arithmetic Decoding. The dequantization unit 520 dequantizes the quantized transformation coefficient, and the inverse transformation unit 530 performs an inverse transformation of the dequantized transformation coefficient to generate a derivative remainder block that can match the derivative remainder block generated by the inverse transformation unit 460, which is in Fig. Figure 4 is shown. Using header information decoded from the compressed bitstream 502, the intra- / inter-prediction unit 540 generates a prediction block corresponding to the prediction block created in encoder 400. The reconstruction unit 550 adds the prediction block to the derivative remainder block to create a reconstructed block. The loop filter unit 560 can be applied to the reconstructed block to reduce blocking artifacts. The unblocking filter unit 570 can be applied to the reconstructed block to reduce blocking distortion. The result is output as output video stream 504.

[0042] Other variations of the Decoder 500 can be used to decode the compressed bitstream 502. For example, the Decoder 500 can produce output datastream 504 without the unblocking filter unit 570.

[0043] As briefly mentioned above, reducing temporal redundancy can involve using similarities between frames to decode a single frame. This uses a relatively small amount of data based on one or more frames, which can be previously encoded, decoded, and reconstructed frames of the video stream. For example, a block or pixel of a current frame might be similar to a spatially corresponding block or pixel of a reference frame.A block or pixel of the current frame may be similar to a block or pixel of a reference frame in another part, and the reduction of temporal redundancy may include the generation of motion information from which the spatial difference or translation between the location of the block or pixel in the current frame and the corresponding position of the block or pixel in the reference frame can be derived.

[0044] Reducing temporary redundancy can involve identifying a block or pixel in a reference frame, or a portion thereof, that matches a current block or pixel of the current frame. For example, a reference frame, or a portion of a reference frame that can be stored in memory, is searched for the best block or pixel that can be used to encode a current block or pixel of the current frame. The search can identify the block of the reference frame where the difference in pixel values ​​between the reference block and the current block is minimized, and it can be called a motion search. The portion of the reference frame searched can be restricted.For example, the searched portion of the reference frame, which can be called the search area, can contain a limited number of rows of the reference frame. Marking the reference block can involve calculating a cost function, such as the sum of absolute differences (SAD), between the pixels of the blocks in the search area and the pixels of the current block. More than one reference frame can be provided. For example, three reference frames can be selected from eight possible reference frames.

[0045] The spatial difference between the position of the reference block in the reference frame and the current block in the current frame can be represented as a motion vector. The difference in pixel values ​​between the reference block and the current block is called differential data, residual data, or residual block. Generating motion vectors can be called motion estimation, and a pixel of a current block can be represented by its position using Cartesian coordinates as f. x,y can be specified. Similarly, a pixel of the search area of ​​the reference single image can be specified using its position with Cartesian coordinates as r. x,y A motion vector (MV) for the current block can be determined, for example, using a SAD between the pixels of the current frame and the corresponding pixels of the reference frame.

[0046] Although described here in terms of matrix or Cartesian representation of a single image for the sake of clarity, a single image can be stored, transmitted, and / or processed in any data structure that allows for the efficient representation of pixel values ​​for a single image or an image. For example, a single image can be stored, transmitted, and / or processed in a two-dimensional data structure such as a matrix or in a one-dimensional data structure such as a vector array.

[0047] For inter-predictions, the encoder can provide 400 encoded information for prediction blocks at block endpoints, including but not limited to a prediction mode, prediction reference frame(s), motion vector(s) (if required), and subpixel interpolation filter types.

[0048] Fig. Figure 6 is a block diagram of a representation of inter-prediction with a subpixel interpolation filter according to implementations of this disclosure. Inter-prediction with a subpixel interpolation filter can be implemented in a decoder such as the Decoder 500, as shown in Fig. 5, in an encoder, such as the Encoder 400, as shown in Fig. 4, or both.

[0049] Inter-prediction can involve encoding a current frame 610, or a part of it, such as block 612 or block 614, with reference to a reference frame 620. For example, a motion vector 632 / 634 shows a spatial location of a reference block 622 / 624 in the reference frame 620 relative to the location of the corresponding block 612 / 614 in the current frame 610. The reference block 622 / 624 is the part of the reference frame 620 identified as most closely matching the corresponding block 612 / 614 in the current frame 610, and the reference block 622 / 624 is used to generate a prediction block for decoding the current frame 610.

[0050] The portion 626 of the reference frame 620 that most closely corresponds to a current block 614 of the current frame 610 may be offset from block or pixel boundaries. In this case, the inter-prediction may involve the use of a subpixel interpolation filter. For example, inter-predictions may involve the use of a motion vector precision of 1 / 2 Pel, 1 / 4 Pel, or 1 / 8 Pel when using a subpixel interpolation filter. Different Pel-side positions may be used for a subpixel interpolation filter.

[0051] The encoding of a current block involves identifying a prediction mode from among various possible prediction modes for encoding or decoding that block. For example, a video encoder might evaluate the possible prediction modes, including intra-prediction modes and / or inter-prediction modes, to identify the optimal prediction mode. The optimal prediction mode might be the one that minimizes an error metric, such as rate distortion cost, for the current block.

[0052] The inter-prediction mode can include a new motion vector mode (NewMV), a zero motion vector mode (ZeroMV), a nearest motion vector mode (NearestMV), and / or a close motion vector mode (NearMV). The new motion vector mode (NewMV) indicates that a new motion vector for the current block is being signaled explicitly or expressly in the encoded video stream. The new motion vector can be signaled differentially. For example, the new motion vector can be signaled by a difference between the new motion vector and a reference motion vector, such as a motion vector used to encode a previously encoded neighboring block. The zero motion vector mode (ZeroMV) indicates that a zero motion vector (0, 0), indicating that no motion is occurring, is being used to predict the current block.In this case, an explicit motion vector for predicting the current blocks from the encoded video stream can be omitted. The NearestMV mode can mean that a motion vector used to encode an adjacent, previously encoded block is identified as the nearest motion vector and used to predict the current block, thus omitting an explicit motion vector for predicting the current block from the encoded video stream. The Near Motion Sector mode can mean that a motion vector used to encode an adjacent, previously encoded block and identified as the nearest motion vector is used to predict the current blocks, thus omitting an explicit motion vector for predicting the current block from the encoded video stream.

[0053] The encoder, decoder, or both can identify possible movement vectors for encoding or decoding the current block. For example, the possible movement vectors include the zero movement vector, a new movement vector, a near movement vector, and a next movement vector. The encoder can evaluate adjacent or nearby previously encoded blocks to identify the near movement vector and the next movement vector. For example, the near movement vector is identified by a first adjacent or nearby previously encoded block, and the next movement vector is identified by a second adjacent or nearby previously encoded block.

[0054] Encoding or decoding the current block may involve identifying an interpolation filter for predicting the current block. For example, an interpolation filter can be selected from a range of possible interpolation filters. These possible filters include 1 / 16-pel precision filters, bilinear filters, 8-tap filters (EIGHTTAP), sharp 8-tap filters (EIGHTTAP_SHARP), smooth 8-tap filters (EIGHTTAP_SMOOTH), or a combination thereof.

[0055] Fig. Figure 7 is a flowchart of an example procedure for encoding with an interpolation filter associated with a motion vector in accordance with implementations of this disclosure. Encoding with an interpolation filter associated with a motion vector can be implemented in an encoder, such as the Encoder 400, shown in Figure 7. Fig. 4.

[0056] Encoding using an interpolation filter associated with a motion vector involves encoding a first block at 710, outputting an identifier for the motion vector and interpolation filter for the first block at 720, identifying possible motion vectors for encoding a second block at 730, identifying a prediction mode for encoding the second block at 740, and outputting a prediction mode for encoding the second block at 750.

[0057] The first block is encoded at 710. An encoder, such as encoder 400 from Fig. 4, can encode the first block of a current frame, such as the block in the top left of frame 610, shown in Fig. 6. Encoding the first block may involve identifying a motion vector for encoding the first block. Although in Fig. Not shown separately in Figure 7, identifying the motion vector for encoding the first block can involve identifying possible motion vectors for encoding the first block. These possible motion vectors can include a new motion vector, a zero motion vector, a near motion vector, or a nearest motion vector. The near and nearest motion vectors can be identified by evaluating previously encoded blocks adjacent to or near the first block in the current frame. For example, the blocks of the current frame can be encoded in raster-sampling order, and the previously encoded blocks near the first block in the first frame can include the block to the left of the first block, the block above the first block, the block above and to the left of the first block, the block above and to the right of the first block, or a combination thereof.The new motion vector can be identified for encoding the first block, and an interpolation filter can be identified for encoding the first block. The interpolation filter can be a subpixel interpolation filter, such as a bilinear filter, an 8-tap filter (EIGHTTAP), a sharp 8-tap filter (ElGHTTAP_SHARP), a smooth 8-tap filter (ElGHTTAP_SMOOTH), or a combination thereof.

[0058] A reference block is identified in a reference frame based on the motion vector, and a prediction block is generated from the reference block using the interpolation filter. A residual or prediction error between the input or source, the first block, and the prediction block may be present in the output bitstream.

[0059] The movement vector and an identifier for the interpolation filter used to encode the first block are included in the output bitstream at 720, for example, in a header for the first block. The movement vector for encoding the first block can be associated with the interpolation filter used for encoding the first block.

[0060] A second or current block of the current frame can be encoded after the first block of the current frame has been encoded. For example, an encoder such as the Encoder 400 from Fig. 4. Encode a second block, such as block 614 from frame 610, as shown in Fig. 6.

[0061] Encoding the current block involves identifying the possible vectors for encoding the current block at 730. These possible motion vectors can include a new motion vector, a zero motion vector, a near motion vector, or a nearest motion vector. The near and nearest motion vectors can be identified by evaluating previously encoded blocks that are adjacent to or near the current block in the current frame.For example, the blocks of the current frame can be encoded in raster sampling order, and the previously encoded blocks near the current block in the current frame can include the block to the left of the current block, the block above the current block, the block above and to the left of the current block, the block above and to the right of the current block, or a combination thereof; however, different previously encoded blocks near the current block or a different encoding order can also be used. The first block encoded at 710 can be a previously encoded block near the current block in the current frame, and the motion vector used to encode the first block can be identified as the near motion vector or the nearest motion vector for encoding the current block.

[0062] A prediction mode is identified for encoding the second block at 740. For example, an inter-prediction mode, such as a NewMV, ZeroMV, NearestMV, or NearMV, can be identified for encoding the current block.

[0063] The next motion vector mode can be identified for encoding the current block, and a corresponding next motion vector can be identified as the motion vector for encoding the current block. For example, the first block can be a previously encoded block near the current block in the current frame; the motion vector used for encoding the first block can be identified as the next motion vector; the prediction mode for encoding the current block can be identified as the next motion vector mode; and the motion vector used for encoding the first block can be identified as the motion vector for encoding the current block.Similarly, the nearest motion vector mode for encoding the current block can be identified, and a corresponding nearest motion vector can be identified as the motion vector for encoding the current block. For example, the first block might be a previously encoded block near the current block in the current frame; the motion vector used to encode the first block is identified as the nearest motion vector; the prediction mode for encoding the current block is identified as the nearest motion vector mode; and the motion vector used to encode the first block is identified as the motion vector for encoding the current block.

[0064] Identifying the prediction mode at 740 can involve identifying an interpolation filter for encoding the current block based on the motion vector identified for encoding the current block. The block identified for encoding the current motion vector can be a new motion vector, and identifying the interpolation filter for encoding the current block can involve evaluating a possible interpolation filter to identify an optimal one. The motion vector identified for encoding the current block can be the next motion vector, and the interpolation filter used for encoding the block that corresponds to the next motion vector is identified as the interpolation filter for encoding the current block.For example, the motion vector used to encode the first block can be identified as the next motion vector, the prediction mode is identified as the next motion vector mode, and the interpolation filter used to encode the first block can be identified as the interpolation filter for the second block. Similarly, the motion vector identified for encoding the current block can be the nearest motion vector, and the interpolation filter used to encode the block that corresponds to the nearest motion vector is identified as the interpolation filter for encoding the current block.For example, the motion vector used for encoding the first block can be identified as the nearest motion vector, the prediction mode is identified as the nearest motion vector mode, and the interpolation filter used for encoding the first block is identified as the interpolation filter for the second block.

[0065] For encoding the current frame, a reference block can be identified within a reference frame based on the identified motion vector, and a prediction block can be generated from the reference block using the identified interpolation filter. A residual or prediction error between the input or source, the current block, and the prediction block may be present in the output bitstream.

[0066] The prediction mode used for encoding the current block is part of the output bitstream at 750, as shown in the current block header. The motion vector used for encoding the current block and an interpolation filter identifier can be omitted from the output bitstream. For example, the prediction mode can be identified as the nearest motion vector mode, the near motion vector mode, or the zero motion vector mode, and the motion vector and an interpolation filter identifier can be omitted from the output bitstream.

[0067] Fig. Figure 8 is a flowchart of an example procedure for encoding with an interpolation filter associated with a motion vector in accordance with implementations of this disclosure. Decoding with an interpolation filter associated with a motion vector can be implemented in a decoder, such as the Decoder 500, shown in Figure 8. Fig. 5. Decoding using an interpolation filter associated with a motion vector involves decoding a first block at 810, decoding a prediction mode for decoding a second or current block at 820, and identifying a motion vector and an associated interpolation filter for decoding the current block at 830.

[0068] The first block of a current frame is decoded at 810. Decoding the first block may involve decoding a prediction mode, such as a new motion vector mode, for decoding the first block. The prediction mode may be the new motion vector mode, and decoding the first block may involve decoding a motion vector and an identifier for an interpolation filter, such as a subpixel interpolation filter. Decoding the first block may also include decoding a residual prediction error for the first block.Decoding the first block can involve: identifying a reference block in a reference frame based on the decoded motion vector, generating a prediction block from the reference block using the interpolation filter specified by the identifier of the decoded interpolation filter, and generating a reconstructed block by adding the decoded remainder to the prediction block. The prediction mode, the motion vector, the interpolation filter identifier, or a combination thereof, can be decoded from a header for the first block in the encoded video stream. The reconstructed block can be included in an output, such as a presentation output.

[0069] A prediction mode for decoding a second or current block is identified at 820. Identifying the prediction mode for decoding the second block may involve decoding the prediction mode from the encoded bitstream. The prediction mode may be decoded from a current block header in the encoded video stream. The current block header may omit a motion vector, an interpolation filter identifier, or both for decoding the current block. The decoded prediction may specify the nearest motion vector mode, the near motion vector mode, or the zero motion vector mode, and the encoded video stream may omit a motion vector and an interpolation filter identifier for decoding the current block.

[0070] A motion vector and an associated interpolation filter for decoding the current block are identified at 830. For example, the prediction mode for decoding the current block, identified at 820, can be the nearest motion vector mode or the near motion vector mode, and a motion vector and an associated interpolation filter for decoding the current block are identified.

[0071] Identifying the motion vector for decoding the current block may involve identifying the possible motion vectors for decoding the current block. Identifying the possible motion vectors may involve identifying a nearby motion vector, a nearest motion vector, or both. The nearby and nearest motion vectors can be identified by evaluating previously decoded blocks that are adjacent to or near the current block in the current frame. For example, the blocks of the current frame may be decoded in raster-sampling order, and the previously decoded blocks near the current block in the current frame may include the block to the left of the current block, the block above the current block, the block above and to the left of the current block, the block above and to the right of the current block, or a combination thereof.However, different previously decoded blocks are located near the current block. A different decoding order can be used. For example, the first block decoded at 810 might be a previously decoded block near the current block in the current frame, and the motion vector used to decode the first block could be identified as the nearby motion vector or the closest motion vector for decoding the current block.

[0072] The prediction mode decoded for the second block at 820 can be the next motion vector mode. The first block decoded at 810 is a previously decoded block close to the current block in the current frame, and the motion vector used to decode the first block is identified as the next motion vector for decoding the current block. Based on the decoded prediction mode for the current block, the motion vector used to decode the first block can be identified as the motion vector selected for decoding the current block.Similarly, the prediction mode decoded for the second block at 820 can be the near motion vector mode; the first block decoded at 810 is a previously decoded block near the current block in the current frame; and the motion vector used to decode the first block is identified as the near motion vector for decoding the current block. Based on the decoded prediction mode for the current block, the motion vector used to decode the first block can be identified as the motion vector selected for decoding the current block.

[0073] An interpolation filter associated with the selected motion vector can be identified as an interpolation filter for encoding the current block.

[0074] In one example, the prediction mode decoded for the second block at 820 can be the next motion vector mode. The first block decoded at 810 is a previously decoded block close to the current block in the current frame, and the motion vector used to decode the first block is identified as the next motion vector for decoding the current block. Based on the decoded prediction mode for the current block, the motion sector used to decode the first block is identified as the motion sector for decoding the current block. And based on the selected motion sector, the interpolation filter used to decode the first block that can be associated with the selected motion vector is identified as the selected interpolation filter for decoding the current block.Similarly, the prediction mode decoded for the second block at 820 can be the near motion sector mode; the first block decoded at 810 is a previously decoded block near the current block in the current frame; the motion vector used to decode the first block is identified, based on the decoded prediction mode for the current block, as the near motion vector for decoding the current block; the motion vector used to decode the first block is identified as the motion vector selected for decoding the current block; and, based on the selected motion sector, the interpolation filter used to decode the first block, which can be assigned to the selected motion vector, is identified as the selected interpolation filter for decoding the current block.

[0075] Decoding the current block can involve the following: identifying a reference block in a reference frame based on the selected motion vector, generating a prediction block from the reference block using the selected interpolation filter, which is specified by the identifier of the decoded interpolation filter, and generating a reconstructed block by adding the decoded remainder to the prediction block. The reconstructed block can be included in an output, such as a presentation output.

[0076] The words “example” or “aspect” used herein serve as examples, instances, or illustrations. All aspects or constructions described herein as “examples” or “aspects” are not necessarily to be considered preferred or advantageous over other aspects or designs. Rather, the use of the words “example” or “aspect” is intended to present concepts in a concrete manner. As used in this application, the term “or” is intended to be an integrative “or,” not an exclusive “or.” That is to say, unless otherwise specified or clearly evident from the context, “X contains A or B” is intended to mean any of the natural integrative permutations. That is to say, if X contains A, then X contains B; or if X contains both A and B, then this follows from “X contains A or B.” Furthermore, the indefinite articles used in this application and the attached claims, such as “a,” “an,” etc., areGenerally, the terms "one" and "more" are to be understood as meaning "one or more," unless otherwise specified or unless it is clear from the context that they are singular. Furthermore, the use of the term "design" or "design2" throughout the text does not refer to the same design or design unless explicitly stated. As used herein, the terms "determine" and "identify," and their variants such as select, establish, calculate, look up, receive, determine, establish, obtain, or otherwise in any possible form, involve the use of one or more of the devices depicted in [reference]. Fig. 1 to determine.

[0077] To simplify the explanation, and although the figures and descriptions used here may comprise sequences or a series of steps or stages, the methods disclosed herein may also occur in different orders and / or simultaneously. Additionally, elements of the methods disclosed herein may occur with other elements that are not explicitly shown and described. Furthermore, not all elements of the methods described herein are necessary to implement a method in accordance with the disclosed subject matter.

[0078] The implementations of transmitting station 100A and / or receiving station 100B (and the algorithms, procedures, instructions, etc., stored and / or executed therein) can be implemented in hardware, software, or any combination thereof. The hardware can include, for example, computers, intellectual property (IP) cores, application-specific integrated circuits (ASICs), programmable logic devices, optical processors, programmable logic controllers, microcode, microcontrollers, servers, microprocessors, digital signal processors, or any other suitable circuitry. In the claims, the term "processor2" is to be understood as encompassing all of the aforementioned hardware, either individually or in combination. The terms "signal" and "data" are used interchangeably. Furthermore, parts of transmitting station 100A and receiving station 100B need not necessarily be implemented in the same way.

[0079] Furthermore, in an implementation, for example, transmitting station 100A or receiving station 100B can be implemented using a computer program which, when executed, performs any of the corresponding procedures, algorithms, and / or instructions described herein. Additionally or alternatively, for example, a specialized computer / processor can be used that can execute the specialized hardware described herein to perform one of the procedures, algorithms, or instructions described herein.

[0080] The transmitting station 100A and the receiving station 100B can, for example, be implemented on computers in a real-time video system. Alternatively, the transmitting station 100A can be implemented on a server, and the receiving station 100B can be implemented on a separate device, such as a handheld communication device. In this case, the transmitting station 100A can encode content into an encoded video signal using an encoder 400 and transmit the encoded video signal to the communication device. The communication device can then decode the encoded video signal using a decoder 500. Alternatively, the communication device can decode content stored locally on the communication device, such as content not transmitted by the transmitting station 100A. Other suitable implementation schemes for the transmitting station 100A and the receiving station 100B are also available.For example, the receiving station 100B can generally be a stationary PC instead of a portable communication device, or a device with an encoder 400 can also include a decoder 500.

[0081] Furthermore, all or part of the implementations can take the form of a computer program product, accessible, for example, from a tangible, computer-usable or computer-readable medium. A computer-usable or computer-readable medium can be any device that can, for example, physically contain, store, communicate, or transport the program, and that can be used by or in conjunction with a processor. The medium can be, for example, an electronic, magnetic, optical, or electromagnetic device, or a semiconductor or semiconductor device. Other suitable media are also available.

[0082] The implementations described above are intended to facilitate understanding of the application and are not restrictive. On the contrary, the application covers various modifications and equivalent arrangements within the scope of the attached claims; the scope is interpreted as broadly as possible to encompass all modifications and equivalent structures permitted by law.

Claims

[1] Method comprising: decoding a first block of a current frame from an encoded video stream, wherein decoding the first block comprises: decoding a first motion vector from the encoded video stream; decoding (820) an identifier of a first interpolation filter from the encoded video stream; and reconstructing the first block using the first motion vector and the first interpolation filter; decoding, with a processor, in response to instructions stored on a non-transitory computer-readable medium, a second block of the current frame from the encoded video stream, wherein decoding the second block includes: identifying (840) the first motion vector from the first block as the selected motion vector for prediction of the second block in response to decoding (830) an identifier of an inter-prediction mode from various possible prediction modes for decoding the second block; identifying the first interpolation filter as a selected interpolation filter for predicting the second block in response to identifying the first motion vector from the first block as the selected motion vector for predicting the second block; and reconstructing (850) the second block using the first motion vector and the first interpolation filter; and issuing or storing the first block and the second block; where the different possible prediction modes include: a prediction mode with a new motion vector mode in which a new motion vector for the current block is explicitly signaled in the coded video stream, a prediction mode with a zero motion vector mode where there is no movement, a prediction mode with a next motion vector mode in which a motion vector used for coding a neighboring, previously coded block is identified as the next motion vector and used for predicting the current block, and a near motion vector mode prediction mode in which a motion vector used for encoding a neighboring, previously encrypted block and identified as the near motion vector is used for predicting the current block. [2] The method of claim 1, wherein the first motion vector is a non-zero motion vector. [3] The method of claim 1 or 2, wherein the first interpolation filter is a subpixel interpolation filter. [4] The method of claim 1, 2 or 3, wherein decoding the first block includes: identifying information that associates the first interpolation filter with the first motion vector. [5] The method of claim 4, wherein identifying the first interpolation filter as the selected interpolation filter for predicting the second block includes identifying the first interpolation filter based on the information associating the first interpolation filter with the first motion vector. [6] The method of any one of claims 1 to 5, wherein the encoded video stream omits an indication of a selected motion vector for prediction of the second block and omits an identifier of a selected interpolation filter for prediction of the second block. [7] A method according to any one of claims 1 to 6, wherein decoding of the second block occurs after decoding of the first block. [8] The method of claim 7, wherein the first block in the current frame is in spatial proximity to the second block. [9] A method according to any one of claims 1 to 8, further comprising: decoding a third block of the current frame from the encoded video stream, wherein decoding the third block includes: identifying previously decoded blocks that are spatially proximate to the third block in the current frame, wherein the previously decoded blocks include the second block and omit the first block; identifying the second block from the previously decoded blocks in response to decoding an inter-prediction mode identifier for decoding the third block; identifying the first motion vector from the first block as the selected motion vector for prediction of the third block in response to identifying the second block from the previously decoded block; identifying the first interpolation filter as a selected interpolation filter for predicting the third block in response to identifying the first motion vector from the first block as the selected motion vector for predicting the third block; and reconstructing the third block using the first motion vector and the first interpolation filter; and outputting or storing the third block. [10] Method comprising: generating a first coded block by encoding a first block from a current frame from an input video stream, wherein encoding the first block comprises: identifying (710) a first motion vector for predicting the first block; and identifying (720) a first interpolation filter for the first block; Output of the first coded block by: incorporating the first motion vector into an output bitstream; and Including an identifier of the first interpolation filter in the output bitstream; generating, by a processor, in response to instructions stored on a non-transitory computer-readable medium, a second encoded block from the current frame, wherein encoding the second block comprises: identifying possible motion vectors for the prediction of the second block, wherein the possible motion vectors include: the first motion vector; and a second motion vector for predicting the second block, wherein the second motion vector is different from the first motion vector and wherein the second motion vector is a non-zero motion vector; identifying, from the possible motion vectors, a selected motion vector for the prediction of the second block; Selecting (740) an inter-prediction mode from various possible prediction modes; and in a state where the selected motion vector is the first motion vector: identifying the first interpolation filter as the selected interpolation filter for the prediction of the second block; and omitting the selected motion vector for predicting the second block and an identifier of the selected interpolation filter for predicting the second block from the output bitstream; and transmitting and storing the output bitstream; where the different possible prediction modes include: a prediction mode with a new motion vector mode in which a new motion vector for the current block is explicitly signaled in the coded video stream, a prediction mode with a zero motion vector mode where there is no movement, a prediction mode with a next motion vector mode in which a motion vector that was used for the coding of an adjacent, previously coded block is identified as the next motion vector and used for the prediction of the current block, and a near motion vector prediction mode in which a motion vector used for encoding a neighboring, previously encrypted block and identified as the near motion vector is used for predicting the current blocks. [11] The method of claim 10, wherein the first motion vector is a non-zero motion vector. [12] The method of claim 10 or 11, wherein the first interpolation filter is a subpixel interpolation filter. [13] The method of claim 10, 11 or 12, wherein including the identifier of the first interpolation filter in the output bitstream includes including the identifier of the first interpolation filter in the output bitstream such that the first motion vector corresponds to the first interpolation filter. [14] The method of any of claims 10 to 13, wherein identifying the first interpolation filter as the selected interpolation filter for predicting the second block includes identifying the first interpolation filter based on the information associating the first interpolation filter with the first motion vector. [15] A method according to any one of claims 10 to 14, wherein the encoding of the second block occurs after the encoding of the first block. [16] A method according to any one of claims 10 to 15, further comprising: generating a third coded block by encoding a third block from the current frame, the third block including: identifying previously encoded blocks that are spatially proximate to the third block in the current frame, wherein the previously decoded blocks proximate to the third block include the second block and omit the first block; identifying possible motion vectors for predicting the third block based on the previously encoded blocks, wherein the possible motion vectors include the first motion vector; identifying, from the possible motion vectors and for predicting the third block, a selected motion vector for predicting the third block; under the condition that the selected motion vector for the prediction of the third block is the first motion vector: identifying the first interpolation filter as the selected interpolation filter for the prediction of the third block; and omitting the selected motion vector for the prediction of the third block and an identifier of the selected interpolation filter for the prediction of the third block from the output bitstream; and sending or storing the output bitstream.

Citation Information

Patent Citations

  • Image encoding / decoding apparatus and method

    US20150055705A1