Patent Publication Number: US-6222562-B1

Title: Fast processed screen image

Description:
FIELD OF THE INVENTION 
     Briefly, the present invention is directed to the field of screen image processing, and more particularly, to the field of screen image processing optimized for fast execution. 
     BACKGROUND OF THE INVENTION 
     There is currently no suitable system available for providing fast image processing to allow the immediate display of a predetermined image while a computer user is waiting for the completion of execution of-a computer operation. By way of example, but not by way of limitation, a saved-to-non-volatile-memory command will require a significant amount of time to complete its required function, while the user waits in front of the screen. This execution period for the computer presents an opportunity to display predetermined images such as, for example, advertising, or other desired images to the user. However, typical images, such as screen saver images, which are displayed on the computer, are not optimized for fast execution and are not programmed to be displayed during the period when the computer is executing a program routine. Thus, current systems are not designed to take advantage of this opportunity for displaying predetermined images to the user. 
     SUMMARY OF THE INVENTION 
     Briefly, the present invention comprises, in one embodiment, a display process for displaying predetermined image data in a computer that includes a processor and a video system having a video memory, with the video system having at least one video mode, with each video mode designating a portion of the video memory as a visible portion and another portion as a non-visible portion, comprising the steps of: after a save-in-non-volatile-memory command, selecting a video mode with at least a predetermined amount of video memory in the non-visible portion; writing contents from a block of a fast memory to the non-visible portion of the video memory, the fast memory having an access time that is less than an access time for the video memory; writing the predetermined image data into the block in the fast memory; processing the predetermined image data from the fast memory; and writing the processed predetermined image data to the video memory. 
     In a further aspect of the present inventive process, the fast memory comprises a main memory for the computer. 
     In a yet further aspect of the present inventive process, the selecting step comprises the step of selecting a video mode with substantially the same resolution as a display screen for the computer. 
     In a yet further aspect of this process, the selecting step further comprises the step of selecting a video mode with at least a 15 bit color depth. 
     In yet another aspect of the present invention, the selecting step further comprises the step of choosing a video mode that is compatible with the predetermined image data. 
     In a yet further aspect of the present invention, the block of fast memory is divided into at least a first buffer memory and a second buffer memory; wherein the writing in the fast memory step comprises the step of writing data from the predetermined image data alternately into the buffer memories; and wherein the processing step comprises the step of processing in parallel with the buffer writing step the predetermined image data from one of the buffer memories that is not being written to. 
     In a yet further aspect of the present invention, a display process is disclosed for displaying predetermined image data in a computer that includes a processor, a fast memory, and a video system having a video memory, comprising the steps of: during a computer execution period, writing contents from a block of the fast memory to a first memory, the fast memory having an access time which is less than an access time for the video memory; writing the predetermined image data into the block in the fast memory; processing the predetermined image data from the fast memory; and writing the processed predetermined image data to the video memory. 
     In a further aspect of this process, a step is provided of selecting a video mode for the video system which has predetermined characteristics. This step of selecting a video mode may comprise, in one embodiment, the step of selecting a video mode with at least a predetermined amount of the video memory having a non-visible portion; and wherein the step of writing contents from the block of fast memory comprises the step of writing to the non-visible portion of the video memory. 
     In a yet further aspect of the present invention, an article of manufacture is provided comprising: a computer usable medium having computer readable program code means embodied therein for causing a computer with a video system to display predetermined image data during a computer execution period, the computer readable code means in the article of manufacture comprising: first computer readable program code means for causing a computer, during a computer execution period, to write contents from a block of a fast memory to a first memory, wherein the fast memory has an access time that is less than an access time for a video memory in the video system in the computer; second computer readable program code means for causing a computer to write the predetermined image data into the block of the fast memory; third computer readable program code means for causing the computer to process the predetermined image data from the fast memory; and fourth computer readable program code means for causing the computer to write the processed predetermined image data to the video memory. 
     In a further aspect of this article of manufacture, the video memory is divided into a visible portion and a non-visible portion, and wherein the first computer readable program code means includes code for writing the contents from the block of the fast memory to the non-visible portion of the video memory. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     FIGS. 1A,  1 B and  1 C is a flowchart of a preferred embodiment of the present invention. 
    
    
     DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENT 
     The present invention is designed to provide fast image processing to display a predetermined image quickly on a display during a period in which a computer is executing a program routine, i.e., a computer execution period. By way of example, during a save-to-disk command, the screen is typically idle, with only an unscaled progress bar with a maximum of four simultaneous colors (this color selection must remain constant for at least three seconds in current designs) displayed from the save-to-disk command. This computer execution period presents an opportunity to display predetermined image data, such as advertising, to the user with a color count of more than four simultaneous colors with change cycles of under three seconds. However, typical image programs designed to operate under screen idle conditions are not optimized for fast execution and are not operating system independent. In particular, during save-to-disk commands, it is essential that the predetermined image display be operating system-independent and require no operating system functionality. But screen saver programs are typically dependent on operating system functionality. 
     In the example of the save-to-disk command, any display of a predetermined image occurs during a system save state, so that it is not possible to use the operating system to determine if any memory is available in main memory for work space to process the predetermined image for display. In contrast, screen saver programs do not have a problem with obtaining memory for image processing because such programs can allocate memory through the operating system, like other normal application programs. 
     Referring now to FIG. 1A,  1 B and  1 C a preferred embodiment of the present invention is described. In the first step at block  10  of the program, a computer execution period is recognized. In the context of a Save-To-Disk command, the header sector for the Save-To-Disk command is fetched and validated. The purpose of this validation is to determine if a predetermined graphic image is present, and if so, where this predetermined image is located in memory space. Typically, predetermined image data will be located on a hard drive, but it could be stored at a variety of different memory locations or could even be accessed through a network. 
     The next step at block  12  is to determine whether a predetermined image in the Save-To-Disk header has been found. If no predetermined image has been located, then the program goes to the Default To Text block  14 . This Default To Text block simply displays predetermined text on the screen in a well known manner. 
     Additionally, at block  12  the execution will also look to determine whether desired video firmware is present in the system. Although a variety of different firmware may be utilized, in a preferred embodiment, the desired firmware is VESA (Video Electronics Standards Association) firmware and is located on a video card for the system. Note that the video firmware may also be in the BIOS or on the motherboard for the computer or in some other convenient location. The VESA firmware is preferably version 2.0 or greater. If the desired video firmware is not present in the system, then the program sends the execution to the Default To Text block  14 . 
     The next step in the program at block  16  is to obtain the physical screen resolution of the pertinent display. Typically, this physical resolution will be obtained through the VESA firmware. If the VESA firmware cannot return this information, then a default resolution is provided. By way of example, but not by way of limitation, a default resolution of 640×480 may be provided. 
     The next step in the program at block  18  is to obtain a list of supported video modes. This may be typically obtained through the VESA firmware. 
     The next step at block  20  is to select a suitable video mode based on predetermined criteria set in the program. In one embodiment, to be discussed in detail below, where information and data content held in a fast memory block is to be stored in the video memory for the video system, a predetermined portion of non-visible memory is desired to be present. Accordingly, in that embodiment, the first predetermined parameter in the predetermined criteria is a predetermined amount of non-visible memory being present in a video mode. In a preferred embodiment, the non-visible memory criteria is set to at least 64k of non-visible memory. The next predetermined criteria, or the first predetermined criteria if a non-visible memory criteria is not present, is to select a video mode which has a resolution which is compatible with the physical display resolution determined previously. In a preferred embodiment, the predetermined criteria for the video mode resolution is set equal to the physical resolution of the display. 
     The next predetermined criteria is to select a video mode with a preferred color depth. The preferred color depth will depend on the particular application and the number of colors desired. In a preferred embodiment, the color depth is set to either 15 or 16 bits. 
     A further predetermined criteria for the video mode is to set the pixel format to be compatible with the pixel format of the predetermined image data. If the predetermined image data is RGB data, then it is preferred that the video mode selection be an RGB video mode. In general, the following order or preference for pixel format is preferred: 5 Red, 6 Green, 5 Blue (5R6G5B), 5B6G5B, 5R5G5B, or 5B5G5R. 
     In essence, the operation that is taking place is that the program is talking to the video firmware on the video card (not to the operating system) and is searching for a video mode that is optimal based on the size of the non-visible memory (an optional first criteria), the resolution of the video mode, the color depth for the video mode and the pixel format for the video mode. In one embodiment, the program serially compares each available video mode to a preferred set of predetermined criteria and stores the first video mode which meets these predetermined criteria. The program continues to query the video firmware on the video card for new video modes until all of the video modes have been reviewed. When a video mode is found which more closely fits the predetermined criteria than the video mode currently stored, then this new video mode replaces the stored video mode. 
     It should be noted that it is preferred that the video memory be linearly writable. 
     This linear writability permits the program to talk directly to the video memory, bypassing the firmware on the video card. In essence, if the video memory is linearly writable, then writing can be accomplished in one continuous burst. If the video memory is not linearly writable, then the data will typically be passed by means of packets through a paging mechanism. 
     If no suitable video mode is found during this step, then the program goes to block  14 , the Default To Text block. 
     The next step in the present embodiment of the invention is to re-fetch and store the attributes of the selected video mode. This is accomplished in block  22 . 
     The next step in the program at block  24  is to read the header of the predetermined image, which contains information on the dimensions of the predetermined image, as well as the location, dimensions, and color of a progress bar. The progress bar provides information to the user on what proportion of the program executing during this period has been completed. Note that the use of a progress bar is optional with the program designer. Also during this program step, the sector length of the image is computed. The size of the visible portion of the video memory is determined also at this time. If this program is for an X86 processor, then the program switches into the flat mode. Also, in a preferred embodiment the first location of the non-visible portion of the video memory is determined and saved. The determination of this first location of the non-visible memory is obtained by taking the video memory base address and adding the size of the visible portion of the video memory thereto. 
     In the next step in the program at block  25 , if a block of fast memory is to be organized by this program into a plurality of buffers, as is done in a preferred embodiment of the present invention, then a write buffer pointer A is set to buffer A. The next step in the program at block  26  is to set the video mode for the video memory, based on the video mode selected in step  20 . 
     The next step at block  28  is to free-up a block of fast memory for use in processing the predetermined image data. This is accomplished by writing the data contents of a selected block of a fast memory into a first memory. Note that this step is necessary because the system is operating system independent and cannot access the operating system to determine what memory is free. By way of example, this first memory is not main memory but could simply be memory disposed in the firmware in the system, or it could be memory disposed in any peripheral device such as a sound driver, or printer driver, or it could be flash memory generally, or it could be memory accessed via the internet or some other network. In a preferred embodiment, this first memory comprises the non-visible portion of the video memory. The non-visible portion of the video memory is preferred due to speed considerations. Note that typically the amount of memory necessary in the first memory will be 64k or larger. 
     The fast memory could be implemented in the present invention by means of any fast memory having an access time greater than the video memory. Preferred access times for a fast memory are on the order of 10 nanoseconds or less access time. However, fast memories could operate in accordance with the present invention with access times of 80 nanoseconds or less. The fast memory of the present invention could be implemented by a cache memory. However, in a preferred embodiment of the present invention, the fast memory has been implemented by main memory. 
     The next step is block  30  in the program which computes various scaling values necessary to perform horizontal and vertical scaling of the predetermined image. A divisor-remainder method may be used to meet requirements for spatial consistency on the scaling. Note that if the predetermined image size is identical to the display screen size, then scaling may not be necessary. Note that any scaling parameters determined will be used not only on the predetermined image data, but also preferably on any progress bar dimensions. 
     The next step at block  32  is to convert the progress bar color to the format set by the video card if a progress bar is to used. The next step in the program at block  34  is to enter an image write and process loop. This block  34  could simply be implemented by a single buffer into which predetermined image data is written. The data in this single buffer would then be processed by the CPU of the computer and the resulting processed data written to the video memory. However, in a preferred embodiment, multiple buffers are utilized to increase speed. In this preferred embodiment, there is a block  36  in the image loop block  34 , wherein data from the predetermined image is written into a one of a plurality of buffers which is pointed to by the write buffer pointer. The next step in this loop is to process the data in the buffer just written to, while writing new data from the predetermined image data into another of the plurality of buffers. However, in a preferred embodiment shown in the figure, parallel processing is accomplished at block  38 , by processing the predetermined image data held in another buffer in the plurality of buffers during the write step into the write pointer designated buffer. The processing of the predetermined image data comprises scaling of the predetermined image data to the screen display size, if the predetermined image is larger or smaller than the screen display physical size, as well as pixel multiplexing the predetermined data. This pixel multiplexing, in some instances, comprises shifting the predetermined image data so that it is congruent with the pixel format for the screen display. Processing may also entail scanline tracking and testing for the end of the buffer. This processing is accomplished by calling a BIOS disk read function which then passes control to a background processing routine after sending the read command to the hard disk. When the hard disk has finished the read, it will then notify the background routine, which will then pass control back to the BIOS disk routine and then finally back to the image loop. This processed data is then written to the visible portion of the video memory. When both the Write function of block  36  into one buffer and the Process function of block  38  for the other buffer have been completed, as determined in block  39 , then the program execution proceeds to block  40 . 
     At block  40  the program determines whether there is predetermined image data remaining that must be written to the buffers. If the answer is yes, then the program execution proceeds to block  42  wherein the write buffer pointer is caused to change to the next buffer to be written to. In a system with only buffers A and B, the write buffer pointer, which initially pointed to buffer A, would be changed to point to buffer B, and the next portion of data from the predetermined image would be written into the buffer B. At the same time, the data in buffer A would be processed by the CPU of the computer in execution block  38 . 
     As noted above, in a preferred embodiment, the processing of the data occurring in execution block  38  may occur simultaneously with the writing of the predetermined image data into the next buffer. This parallel processing significantly speeds the execution of the program. Note that because the fast memory has an access time which is substantially faster than the access time for the video memory, a processing in the CPU for the computer may be accomplished substantially faster than if data was being accessed from the video memory or other memory. 
     If the determination in block  40  is that there is no image data remaining to be written, then the execution of the program proceeds to block  44  which exits the image loop. The next step in the program is block  46  which restores the data contents to the block of fast memory. In the preferred embodiment of the present invention, the data stored in the non-visible portion of the video memory is restored to the block of main memory which had been utilized as the fast memory in that embodiment. 
     The next step in this program is block  48  wherein the predetermined image is displayed on the display screen. Note that the predetermined image may be displayed at the time that the video memory is written to at block  48 , if that is desired. The program then returns to the main program at block  50 . 
     It can be seen that high speed processing is achieved in accordance with the present invention by writing predetermined image data that is to be displayed into a fast memory for processing. This writing function is accomplished in a preferred embodiment by writing alternately into a set of buffers in this block of fast memory. In a more preferred embodiment, the predetermined image data is processed in one buffer, while new data from the predetermined image is being written into another buffer. For the example of a buffer A and a buffer B, the program would write predetermined image data into one of the buffers while processing the predetermined image data in the other of the buffers. The processed data is then written into the video memory and the predetermined image is displayed. 
     In a preferred embodiment, this predetermined image data is typically deep-color, high resolution uncompressed image data from a disk. The present inventive design permits the display of this deep-color image as quickly as possible while the user of the computer is waiting for another program which is executing on the system, such as a saveto-disc program, to be completed. 
     In one especially preferred embodiment of the present invention, a portion of the predetermined image data is written into the fast memory in parallel with the processing of a different portion of the predetermined image data, to substantially increase the display process speed. In essence, the process is processing one buffer while the other buffer is being written to. This program is operating system independent and requires no operating system functionality. The present invention uniquely uses VESA BIOS firmware calls and video graphics modes with more color displayed simultaneously using, for example, fifteen-bit or sixteen-bit pixels (32K or 64K simultaneous colors). 
     It should be understood that the exact sequence of steps described above is not essential and that various of the steps could be interchanged or equivalent steps substituted while still accomplishing the objects of fast processing and operating system independence. 
     The foregoing description of a preferred embodiment of the invention has been presented for purposes of illustration and description. It is not intended to be exhaustive or to limit the invention to the precise form disclosed, and modifications and variations are possible in light of the above teachings or may be acquired from practice of the invention. The embodiment was chosen and described in order to explain the principles of the invention and its practical application to enable one skilled in the art to utilize the invention in various embodiments and with various modifications as are suited to the particular use contemplated. It is intended that the scope of the invention be defined by the claims appended hereto, and their equivalent.