The present invention generally relates to video encode and decode devices and processes, and more particularly relates to video encode and decode devices and processing of computing graphics which are relatively static in nature, and reducing processing, bandwidth, memory and power requirements in such devices and processing.
In the process for communicating digitized video over a network from one point/node to another point/node, the video is encoded at the sender side device, communicated over the network from the sender side device to the recipient side device, and then decoded at the recipient side device. This encoding/decoding reduces the quantity of data that must be communicated to deliver the video from the sender to the recipient, and therefore reduces the amount of bandwidth of the network required for the communication. Typically, video is encoded/decoded according to a specified technical standard, such as MPEG1, MPEG2, H.263, VC-1 and H.264.
These encode/decode standards are somewhat similar in process and device requirements. In particular per each standard, digitized video is stored as a series of “frames” in multiple “frame buffers” in memory, and each frame buffer for each frame is segregated into a plurality of smaller “macroblock” segments. Encoding and decoding operations each include processing the frames in sequence, via respective sequential processing of the frames via frame buffers for each frame on a macroblock by macroblock basis for each frame. For video comprising at least some fairly same or static data from time-to-time among respective macroblocks (i.e., either of same or other frames), much of the processing required for encoding and decoding is primarily mere copying of data contents. In particular, data of each static macroblock of a frame buffer memory location must be copied into another frame buffer memory location, and this process repeated for every static macroblock of each frame buffer. Both the encoder of the encode side device and the decoder of the decode side device must typically perform these copy and similar operations for each static macroblock, and for all static macroblocks of each frame buffer and frame of the series for the entire video. Thus, these copy operations consume processing time and capacity.
It would therefore be desirable, and a significant improvement in the art and technology, to provide more efficient encode and decode devices and processes, particularly for fairly same or static data (e.g., representing video, graphics, and similar and other information sets and files) and other instances.
Embodiments of the invention include devices and methods for encoding or decoding a file, such as a video, graphic, media, or other file communicated over a network or otherwise, with reduced processing, memory, bandwidth and power requirements. In the embodiments, the devices and methods either encode/decode each next successive macroblock of a frame of the file or, if that macroblock matches any macroblock that has already been encoded/decoded (as applicable) of a prior frame and which is then-retained in a reference frame buffer, create and store a pointer in a virtual frame table buffer that points to the previously encoded/macroblock already in the reference frame buffer, rather than encode/decode the macroblock for encoding and/or decoding operations.
An embodiment of the invention is a device for encoding or decoding a file. The file includes frames and each frame comprises macroblocks. The device includes memory, a processor communicatively connected to the memory, an encoder communicatively connected to and controlled by the processor, a plurality of reference frame buffers created in the memory by the encoder, where each reference frame buffer is distinct from any other reference frame buffers in the memory, virtual frame buffer tables, equal in number to number of the reference frame buffers in the memory, created in the memory by the encoder/decoder, each virtual frame buffer table, respectively, corresponds to one reference frame buffer, sectors of each reference frame buffer, each sector is capable of storing one of the macroblocks of one frame of the file, and a respective pointer created by the encoder/decoder if any macroblock for encoding/decoding (of any frame) matches any macroblock of another frame previously encoded/decoded and the encoded/decoded macroblock is then-retained in one of the reference frame buffers. The encoder either encodes each next macroblock of a frame or, if that next macroblock matches any macroblock that was previously encoded and if the encoded macroblock is then-retained in any of reference frame buffers, the encoder instead creates the respective pointer and stores the respective pointer in the virtual frame buffer table corresponding to the frame of that next macroblock.
Another embodiment of the invention is a system according to the foregoing encoder or decoder, wherein at least certain of the encoder is the decoder, and vice versa, and the system further includes a communication network, a first device connected to the communication network, the first node includes at least portions of the encoder, and a second device connected to the communication network, the second node includes at least portions of the decoder. The encoded file is communicated by the first node to the second node over the network for decoding.
Another embodiment of the invention is a system including the encoder and decoder just described above, and also including a communication link between the encoder and the decoder.
Yet another embodiment of the invention is a system including the encoder and decoder described above, where at least certain of the encoder is the decoder, and vice versa.
Another embodiment of the invention is a method of encoding a file. The file comprises frames and each frame comprises macroblocks for encoding. The method includes creating in a memory a plurality of reference frame buffers, wherein each reference frame buffer is distinct from any other of the plurality of reference frame buffers in the memory, each reference frame buffer capable of containing one of the frame, creating in the memory a plurality of virtual frame buffer tables, equal in number to number of the reference frame buffers in the memory, each virtual frame buffer table, respectively, corresponds distinctly to one of the reference frame buffer, respectively, creating a plurality of respective sectors of each reference frame buffer, respectively, each respective sector sufficient for storage of one of the macroblocks corresponding to part of one of the frame of the file, encoding one of the frames of the file, by successively encoding each respective one of the macroblocks of the one of the frame, unless any already encoded macroblock (if any) then-retained in any of the respective sectors of any of the reference frame buffers would be the same as the encoded macroblock, once encoded in the step of encoding, storing respective ones of the encoded macroblocks, each respectively corresponding to respective ones of the macroblocks of the one of the frame of the file from the step of encoding, in respective ones of the plurality of respective sectors, except not storing one of the encoded macroblocks if any already encoded macroblock (if any) then-retained in any of the respective sectors of any of the reference frame buffers would be the same as the encoded macroblock, once encoded in the step of encoding, creating a respective pointer in the virtual frame buffer table associated with the reference frame buffer then available for the step of encoding, for each macroblock (if any) of the frame then-currently for the step of encoding, if any macroblock of one of the frame previously encoded matches the macroblock of the step of creating a respective pointer and if the encoded macroblock of the frame previously encoded is then-retained in any of the reference buffer tables, storing the respective pointer from the step of creating the respective pointer (if performed), in the virtual frame buffer table associated with the reference frame buffer for the step of encoding, and returning to the step of encoding, but rather than encoding the macroblock in the step of encoding, relying on the respective pointer for encoding in order to reference the encoded macroblock. The encoder during encoding either encodes each next one of the macroblock of the frame or, if any macroblock of another one of the frames previously encoded is then-retained in any of the plurality of reference frame buffers, creates the respective pointer and stores the respective pointer in the virtual frame buffer table corresponding to the frame then being encoded.
Another embodiment of the invention is a method of decoding an encoded file. The encoded file comprises encoded frames and each encoded frame comprises encoded macroblocks for decoding and the file, when decoded, comprises frames and each frame comprises macroblocks. The method includes creating in a memory a plurality of reference frame buffers, wherein each reference frame buffer is distinct from any other of the plurality of reference frame buffers in the memory, each reference frame buffer capable of containing one of the encoded frame, creating in the memory a plurality of virtual frame buffer tables, equal in number to number of the reference frame buffers in the memory, each virtual frame buffer table, respectively, corresponds distinctly to one of the reference frame buffer, respectively, creating a plurality of respective sectors of each reference frame buffer, respectively, each respective sector sufficient for storage of one of the macroblocks corresponding to part of one of the frame of the file, decoding one of the encoded frames of the encoded file, by successively decoding each respective one of the encoded macroblocks of the one of the encoded frame, unless the encoded macroblock, once decoded, would match any macroblock previously decoded and then-retained in any of the respective sectors of any of the reference frame buffers, storing respective ones of the macroblocks, each respectively corresponding to respective ones of the macroblocks of the one of the frame of the file from the step of decoding, in respective ones of the plurality of respective sectors, except not storing one of the macroblocks if the macroblock, once decoded, would match any macroblock previously decoded and then-retained in any of the respective sectors of any of the reference frame buffers, creating a respective pointer in the virtual frame buffer table associated with the reference frame buffer then available for the step of decoding, for each encoded macroblock (if any) of the encoded frame then-currently for the step of decoding if the encoded macroblock, once decoded, would match any macroblock previously decoded and retained in any of the reference buffer tables, storing the respective pointer from the step of creating the respective pointer (if performed), in the virtual frame buffer table associated with the reference frame buffer for the step of decoding, and returning to the step of decoding, but rather than decoding the encoded macroblock in the step of decoding, relying on the respective pointer for decoding in order to reference the macroblock. The decoder during decoding either decodes each next encoded macroblock of the encoded frame or, if any encoded macroblock of another encoded frame previously decoded is then-retained in any of the plurality of reference frame buffers, instead creates the respective pointer and stores the respective pointer in the virtual frame buffer table corresponding to the encoded frame then being decoded.
Another embodiment of the invention is an encode device operating in accordance with the foregoing method of encoding a file.
Yet another embodiment of the invention is a decode device operating in accordance with the foregoing method of decoding an encoded file.
Another embodiment of the invention is an encoder/decoder device for processing a single reference frame. The encoder/decoder device includes a virtual frame buffer table of a single bit array in a memory and a processor connected to the virtual frame buffer table for writing the single reference frame to the single bit array.
The present invention is illustrated by way of example and not limitation in the accompanying figures, in which like references indicate similar elements, and in which:
Referring to
An example of each video frame of the video is a respective 48 by 48 pixel graphic. When encoding video, the video encoder 103 processingly encodes the video converting it from the input format to another format, for example, for purpose of standardization, speed, security and/or compression as will be understood, to create an encoded video file 104. The video encoder 103 also creates and stores reference frame(s) of the encoded video file 104 in one or more reference frame buffers 100 in memory, for example, Reference Frame Buffers 100a, 100b, 100c, in process of encoding. Other numbers of reference frame buffers 100 are possible for encoding operations, and the reference frame buffers 100 are intended only as examples for purposes of discussion. To encode the video, the video encoder 103 processes each frame of the video file 102, typically, in succession, progressing through each frame in respective blocks of data representing pluralities of distinct sub-portions of each frame of the video. These blocks of data are referred to, for purposes herein, as macroblocks, and each as a macroblock. Therefore, as the video encoder 103 processes and stores the processed frames of the video in the reference frame buffers 100, the processed frames are stored, macroblock by macroblock of each frame, by the encoder 103 in storage memory (not shown in detail in
An example macroblock size is 16×16 pixels and, for this example, a 48×48 pixel graphic would represent 3 (48/16)×3 (48/16) or 9 total macroblocks (e.g., Reference Frame Buffer 100a is, for purposes of the example, segregated into nine macroblocks, of which macroblock 101 is one). Each macroblock occupies a specific block of memory for the applicable Reference Frame Buffer 100a, 100b or 100c. In the case of macroblock 101 and example of 16×16 pixels, the macroblock 101 (when represented in a typical video format) requires 384 bytes of memory in each of the Reference Frame Buffers 100a, 100b, 100c. The total memory for each Reference Frame Buffer 100a, 100b, 100c, therefore, is 384 bytes×9 for a total size of 3456 bytes of memory.
The video encoder 103 processes the video creating Reference Frame Buffers 100a, 100b, 100b and using these to encode the video, creating as output the encoded video file 104. The encoded video 104 output by the encoder 103 is stored (not shown in detail in
Referring now to
The video encoder 510, in operation with the memory 503, processingly encodes a digitized video file representing a playable video. A source of the digitized video file is, for example, a frame buffer of a graphics card or video camera or of a memory or storage media, the contents of which are output to the video encoder 510. When encoding the video, the video encoder 510 processingly creates in the memory 503 a plurality of reference frame buffers (hereafter referred to for convenience as “physical frame buffers” or (PFBs) to distinguish from the Reference Frame Buffers of
The video encoder 510 then processingly encodes a first frame of the video file, by encoding, on a macroblock by macroblock basis, respective macroblocks of the first frame, creating respective encoded macroblocks (not shown in detail in
The video encoder 510 continues processingly encoding each next frame of the digitized file in succession or, if any macroblock(s) of the frame is duplicate of any previously encoded macroblock then retained in any of the PFBs 512a, 512b, 512c, skipping encoding and storing of the macroblock and instead creating the respective pointer element for the previously encoded macroblock (and PFB sector and PFB thereof) and storing it in the VFBT for the particular frame. As encoding of each respective video frame is performed by the video encoder 510, the video encoder 510 can store and/or communicate the encoded video frame from the video encoder 510, or otherwise deliver or make available the frame from the encode device 502, for decoding by the decode device 504. Alternately, if desired in the embodiment, the video encoder 510 completes encoding of the video file in in entirety (or in portion, if applicable in the embodiment, for example, where portions are reconstituted as the whole or otherwise at a decoder), and then communicates or stores the video, as applicable.
According to certain embodiments, the encoded video file from the video encoder 510 is communicated from the encode device 502 to the decode device 504, via the communications network 506. The decode device 504, in operation with the memory 517, processingly decodes the encoded video file created by the video encoder 510. In decoding, the video decoder 516 of the decode device 504 processingly creates in the memory 517 a plurality of reference frame buffers, i.e., PFBs, distinct from those of the encode device 502. The video decoder 516 also processingly creates in the memory 517 a plurality of respective virtual frame buffer tables, i.e., VFBTs, distinct from those of the encode device 502. As an example,
Continuing in operation, the video decoder 516 processingly decodes a first frame of the encoded video file, by decoding, on a macroblock by macroblock basis, respective macroblocks of the first frame via one of the PFBs and its VFBT, creating respective decoded macroblocks (not shown in detail in
The video decoder 516 continues processingly encoding each next frame of the encoded video file in succession (e.g., overwriting respective PFBs for frames after the third frame and storing or dispensing decoded frames of PFBs and VFBTs in storage memory or otherwise prior to overwriting) or, if any encoded macroblock(s) in the particular frame are same as then-retained in any of the PFBs from a prior frame which has already been decoded, skipping decoding of the macroblock for the particular frame and, instead, creating the respective pointer element for the previously decoded macroblock (and PFB sector and PFB thereof) and storing the pointer element in the VFBT for the particular frame. As the video decoder 516 completes decoding of each frame of the encoded video file, the video decoder 516 communicates the decoded frame as output of the video decoder 516. For example, each frame, once decoded, is communicated by the video decoder 516 as a stream to a media player, graphics card and/or other computer or processor device (hardware, software or combination) for display or other output on a monitor, screen, display or other output device, or is otherwise processed or stored in tangible media, such as harddrive, memory or the like (not shown in detail in
Referring to
Each PFB 200, 201, 202 contains nine macroblocks, for example purposes as previously discussed. Therefore each VFBT 203, 204, 205 can include nine entry elements in memory. Each entry element of each VFBT 203, 204, 205 points to one of the PFBs 200, 201, 202. For example, entry element 207 of VFBT 205 contains a 1 which represents PFB 201. Entry element 207 is in the seventh location in the VFBT 205 and therefore corresponds to the macroblock 208 of the seventh location of the PFB 201. The video encoder/decoder 206, by reference to a particular one of the entry elements of one of the VFBTs 203, 204 or 205, is thus directed to read contents of a particular macroblock of particular one of the PFB 200, 201, 202.
In operation, all entry elements of each of the VFBT's 203, 204, 205 are initially set to a special value of “none”. When a first frame (i.e., of a video graphic) is received for processing, one of the PFB 200, 201, or 202 and one of the VFBTs 203, 204, 205 is required by the encoder/decoder 206. The VFBT 203 and the PFB 200 are used: respective sets of bytes of the first frame are processed and a written to respective macroblocks of the PFB 200, and each entry element of the VFBT 203 is set to 0. This indicates for the encoder/decoder 206 that the all of the macroblocks for the VFBT 203 are contained in the PFB 200.
When a second frame buffer (i.e., a video graphic comprising a next (second) frame) is received, the encoder/decoder employs the VFBT 204 and the PFB 201. As macroblocks are written to the PFB 201, a 1 is written to the corresponding entry element of the VFBT 204, representing that the macroblock is stored in the PFB 201. When the video encoder/decoder 206 receives an indication that a macroblock matches the already stored macroblock in PFB 200 a 0 is written to the VFBT 204 by the encoder/decoder 206. The 0 entry of the VFBT 204 therefore indicates that the particular macroblock is contained in the PFB 200, and no macroblock was written in PFB 201. Thus, if there is match for a macroblock of the second frame, no entry other than the 0 in VFBT 204 is necessary. Less processing is therefore required.
For a next (third) frame, the PFB 202 and the VFBT 205 similarly operate and VFBT 205 is written with either: a 2 where the macroblock is new (i.e., not then-retained in a PFB as previously encoded/decoded) and will be written into the PFB 202, a 1 where the macroblock is already in the PFB 201, or a 0 where the macroblock is already contained in the PFB 200. PFB 202 is written with the macroblock only if contents are new (i.e., not already written in PFB because of another macroblock encode/decode operation) and therefore not contained in either PFB 200 or PFB 201.
After three frame buffer requests (i.e., three frames received), the process continues. The encoder/decoder 206 uses VFBT 0 203 again, now for the next frame. Referring to
Next in the example, for a second macroblock, entry element 1 in the VFBT 203 contains a 1; the VFBT 204, entry element 1, also contains a 1; and the VFBT 205, entry element 1, contains a 0. Because the PFB 202 is not referred to by any other VFBT, the encoder/decoder 206 uses the PFB 202 for storage of the second macroblock. The macroblock is written by the encoder/decoder 206 to the PFB 202, and a 2 is written into the VFBT 203, entry element 1, corresponding to the PFB 202.
Continuing for a third macroblock of the relevant frame, entry element 2 in the VFBT 203 is 2 (i.e., for PFB 202), VFBT 204 is 1 (i.e., for PFB 201), and VFBT 205 is 0 (i.e., for PFB 200). Since the VFBT 203 refers to the PFB 202 and the VFBT 204 and VFBT 205 do not, the PFB 202 is used by the encoder/decoder 206. The bytes of the macroblock are written by the encoder/decoder 206 to the PFB 202 and a 2 is written into the VFBT 203, entry element 2.
This process is repeated for the entire frame and the entire video, on a frame by frame basis. A destination device of the digitized video file from the video decoder 510 is, for example, a display for visually depicting the video in real-time or a memory or storage media.
Therefore in processing non-changing macroblocks (i.e., the macroblock has already been stored in a PFB), only a VFBT entry must be updated. For processing macroblocks that have changed, therefore, at most three VFBT entries must be read to determine which PBF to use. In comparison, without such embodiments, copying of an entire macroblock from one PFB to another PFB would be necessary. Thus the embodiments limit processing that would otherwise be required.
Referring to
In the step 300, all VFBT entries are set to a not used (NU) value. For each successive frame, a VFBT is selected 301 in order of precedence, for example, 0, 1, 2, 0, 1, 2, etc. In a step 302, an encoder or decoder receives an indication that a marcoblock has changed and has new contents or has not changed and matches a prior macroblock contained in one of the VBTs. If a match is indicated, an entry element of the PFB that already contains the new macroblock is written to an applicable VFTB in a step 308. The method 30 then continues to a step 307. If no match was indicated in the step 302, then determination is made by searching each of the VFBTs in a step 303 whether any of the PFBs are unused. If the step 303 determines there is an unused PFB, then a number identifier of the unused PFB is written to the VFBT in a step 304. If the step 303 determines that there are no unused PFBs, then a specified one of the PFBs referenced by the current VFBT is reused, in a step 305. The particular PFB reused in the step 305 is any PFB which is then unused by all other VFBTs. In a step 306, following the step 304 or the step 305, as applicable, the new macroblock is written to the PFB selected in the step 304 or 305, respectively. In a step 307 determination is made whether any more macroblock(s) exist in the current frame. If any more macroblock(s) is present, the method 30 returns to the step 302; otherwise, if no more macroblock(s) in this frame, the method 30 returns to the step 301.
Variations to the foregoing embodiments include encoders/decoders that employ a single reference frame buffer or different multiples (other than three as described above) of reference frame buffers and VFBTs.
Referring to
Operation is the similar to that described with respect to
In the foregoing specification, the invention has been described with reference to specific embodiments. However, one of ordinary skill in the art appreciates that various modifications and changes can be made without departing from the scope of the present invention as set forth in the claims below. Accordingly, the specification and figures are to be regarded in an illustrative rather than a restrictive sense, and all such modifications are intended to be included within the scope of the present invention.
Benefits, other advantages, and solutions to problems have been described above with regard to specific embodiments. However, the benefits, advantages, solutions to problems and device(s), connection(s) and element(s) that may cause any benefit, advantage, or solution to occur or become more pronounced are not to be construed as a critical, required, or essential feature or element of any or all the claims. As used herein, the terms “comprises, “comprising,” or any other variation thereof, are intended to cover a non-exclusive inclusion, such that a process, method, article, or apparatus that comprises a list of elements does not include only those elements but may include other elements not expressly listed or inherent to such process, method, article, or apparatus.
The present application is a continuation and has benefit of priority of U.S. patent application Ser. No. 13/176,843, titled “Virtual Frame Buffer Systems and Methods, filed Jul. 6, 2011 (which has benefit of priority U.S. Provisional Patent Application No. 61/361,969, titled “Virtual Frame Buffer Systems and Methods”, filed Jul. 7, 2010), which prior application is co-pending and has at least one same inventor of the present application and is herein incorporated by this reference.
Number | Date | Country | |
---|---|---|---|
61361969 | Jul 2010 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 13176843 | Jul 2011 | US |
Child | 14331358 | US |