METHOD FOR STORING INTERPOLATION DATA
A method for storing interpolation data is provided, which includes the following steps: dividing a buffer into a plurality of regions, and using the regions to store the interpolation data of a plurality of non-integer points. The decimal part of each logical coordinate for each of the non-integer points is identical to that of the corresponding logical coordinate for another of the non-integer points in the same region.
Latest INDUSTRIAL TECHNOLOGY RESEARCH INSTITUTE Patents:
- Cell and tissue sheet forming package and cell injection equipment
- Data feature augmentation system and method for low-precision neural network
- Inspection method and inspection platform for lithography
- ALL-OXIDE TRANSISTOR STRUCTURE, METHOD FOR FABRICATING THE SAME AND DISPLAY PANEL COMPRISING THE STRUCTURE
- CONTINUOUS LASER PROCESSING SYSTEM AND PROCESSING METHOD
This application is a divisional application of U.S. application Ser. No. 11/562,419, filed on Nov. 22, 2006, now pending. The prior application Ser. No. 11/562,419 claims the priority benefit of Taiwan application serial no. 95134555, filed on Sep. 19, 2006. The entirety of each of the above-mentioned patent applications is hereby incorporated by reference herein and made a part of this specification.
TECHNICAL FIELDThe disclosure relates to a method for storing interpolation data in a video encoding and decoding system.
BACKGROUNDIn the current video encoding and decoding system, the motion estimation has precisions of ½, ¼, ⅛ points, wherein these non-integer points do not exist in an external memory and are obtained through the calculation of integer points in the external memory. Therefore, in the video encoding and decoding system, interpolation is adopted no matter for motion estimation or motion compensation, as long as the motion vector of non-integer points is concerned.
For example, referring to
In view of the above, in video encoding and decoding systems, it is desirable to reduce the amount of operation for calculating the interpolation points and the memory space required for storing the interpolation points. It is also desirable to reduce the frequency of reading integer points data from the external memory.
SUMMARYThe disclosure is directed to providing a method for storing interpolation data, which employs a storage manner that can effectively utilize the memory space to avoid wasting of buffer space.
The disclosure provides a method for storing interpolation data. The method includes the following steps. Divide a buffer into a plurality of regions, and use the regions to store the interpolation data of a plurality of non-integer points, wherein the decimal part of each logical coordinate for each of the non-integer points is identical to that of the corresponding logical coordinate for another of the non-integer points in the same region.
The disclosure further provides another method for storing interpolation data. The method includes the following steps. Divide a buffer into a plurality of regions. Use the regions to store the interpolation data of a plurality of non-integer points, wherein the decimal part of each logical coordinate for each of the non-integer points is identical to that of each logical coordinate for another of the non-integer points in the same region. If the interpolation data of a specific non-integer point is stored in the buffer, provide the interpolation data directly. If the interpolation data of the specific non-integer point is not stored in the buffer, read the data of a plurality of integer points adjacent to the specific non-integer point from a memory, calculate the interpolation data based on the data of the integer points, and store the interpolation data into the buffer.
In order to make the aforementioned and other features of the disclosure comprehensible, several exemplary embodiments accompanied with figures are described in detail below.
The accompanying drawings are included to provide a further understanding of the disclosure, and are incorporated in and constitute a part of this specification. The drawings illustrate embodiments of the disclosure and, together with the description, serve to explain the principles of the disclosure.
In the following embodiment, a video encoder or video decoder is used for example. The video encoder or video decoder of this embodiment adopts an external memory to store the pixel data of integer points of the reference frame, and employs a built-in cache memory as a buffer to store the previously calculated pixel values of the non-integer points.
To reduce the amount of system operation and the access frequency of the external memory, a cache memory of large capacity can be used to store the previously calculated interpolation data. However, an over-sized cache memory may cause problems in the circuit area and price. Therefore, a buffer of a relatively smaller size, for example, 32×32 pixels, is employed in this embodiment, and the concept of memory address rotation (the details thereof will be illustrated later) is also adopted, such that the amount of system operation and the access frequency of the external memory can be effectively decreased without using a cache memory of excessively large capacity. In this embodiment, every time the interpolation data of a non-integer point is required, whether the required interpolation data of a non-integer point is stored in the buffer is first determined, if yes, the data is fetched directly without repeated interpolation; while if not, the data of integer points adjacent to the above non-integer point is read from an external memory for calculating the required interpolation data, and the calculated interpolation data is stored into the buffer for repeated use.
The size of the buffer in this embodiment is not limited to 32×32 pixels. Actually, in this embodiment, the size distribution of the MVD of at least one video bitstream is first counted, and the size of the buffer is determined according to the size distribution. The so-called size of the MVD is defined as the maximum value among the coordinate components of the MVD. For example, a certain MVD is (a, b), wherein if a is larger than b, then the size of the MVD is a, otherwise b.
In this embodiment, three video bitstreams, namely News, Silent and Football, respectively representing video images of low frequency, intermediate frequency and high frequency are analyzed. The video bitstream News is mainly news broadcast, wherein the image movement variation is small. The video bitstream Silent is mainly gesture language, wherein the image movement is concentrated in some areas and the movement variation is higher than News. The video bitstream Football is the scene of playing American football, wherein the movement variation of the players and the football is significant. The above three video bitstreams are all of the CIF specification, and the analysis results are shown in Table 1 as follows.
In Table 1, most of the MVDs are smaller than 32 pixels, so the size of the buffer in this embodiment is set to be 32×32 pixels. To integrally process high frequency videos, a buffer of 64×64 pixels is employed; while to integrally process low frequency videos, a buffer of 16×16 pixels is enough. To sum up, the size of the buffer can be adjusted depending on the size distribution of the MVDs. For example, the minimum side length of the buffer may be set to be larger than each of the sizes of a predetermined proportion of all the MVDs of the video bitstreams.
The buffer of this embodiment is a two dimensional array corresponding to a region of the same size in the reference frame. As the size of the buffer is limited, it is unavoidable that some macroblocks of non-integer points exceed the boundary of the buffer. Referring to
In
The access of the interpolation data in the buffer depends on its real coordinates which are different from the logical coordinates in the reference frame. Whenever the starting point of the buffer is moved, the logical coordinates and real coordinates of the starting point are moved synchronously, such that the interpolation data stored in the buffer does not have to be moved along with the starting point. The method for calculating the real coordinates of a non-integer point is that, for each logical coordinate of the non-integer point, the result of the logic coordinate minus the corresponding logical coordinate of the starting point plus the corresponding real coordinate of the starting point is calculated, and the result is taken as the real coordinate corresponding to the logic coordinate of the non-integer point. Each of the above logical coordinates refers to various sub-coordinates in different coordinate axes, and the corresponding relation between the above sub-coordinates is about the same coordinate axis. For example, in the example of
After the position of the starting point is moved, the real coordinates of the non-integer point may still exceed the boundary of the buffer. For example, in
Referring to
In
The experimental results of this embodiment are described below. The experimental environment of this embodiment is H.264 decoder, wherein the CIF video bitstreams News, Silent and Football, are tested respectively, the reference code JM8.2 of the International Standards Organization (ISO) is compared with the method of this embodiment, and the amount of multiply operation (the frequency of multiply operation) required for calculating the pixel values at ½ points and the capacity of the memory in each frame are evaluated. The experimental results are shown in Tables 2, 3 and 4. Seen from the following tables, compared with the conventional JM8.2, this embodiment can surely reduce the amount of multiply operation and the access frequency of the memory.
In view of the above, this embodiment uses a relatively small buffer to store the previously calculated interpolation data, such that the amount of operation for the interpolation points and the frequency of reading the data of integer points from an external memory are reduced, and thus a moderately-sized cache memory is enough. This embodiment also adopts a storage method of distributing the data of non-integer points into divided regions, so as to maintain a simple addressing operation and avoid wasting the buffer space. The disclosure is not limited to the video encoding and decoding system, but applicable to any calculation system that has to perform interpolation repeatedly. The data of integer points required for calculating interpolation points is not limited to be acquired from a reference frame, but can also be acquired from any two dimensional data arrays. As for the above calculation system, the data of the integer points can not only be stored in an external memory, but also in a common built-in memory.
It will be apparent to those skilled in the art that various modifications and variations can be made to the structure of the disclosure without departing from the scope or spirit of the disclosure. In view of the foregoing, it is intended that the disclosure cover modifications and variations of this disclosure provided they fall within the scope of the following claims and their equivalents.
Claims
1. A method for storing interpolation data, comprising:
- dividing a buffer into a plurality of regions; and
- using the regions to store the interpolation data of a plurality of non-integer points;
- wherein, the decimal part of each logical coordinate for each of the non-integer points is identical to that of the corresponding logical coordinate for another of the non-integer points in the same region.
2. The method for storing interpolation data as claimed in claim 1, wherein the collection of the decimal parts of each logical coordinate for each of the non-integer points is different from that of the decimal parts of each logical coordinate for another of the non-integer points in a different region.
3. The method for storing interpolation data as claimed in claim 1, wherein the method for storing interpolation data is applied to video encoding or video decoding.
4. The method for storing interpolation data as claimed in claim 3, further comprising:
- counting the size distribution of MVDs of at least one video bitstream; and
- determining the size of the buffer according to the size distribution.
5. A method for storing interpolation data, comprising:
- dividing a buffer into a plurality of regions;
- using the regions to store the interpolation data of a plurality of non-integer points, wherein the decimal part of each logical coordinate for each of the non-integer points is identical to that of each logical coordinate for another of the non-integer points in the same region;
- if the interpolation data of a specific non-integer point is stored in the buffer, providing the interpolation data directly; and
- if the interpolation data of the specific non-integer point is not stored in the buffer, reading the data of a plurality of integer points adjacent to the specific non-integer point from a memory, calculating the interpolation data based on the data of the integer points, and storing the interpolation data into the buffer.
6. The method for storing interpolation data as claimed in claim 5, wherein the collection of the decimal parts of each logical coordinate for each of the non-integer points is different from that of the decimal parts of each logical coordinate for another of the non-integer points in a different region.
7. The method for storing interpolation data as claimed in claim 5, further comprising:
- if the specific non-integer point exceeds the boundary of the buffer, adjusting the logical coordinates of the starting point of the buffer, so as to make the specific non-integer point fall within the boundary of the buffer.
8. The method for storing interpolation data as claimed in claim 7, further comprising:
- for each logical coordinate of the specific non-integer point, calculating the result of the logical coordinate minus the corresponding logical coordinate of the starting point plus the corresponding real coordinate of the starting point, wherein the result is taken as the real coordinate corresponding to the logical coordinate of the specific non-integer point;
- if the real coordinate of the specific non-integer point is smaller than the corresponding lower limit of the buffer, adding the corresponding side length of the buffer to the real coordinate;
- if the real coordinate of the specific non-integer point is larger than the corresponding upper limit of the buffer, subtracting the corresponding side length of the buffer from the real coordinate; and
- accessing the buffer with the real coordinates of the specific non-integer point.
9. The method for storing interpolation data as claimed in claim 5, wherein the method for storing interpolation data is implemented by a calculation system, the buffer is stored in a cache memory of the calculation system, and the memory storing the data of the integer points is an external memory of the calculation system.
10. The method for storing interpolation data as claimed in claim 9, wherein the calculation system is a video encoder or video decoder, and the method for storing the interpolation data further comprises:
- counting the size distribution of MVDs of at least one video bitstream; and
- determining the size of the buffer according to the size distribution.
Type: Application
Filed: Jan 22, 2013
Publication Date: May 23, 2013
Applicant: INDUSTRIAL TECHNOLOGY RESEARCH INSTITUTE (Hsinchu)
Inventor: Industrial Technology Research Institute (Hsinchu)
Application Number: 13/747,445