Abstract:
A method of pattern generation for a screen using a wipe solid generator and a recursive memory includes generating from operator inputs a wipe solid. An extent of the generated wipe solid is measured to produce maximum and minimum values. These maximum and minimum values are extended to encompass a desired border size and softness. A lever-arm scaling function is selected based upon whether a change in operator input causes a reversal in pattern and/or causes the pattern to &#34;breathe.&#34; The selected lever-arm scaling function uses prior values from the recursive memory to generate new values that are stored in the recursive memory. From the stored values clip levels are determined such that completion of lever-arm movement to a limit position coincides with completion of the pattern without distortion of the size of the pattern.

Description:
BACKGROUND OF THE INVENTION 
     The present invention relates to digital video signal processing, and more particularly to pattern generation using a wipe solid generator to provide scaling of a switcher lever arm during wipes between video images that always results in the pattern transition ending or beginning just as the lever arm reaches its limit. 
     Video switchers or mixers typically include pattern generators as a standard resource. These generators allow wipes from one video signal to another via a changing geometric shape, allow present pattern effects such as spotlights, darkened anonymous faces and split screens, and allow masking effects so that a key is active only within a certain region of a display screen. These pattern generators typically provide a variety of shapes, such as circle, square, diamond, heart, etc., and also include pattern modification controls for position, aspect, rotation, modulation, replication, edge softness and border width. 
     The wipe patterns are traditionally generated using a wipe solid approach as illustrated in U.S. Pat. No. 4,805,022 issued Feb. 14, 1989 to John Abt entitled &#34;Digital Wipe Generator.&#34; To visualize this method, picture an inverted cone, pointing down. By applying a clip and gain function to this three-dimensional shape, a circle is generated. As the clip point moves from the bottom (point of the cone) to the top (base of the cone) of the inverted cone, the circle grows. This is how a circle wipe transition is formed. Many modifiers affect the wipe solid itself. By changing the location of the cone&#39;s point on the video screen, the wipe position is modified. By changing the symmetry of the cone, the aspect is changed. Rotation is accomplished by mixing the x and y coordinates of the cone via sine and cosine functions. Modulation is accomplished by varying the position of the cone with various waveforms. Multiple circles are generated by creating a wipe solid consisting of numerous cones. Other modifiers affect the clip and gains. A border is generated by using two clip and gain functions, each with a different clip. The clip separation defines the border width. A low gain produces a soft pattern. By inverting the gain and changing the direction of the clip, the pattern is reversed. 
     Several problems have traditionally plagued a wipe system. These problems include lever-arm scaling, constant position and consistent sizing. 
     1. Lever-arm scaling. Each modifier may potentially change the clip values at which the pattern first appears on the screen and vanishes from the screen. This causes difficulty in setting the clip range. Ideally the switcher&#39;s lever-arm which controls the clip values causes the pattern to start immediately after it is moved from its end stop, and the pattern vanishes just as the lever-arm travel is complete. Many current switchers lack dynamic lever-arm scaling. Wipes start and end partway through the lever-arm travel, and at extreme pattern positions the wipes &#34;snap&#34; to completion at the end of lever-arm travel. 
     2. Constant position. One solution to the lever-arm scaling problem is to center the pattern position as the wipe grows. This artifact is often undesirable. It also precludes numerous clip and gain resources from using the same wipe solid since the position of pattern 2 may be modified by the size, i.e., lever-arm position, of pattern 1. 
     3. Consistent sizing. Some generators provide lever-arm scaling to the detriment of pattern size consistency. A circle in the center of the screen must traverse one-half screen for the pattern to finish the transition. A circle starting from the screen&#39;s corner must traverse the entire screen to finish the transition. Therefore, a pattern at fifty percent (50%) lever-arm travel is twice as big if it originates from a corner than if it originates from the screen center. This operation is correct for static pattern position, but the pattern &#34;breathes&#34;, i.e., grows or shrinks, as the pattern position is changed to traverse the screen while the lever-arm is not at an end stop. Further a normal wipe features a growing pattern which reveals the new video, while a reversed wipe features a shrinking pattern which conceals the old video. At ten percent (10%) into a circle wipe a small circle is exposed with the new video in the center. For a reversed circle wipe a ten percent transition reveals a large circle with the old video in the center. Pressing the reverse button in the middle of a transition causes the pattern to jump from large to small or vice-versa. What is desired is consistent size regardless of whether the new and old videos are swapped or the direction of movement changes. 
     SUMMARY OF THE INVENTION 
     Accordingly the present invention provides pattern generation using a wipe solid generator that provides lever-arm scaling while maintaining size consistency during pattern modification. The wipe solid generator includes H and V ramp generators, modulators, rotation and scaling matrix, offset adders and a variety of ALU functions as well as clip and gain circuits with an offset adder for the clip level, a barrel shifter and multiplier for a high range of gain, and limiters allowing an effective range from zero to unity. The wipe solid generator first generates the values that are used to produce a wipe solid. The minimum and maximum values of the wipe solid are then determined that describe the range of the clip as generated by the lever-arm. The clip range is extended to provide for borders, either sharp pattern edges or soft edges, so that the pattern is fully ON or OFF at the end of the lever-arm travel. Then the lever-arm is scaled by calculating the clip and gain values that are provided to the necessary hardware based upon the minimum, maximum, border and lever-arm position values using recursive values for dynamic scaling. 
     The objects, advantages and other novel features of the present invention are apparent from the following detailed description when read in conjunction with the appended claim and attached drawing. 
    
    
     BRIEF DESCRIPTION OF THE DRAWING 
     FIG. 1 is a block diagram of a wipe solid generator for generating patterns according to the present invention. 
     FIG. 2 is a flow chart for pattern generation using the wipe solid generator according to the present invention. 
    
    
     DESCRIPTION OF THE PREFERRED EMBODIMENT 
     Referring now to FIG. 1 a wipe solid generator 10 has a waveform generator 12 that receives a video sync input, either composite sync or separated horizontal and vertical syncs, and produces X and Y output digital waveforms. The waveform generator 12 uses conventional H and V counters together with modulators, associated multipliers for rotation and adders for position adjustment. The X and Y waveforms are input to a digital solid generator 14, such as that disclosed in U.S. Pat. No. 4,805,022, to produce a wipe solid (WS) output digital waveform. The waveform generator 12 and solid generator 14 are connected together by a bus 16 to which also is connected a microprocessor 18. The microprocessor 18 provides appropriate control waveforms, data and clock signals to the various modules connected to the bus 16 according to inputs received via an input/output (I/O) port. 
     Within the waveform generator 12 the slope of the ramp generators is controlled by the microprocessor 18 according to the H and V increments for the respective counters used. The ramp generators output a sawtooth digital signal that is input to a sawtooth to triangle wave converter. Each cycle of the triangle wave output from the converter generates a pair of wipe solids. For non-replicated patterns the gain is set such that the full triangle covers a multiple of full video screens, such as six full video screens or one wipe solid per three video screens. The oversized pattern allows dynamic range for position and modulation functions. The H and V increments are increased for replicated patterns such that the triangle wave occurs multiple times per screen as necessary. The triangle wave ranges from -1 to +1. 
     The microprocessor 18 controls the initialization of the ramp generators by setting the position of the wipe solids. For non-repeated patterns only one slope of the triangle wave is generated during an active screen. The zero crossing is at the screen center for a centered position. By adding waveforms to the triangle waves modulation is achieved by a modulator. Modulation variables include frequency, phase and amplitude as well as waveform type for both H and V dimensions. Rotation is accomplished by mixing the modulated H and V triangles to form the X and Y outputs. Scaling to optimize dyanmic range and to set aspect ratio also are accomplished in the rotation matrix section according to the following functions: 
     
         X=A1*H+B1*V 
    
     
         Y=B2*V+A2*H 
    
     where A1, A2, B1 and B2 are generated by the microprocessor 18. Absolute value and invert functions follow the rotation matrix section. The X and Y waveforms without the absolute value function are used to generate edge to edge wipes, while the absolute value function is used to generate center to edge wipes like squares and diamonds. The invert function complements the slope of the ramps and triangles. Aspect adders may be used to modify the aspect of certain rectangular patterns like squares and corner wipes, the aspect values being provided by the microprocessor 18. 
     The X and Y waveforms are combined by an arithmetic logic unit (ALU) in the solid generator 14 to form the wipe solid (WS). Minimum and maximum functions are used for squares, rectangles and boxes, addition is used for diamonds and diagonals, passing only the X or Y waveform is used for one dimension patterns, and the square root of the sum of the squares is used for circular patterns. The selection of the particular ALU function is provided by the microprocessor 18. Complex patterns, such as hearts, stars and triangles, may be generated by combining various wipe patterns and using more complex ALU functions. 
     The minimum and maximum values of WS are determined either by using a complex mathematical expression, taking all WS variables into account, or by &#34;simulation.&#34; One way to determine the minimum and maximum WS values during the active screen is by selecting the ramp values from up to nine points on the screen, processing these values using the same logic as is implemented by the solid generator 14 with the current variables, and then comparing these values to find the minimum and maximum. For example, the values used may include the center point, the four corners of the screen and the four edge portions to the right, left, top and bottom of the center point. If the center point is outside the active screen, it is not included, nor are the edge intersection points included if they do not intersect an edge of the active screen. These minimum and maximum values describe the range of the clip generated by a lever-arm input to the microprocessor 18 for hard patterns without borders. Simply scaling the lever-arm to generate a clip value to match the range determined by the measured minimum and maximum values results in the undesired breathing pattern. 
     At the end of the lever-arm travel the pattern is required to be fully OFF or ON depending upon whether the pattern is reversed or not. For sharp pattern edges (high gain) the clip needs to range from just below the minimum to just above the maximum value as determined during the pattern measurement process described above. For soft edges (low gain) this range is insufficient. The clip and gain function may be described as follows: 
     
         Output=(Input-Clip.sub.-- Level)*Gain/2+1/2 
    
     where the output is limited to a range of zero to one and Clip --  Level and Input range from minus to plus one. For the Output to saturate at a value of one, the Input exceeds the Clip --  Level by a value of 1/Gain. For the Output to clip at a value of zero, the Clip --  Level exceeds the Input by a value of 1/Gain. Therefore the clip range is extended as follows: 
     
         MAXIMUM=Maximum+1/Gain 
    
     
         MINIMUM=Minimum-1/Gain 
    
     The clip range also is extended for borders. Since the lever-arm ranges from zero to one: 
     
         Clip1=Lever.sub.-- Arm*(MAXIMUM-(MINIMUM-Border))+(MINIMUM-Border) 
    
     
         Clip2=Lever.sub.-- Arm*((MAXIMUM+Border)-MINIMUM)+MINIMUM 
    
     The Clip1 and Clip2 values are separated by the Border value, and Clip1 and Clip2 are limited to the maximum allowable range of the clip and gain function, i.e., minus to plus one. To reverse the pattern, Gain is inverted and Lever --  Arm is complemented: 
     
         Reverse.sub.-- Gain=-Gain 
    
     
         Reverse.sub.-- Lever.sub.-- Arm=1-Lever.sub.-- Arm 
    
     The microprocessor 18 calculates the values used by the solid generator 14 based on the most recent set of user inputs. These values are downloaded to the hardware from the microprocessor 18 during a vertical interval interrupt. The extent (minimum and maximum) of WS are measured within the active picture screen. The clip extensions for border size and softness (1/gain) are calculated. At this point the microprocessor 18 selects one of three scaling functions for the lever-arm depending upon whether input changes have been made that (i) do not cause pattern breathing without pattern reversal, (ii) do not cause pattern breathing with pattern reversal, or (iii) induce pattern breathing (reset pattern size as in selection of a new pattern). Using the appropriate scaled lever-arm value, the clip and gain values are calculated and downloaded to the hardware. 
     The wipe solid generator 10 may have multiple clip and gain functions associated with it. Each clip and gain function may have independent lever-arm values, softnesses and border sizes. Each clip and gain function then needs independent recursive memory for the lever-arm scaling function. Each lever-arm scaling function has as inputs (i) the lever-arm value, (ii) a pointer to the measured minimum and maximum WS values, and (iii) a pointer to the memory area specific to the particular clip and gain function. The last pointer references the previously calculated clip extensions due to border size and softness as well as recursive memory locations for Old --  Clip, Old --  Lever and Synth --  Lever. The outputs of the scaling functions are stored in the three recursive memory locations. 
     1. No Pattern Breathing without Reversal 
     The basic concept is to calculate a virtual lever-arm position after a change in minimum or maximum WS values while maintaining the same clip levels, and then to change this virtual lever-arm value based on the change in position of the actual lever-arm. The new clip values are then based on the new synthesized lever-arm and the new minimum and maximum WS values. 
     The virtual lever-arm value after a minimum or maximum value change is determined as follows: 
     
         MINIMUM=Minimum--Softness.sub.-- Extend--(Border.sub.-- Extend/2) 
    
     
         MAXIMUM=Maximum+Softness.sub.-- Extend+(Border.sub.-- Extend/2) 
    
     
         Virtual.sub.-- Lever.sub.-- Arm= (Old.sub.-- Clip-MINIMUM)/(MAXIMUM-MINIMUM) 
    
     For example if the old MAXIMUM was 0.75, the old MINIMUM was 0.25 and the previous lever-arm and clip values were 0.5, and the new MINIMUM after a pattern position change becomes zero, then Virtual --  Lever --  Arm becomes 0.667, since to maintain a clip level of 0.5 the virtual lever-arm needs to be at a two-thirds position. Once Virtual --  Lever --  Arm is determined, then six cases are considered when determining the outputs. 
     A. Actual Lever-Arm at Minimum End Stop 
     The system is reset by entering the following into the recursive memory for input to the next set of calculations: 
     
         Old.sub.-- Clip=MINIMUM 
    
     
         Old.sub.-- Lever=0 
    
     
         Synth.sub.-- Lever=0 
    
     B. Else Actual Lever-Arm at Maximum End Stop 
     The system is reset by entering the following into the recursive memory for input to the next set of calculations: 
     
         Old.sub.-- Clip=MAXIMUM 
    
     
         Old.sub.-- Lever=1 
    
     
         Synth.sub.-- Lever=1 
    
     C. Else (Old-Clip=&lt;MINIMUM) and (Lever --  Arm&gt;=Old --  Lever) 
     In this case the pattern is not started, yet the lever-arm is mid-way and may be decreasing. For example, this occurs when a partially open pattern is moved off screen. The following is entered into the recursive memory for input to the next set of calculation: 
     
         Old.sub.-- Clip=Virtual.sub.-- Lever.sub.-- Arm*(MAXIMUM-MINIMUM)+MINIMUM 
    
     
         Old.sub.-- Lever=Lever-Arm 
    
     
         Synth.sub.-- Lever=Virtual.sub.-- Lever.sub.-- Arm 
    
     The value of Old --  Clip may likely be less than MINIMUM since Virtual --  Lever --  Arm likely is less than zero. 
     D. Else (Old --  Clip&gt;=MAXIMUM) and (Lever --  Arm&gt;=Old --  Lever) 
     In this case the pattern is complete, yet the lever-arm is mid-way and may be increasing. For example, this occurs when a large pattern is moved from off-screen to on-screen. The following is entered into the recursive memory for input to the next set of calculations: 
     
         Old.sub.-- Clip=Virtual.sub.-- Lever.sub.-- Arm*(MAXIMUM-MINIMUM)+MINIMUM 
    
     
         Old.sub.-- Lever=Lever.sub.-- Arm 
    
     
         Synth.sub.-- Lever=Virtual.sub.-- Lever.sub.-- Arm 
    
     The value of Old --  Clip may be greater than MAXIMUM since Virtual --  Lever --  Arm likely is greater than one. 
     E. Else Lever --  Arm&gt;Old --  Lever 
     In this case the pattern is partially open and the lever-arm is in transition and is increasing. The following is entered into the recursive memory for input to the next set of calculations: ##EQU1## 
     
         Old.sub.-- Lever=Lever.sub.-- Arm 
    
     The synthesized lever-arm is based on the virtual lever-arm plus the lever-arm change scaled by the ratio of the distance of the virtual lever-arm to its end stop to the distance of the actual lever-arm to its end stop. 
     F. Else 
     In this case the pattern is partially open and the lever-arm is in transition and is decreasing or has not changed. The following is entered into the recursive memory for input to the next set of calculations: 
     
         Synth.sub.-- Lever=Virtual.sub.-- Lever.sub.-- Arm+((Lever.sub.-- Arm-Old.sub.-- Lever)*(Virtual.sub.-- Lever.sub.-- Arm-0)/(Lever.sub.-- Arm-0)) 
    
     
         Old.sub.-- Clip=Synth.sub.-- Lever*(MAXIMUM-MINIMUM)+MINIMUM 
    
     
         Old.sub.-- Lever=Lever.sub.-- Arm 
    
     The synthesized lever-arm is based on the virtual lever-arm plus the lever-arm change scaled by the ratio of the distance of the virtual lever-arm to its beginning stop to the distance of the real lever-arm to its beginning stop. 
     2. No Pattern Breathing with Reversal 
     The basic concept is the same as the first scaling function. The virtual lever-arm value after a minimum or maximum change is determined as in the first scaling function. The corresponding six cases are determined as follows. 
     A. Actual Lever-Arm at Minimum End Stop 
     The system is reset by entering the following into the recursive memory for input to the next set of calculations: 
     
         Old.sub.-- Clip=MAXIMUM 
    
     
         Old.sub.-- Lever=0 
    
     
         Synth.sub.-- Lever=1 
    
     B. Else Actual Lever-Arm at Maximum End Stop 
     The system is reset by entering the following into the recursive memory for input to the next set of calculations: 
     
         Old.sub.-- Clip=MINIMUM 
    
     
         Old.sub.-- Lever=1 
    
     
         Synth.sub.-- Lever=0 
    
     C. Else (Old --  Clip&gt;=MAXIMUM) and (Lever --  Arm=&lt;Old --  Lever) 
     In this case the pattern is not started (fully open), yet the lever-arm is midway and may be decreasing. For example, this occurs when a large pattern is moved from off-screen to on-screen. The following is entered into the recursive memory for input to the next set of calculations: 
     
         Old.sub.-- Clip=Virtual.sub.-- Lever.sub.-- Arm*(MAXIMUM-MINIMUM)+MINIMUM 
    
     
         Old.sub.-- Lever=Lever.sub.-- Arm 
    
     
         Synth.sub.-- Lever=Virtual.sub.-- Lever.sub.-- Arm 
    
     Old --  Clip may likely be greater than MAXIMUM since Virtual --  Lever --  Arm likely is greater than one. 
     D. Else (Old --  Clip=&lt;MINIMUM) and (Lever --  Arm&gt;=Old --  Lever) 
     In this case the pattern is complete (fully closed), yet the lever-arm is midway and may be increasing. For example, this occurs when a small pattern is moved off-screen. The following is entered into the recursive memory for input to the next set of calculations: 
     
         Old.sub.-- Clip=Virtual.sub.-- Lever.sub.-- Arm*(MAXIMUM-MINIMUM)+MINIMUM 
    
     
         Old.sub.-- Lever=Lever.sub.-- Arm 
    
     
         Synth.sub.-- Lever=Virtual.sub.-- Lever.sub.-- Arm 
    
     Old --  Clip may likely be less than MINIMUM since Virtual --  Lever --  Arm likely is less than zero. 
     E. Else Lever --  Arm&gt;Old --  Lever 
     In this case the pattern is partially open and the lever-arm is in transition and is increasing. The following is entered into the recursive memory for input to the next set of calculations: ##EQU2## The synthesized lever-arm is based on the virtual lever-arm minus the lever-arm change scaled by the ratio of the distance of the virtual lever-arm to its beginning stop to the distance of the actual lever-arm to its end stop. 
     F. Else 
     In this case the pattern is partially open and the lever-arm is in transition and is decreasing or has not changed. The following is entered into the recursive memory for input to the next set of calculations: ##EQU3## The synthesized lever-arm is based on the virtual lever-arm minus the lever-arm change scaled by the ratio of the distance of the virtual lever-arm to its end stop to the distance of the actual lever-arm to its beginning stop. 
     3. Breathing Pattern (Reset Pattern Size) 
     The basic concept in this function is to determine a new clip value, as compared to lever-arm position, after a change in minimum or maximum WS values while maintaining the same virtual lever-arm value. The new clip value after such a change is: 
     
         New.sub.-- Clip=Synth.sub.-- Lever*(MAXIMUM-MINIMUM)+MINIMUM 
    
     For example if the old MAXIMUM was 0.75, the old MINIMUM was 0.25, and the synthetic lever-arm and clip values were 0.5, and the new MINIMUM after a pattern position change becomes zero, then the new clip value is 0.375 since Synth --  Lever of 0.5 selects a clip value midway between the new MINIMUM and MAXIMUM values. In this case there are five cases to consider. 
     A. Actual Lever-Arm at Minimum End Stop 
     The system is reset by entering the following into the recursive memory for input to the next set of calculations: 
     
         Old.sub.-- Clip=MINIMUM 
    
     
         Old.sub.-- Lever=0 
    
     
         Synth.sub.-- Lever=0 
    
     B. Else Actual Lever --  Arm at Maximum End Stop 
     The system is reset by entering the following into the recursive memory for input to the next set of calculations: 
     
         Old.sub.-- Clip=MAXIMUM 
    
     
         Old.sub.-- Lever=1 
    
     
         Synth.sub.-- Lever=1 
    
     C. Else New --  Clip&lt;MINIMUM 
     In this case the pattern is not started, yet the lever-arm is between end stops. For example, this occurs when a partially open pattern is moved off-screen and this function is called due to a new pattern selection. The system is reset as in Case A. 
     D. Else New --  Clip&gt;MAXIMUM 
     In this case the pattern transition is complete, yet the lever-arm is between end stops. For example, this occurs when a large off-screen pattern is moved on-screen and this function is called due to a new pattern selection. The system is reset as in Case B. 
     E. Else 
     In this case the pattern is partially open, the lever-arm is not at its end stops and a new pattern has been selected, engaging this function. The following is entered into the recursive memory for input to the next set of calculations: 
     
         Old.sub.-- Clip=New.sub.-- Clip 
    
     
         Old.sub.-- Lever=Old.sub.-- Lever 
    
     
         Synth.sub.-- Lever=Synth.sub.-- Lever 
    
     Synth --  Lever and Old --  Lever are not changed because this function does not handle lever-arm changes, but merely resets the size of a newly selected pattern. 
     Once the proper scaling function has been executed, then the clip levels are determined by Synth --  Lever as well as Border --  Extend and Soft --  Extend, with special consideration given to reversed patterns. To ensure there is no hint of a pattern when Synth --  Lever is at the extremes, the clip levels are set at -1 when Synth --  Lever=0 and at +1 when Synth --  Lever=1. 
     For non-reversed patterns: ##EQU4## 
     For reversed patterns: ##EQU5## The gain is sent directly to the clip and gain functions for non-reversed patterns, and is inverted for reversed patterns. 
     Although a particular set of mathematical expressions have been given as an illustration of the present invention, these expressions may be altered so that the recursive variables may include the old minimum and maximum values or differences between a calculated lever-arm position and the actual position. Any implementation of pattern generation that is based on wipe solids and uses recursive values to dynamically scale the lever-arm is contemplated by the present invention. 
     Thus the present invention provides pattern generation using a wipe solid generator by dynamically scaling the lever-arm using wipe solids and recursive values so that a pattern transition ends or begins just as the lever-arm reaches its end stops while maintaining size consistency during changes in position, pattern selection and other modifiers including pattern reverse.