Abstract:
A video encoder/decoder device, method, and computer program product combine to enhance entropy encoding by using different calculation approaches for assessing costs of using different encoding modes for a video encoding. Moreover, frames in a sequence, and/or sub-frames within a frame may have lowest cost coding modes selected using different cost calculation approaches. One exemplary cost calculation is SAD and another is SSD. A net effect is better subjective video quality for a given bitrate, with reduced encoder complexity, especially when recognizing the lesser amount of computational resources required to support SAD as opposed to SSD.

Description:
CROSS REFERENCE TO RELATED APPLICATION 
       [0001]    The present application claims the benefit of the earlier filing date of U.S. provisional patent application, Ser. No. 61/305,360 filed in the USPTO on Feb. 17, 2010, the entire contents of which being incorporated herein by reference. 
     
    
     BACKGROUND 
       [0002]    1. Field of the Disclosure 
         [0003]    The present application relates to video encoders/decoders, methods and computer program product generally, and more particularly to video encoders/decoders, methods and computer program product that use different “Cost” functions for identifying a coding mode for coding a block of pixels. 
         [0004]    2. Description of the Related Art 
         [0005]    The “background” description provided herein is for the purpose of generally presenting the context of the disclosure. Work of the presently named inventor, to the extent it is described in this background section, as well as aspects of the description which may not otherwise qualify as prior art at the time of filing, are neither expressly or impliedly admitted as prior art against the present invention. 
         [0006]    A video encoder typically divides each frame of original video data in blocks of pixels. In existing standards for video compression (e.g., MPEG1, MPEG2, H.261, H.263, and H.264) these blocks would normally be of sized 16×16 and be referred to as macroblocks (MB). It is anticipated in the yet to be implemented HEVC/H.265 standard, the blocks would typically be larger (e.g. 64×64) and might be rectangular, for instance at frame boundaries. 
         [0007]    Typically, the blocks are processed and/or transmitted in raster scan order, i.e. from the top row of blocks to the bottom row of blocks, and from left to right within each row of blocks. 
         [0008]    For each block of original pixel data, the encoding is typically performed in the following steps:
   1. Produce prediction pixels using reconstructed pixel values from i) the previous frame (inter prediction), or ii) previously reconstructed pixels in the current frame (intra prediction). Depending on the prediction type, the block is classified as an inter block or an intra block.   2. Compute the difference between each original pixel and the corresponding prediction pixel within the block.   3. Apply a two-dimensional transform to the difference samples resulting in a set of transform coefficients.   4. Quantize each transform coefficient to an integer number.   5. Perform lossless entropy coding of the quantized transform coefficient.   6. Apply a two-dimensional inverse transform to the quantized transform coefficient to compute a quantized version of the difference samples.   7. Add the prediction to form the reconstructed pixels for the current block.   
 
         [0016]    Video encoders can further divide blocks of pixels into sub-blocks. Typically, the blocks are of fixed (square) size, while the sub-blocks can be of various e.g. (rectangular) shapes. Also, the partitioning into sub-blocks will typically vary from one block to another. 
         [0017]    Inter prediction is typically achieved by deriving a set of motion vectors for each sub-block. The motion vectors define the spatial displacement between the original pixel data and the corresponding reconstructed pixel data in the previous frame. Thus, the amount of data that needs to be transmitted to a decoder can be greatly reduced if a feature in a first frame can be identified to have moved to another location in a subsequent frame. In this situation, a motion vector may by used to efficiently convey the information about the feature that has changed position from one frame to the next. 
         [0018]    Intra prediction is typically achieved by deriving an intra direction mode for each sub-block. The intra direction mode defines the spatial displacement between the original pixel data and the previously reconstructed pixel data in the current frame. 
         [0019]    Both motion vectors and intra direction modes are encoded and transmitted to the decoder as side information for each sub-block. In order to reduce the number of bits used for this side information, encoding of these parameters depends on the corresponding parameters of previously processed sub-blocks. 
         [0020]    Typically, some form of adaptive entropy coding is used. The adaptation makes the entropy encoding/decoding for a sub-block dependent on previously processed sub-blocks. Entropy encoding is lossless encoding that reduces the number of bits that are needed to convey the information to a receiving site. 
         [0021]    When selecting between coding modes for a block of pixels, a variety of different options are available. The selection of coding mode is conventionally selected for continuously use during the encoding operation of successive frames. 
       SUMMARY 
       [0022]    The following paragraphs have been provided by way of general introduction, and are not intended to limit the scope of the appended claims. The described embodiments, together with further advantages, will be better understood by reference to the following detailed description taken in conjunction with the accompanying drawings. 
         [0023]    There are a number of options for selecting coding modes when coding blocks of pixels and the selection of selection of particular coding modes would result in different “Cost.” Cost is a measure of distortion and required bits to code a block or sub-block. As recognized by the present inventor, methods used in encoders for calculating distortion in some instances have been by way of sum of square differences (SSD) and in other instances sum of absolute differences (SAD). However, the present inventor recognized that both SSD and SAD need not be mutually exclusive when performing coding on multiple frames, or within a frame. Rather, an attribute of SSD is that it is able to handle large residual pixel values spread over a few pixels, while SAD is capable of handling smaller areas spread over a larger number of pixels. However, by using a mixed approach of combining SSD and SAD for different frames or subframes in a video sequence offers a benefit of better subjective video quality for a given bit rate and substantial complexity reduction at the encoder side because the SAD calculations require less computational resources than SSD. 
         [0024]    According to these observations, a novel encoder/decoder, method and computer program product that employ a mixture of SSD and SAD in calculating rate distortion costs when deciding on a coding mode for encoding frames of pixels provides beneficial use of superior performance with less computational resources being required. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         [0025]    A more complete appreciation of the invention and many of the attendant advantages thereof will be readily obtained as the same becomes better understood by reference to the following detailed description when considered in connection with the accompanying drawings, wherein: 
           [0026]      FIG. 1  is a block diagram of an exemplary video encoder that includes mixed SSD/SAD rate distortion cost analysis functionality for assisting in coding mode selection. 
           [0027]      FIG. 2  is a block diagram of a video decoder that includes an ability to perform image reconstruction of an image encoded with the encoder of  FIG. 1 . 
           [0028]      FIG. 3  is a zigzag scan path used when collecting transform coefficients calculated in a video encoder. 
           [0029]      FIG. 4  is an exemplary frame sequence showing an allocation of SSD and SAD processing for different frames in a series of frames. 
           [0030]      FIG. 5  is an alternative SSD and SAD frame processing arrangement, where a mixture of SSD and SAD are performed on sub-frame basis. 
           [0031]      FIG. 6  is a flowchart of a process performed according to one embodiment in which costs are calculated for both the displacement vector and coding mode. 
           [0032]      FIG. 7  is a flowchart showing a process flow for performing SSD and SAD calculations for costs associated with processing frames or sub-frames. 
           [0033]      FIG. 8  is a block diagram of a computer implemented video conferencing endpoint that may host the apparatus, computer program product, and method as described herein. 
       
    
    
     DETAILED DESCRIPTION 
       [0034]    These and other features, aspects and advantages of the present invention will become better understood with regard to the following description, appended claims and accompanying drawings, wherein: 
         [0035]      FIG. 1  is a block diagram of an encoder that for encoding video images. The corresponding decoding process for each block can be described (as indicated in  FIG. 2 ) with many of the common elements from  FIG. 1 . However, in the decoder ( FIG. 2 ), after entropy decoding  22  (to produce the quantized transform coefficients and select decoding mode) and two dimensional inverse transformation  26  on the quantized transform coefficient to provide a quantized version of the difference samples, the resultant image is reconstructed after adding the inter prediction and intra prediction data previously discussed. 
         [0036]    Now, returning to the encoder of  FIG. 1 , a current frame as well as a prediction frame are input to a subtractor  9 . The subtractor  9  is provided with input from an intra prediction processing path  3  and a motion compensation processing path  5 , the selection of which is controlled by switch  7 . Intra prediction processing is selected for finding similarities within the current image frame, and is thus referred to as “intra” prediction. Motion compensation has a temporal component and thus involves analysis between successive frames that is referred to as “inter” prediction. 
         [0037]    The output of the switch  7  is subtracted from the pixels of the current frame in a subtractor  9 , prior to being subjected to a two dimensional transform process  13 . The transformed coefficients are then subjected to quantization in a quantizer  15  and then subject to an entropy encoder  17 . Entropy encoding removes redundancies without losing information, and is referred to as a lossless encoding process. Many video encoding/decoding systems and methods apply a deblocking filter across boundaries between blocks. Moreover, a deblocking filter is applied to blocks in decoded video to improve visual quality and prediction performance by smoothing the sharp edges which can form between blocks when block coding techniques are used. The filter aims to improve the appearance of decoded pictures. 
         [0038]    With regard to the entropy encoding, the encoding is generally lossless. After quantization the transform coefficients are represented as signed integer numbers. These numbers, or transform coefficients, are to be conveyed to the decoder without modifications. This is referred to as lossless representation or coding. There is generally a goal of using a minimum number of bits when representing the signed integer numbers. 
         [0039]    To perform efficient coding, a model with coding modes is used in which the scanning of coefficients is part of the model. Then statistics on the occurrence of different events may be made to help characterize the performance of different coding modes. Based on these statistics, Variable Length Code (VLC) tables are used to actually perform the coding. In the interest of maximizing the amount of information per transmitted bit, the VLCs allocate short code words to frequent events, all done in accordance with the statistics. This will result in low bit usage as long as the data to be coded fit reasonably well with the underlying statistics. In the opposite case, very untypical data is coded with longer code words having more bits. 
         [0040]    One aspect of the present disclosure is that it helps address situations where the data to be coded does not fit well within the “normal” statistics, and so an alternative approach is used as will be discussed. 
         [0041]    Subsequent to the entropy encoder, the encoded data is arranged in network packets via a packetizer, prior to be transmitted in a bit stream. 
         [0042]    However, the output of the quantizer  15  is also applied to an inverse transform and used for assisting in prediction processing. The output is applied to a deblocking filter  8 , which suppresses some of the sharpness in the edges to improve clarity and better support prediction processing. The output of the deblocking filer  8  is applied to a frame memory  6 , which holds the processed image pixel data in memory for use in subsequent motion processing. 
         [0043]    It should be noted that in the quantization and scanning operator  15 , transform coefficients are commonly described as being positioned in low frequency coefficient (or DC coefficient) in the upper left-hand corner of the transform matrix (see e.g.,  FIG. 3 ). Then the horizontal and vertical spatial frequency increases to the right and downward with respect to the transform matrix  100  shown in  FIG. 3 . The scanning direction in  FIG. 3  follows the arrow lines from position  0  through  15  in the order shown. This is referred to as zig-zag scanning. In entropy coding, the coefficients may be scanned in the direction indicated by the arrows (forward scanning) but in other cases the entropy coding may be more efficient if “inverse scanning” (high-to-low) frequency is used. Once again, frequency distribution of the transform coefficients will be different depending on the subject matter of the original images, and so selection of a best coding mode may be content dependent. 
         [0044]    With respect to various modes of coding, there are a variety of options from which to select. For example, different predictions may be used to produce a residual that later is in turn to be coded. In this situation, the residual is equal to the pixels to be coded minus the prediction. This is one coding mode. 
         [0045]    Another coding mode uses inter prediction when decoding picture data in a same frame to predict a block of pixels, where the size of the blocks to be predicted may vary. As an example, an H.264, 4×4, 8×8, 16×6 blocks may be used. Thus inter prediction using different sizes of blocks is yet another mode that can be used for coding. 
         [0046]    Yet another mode of coding is one in which each block size has different procedures for calculating intraprediction. Once again intraprediction is associations within one frame, thus not considering a temporal component between frames. On the other hand, inter prediction does include a temporal component that compares different frames in time so that redundancies between frames in time may be exploited to limit the amount of data bits that need to be transmitted. Moreover, data from previously decoded frames may be used to calculate a prediction and so vectors are used to indicate the special displacement in the prediction process. 
         [0047]    As yet another coding mode, the block size for inter prediction may vary. As an example, in H.264 a macroblock (MB) can be divided into many sub-blocks such as 16 4×4 blocks, 4 8×8 blocks, 2 16×8 blocks, etc. Each of these sub-blocks may be used for motion vectors to define the pixel displacement. 
         [0048]    Another mode parameter is using several reference frames to calculate the displacement vector and thereby perform the prediction. Moreover, one or more reference frames are factors that define the mode used for performing encoding. 
         [0049]    Also, the residual may be coded using different transform sizes such as in H.264, the sizes of 4×4, 8×8, and 16×16 pixels. 
         [0050]    All the above are examples of one of any number of coding modes. The challenge is to identify a best coding mode given a set of frames and processing resources. When defining “best”, a measure to be used is a combination of reconstruction error or distortion (D) and require bits to code the block (R). In H.264, the search for the best coding mode may be performed in two steps of finding displacement vectors and then coding in all possible modes. 
         [0051]    With regard to how to find the displacement vectors, assume that the uncoded pixels of a block are O(i,j) and the reconstructed pixels are O′(i,j). For inter prediction the following cost function is calculated for each displacement vector: 
         [0000]      Cost1=sum| O ( i,j )− O ′( i,j )|+λ1 *Rm,  
 
         [0052]    sum over i,j, where Rm is the number of bits to code the vector, and λ1 is a multiplier that depends on the quality of reconstruction. sum|O(i,j)−O′(i,j)| is called the distortion (D). This way of calculating D is referred to as Sum of Absolute Differences (SAD). 
         [0053]    The motion vector that result in minimum Cost1 is chosen. 
         [0054]    Regarding the coding of all modes, in the full version, coding and reconstruction is performed for all combinations of prediction modes and all transform sizes. The bitrate used to code in each mode is called R. For each mode the following cost function is calculated: 
         [0000]      Cost2=sum( O ( i,j )− O ′( i,j ))2+λ2 *R.  
 
         [0055]    λ2 is a multiplier suitable for this cost function. 
         [0056]    This way of calculating D is referred to as Sum of Square Differences (SSD). SSD can be used since a usual objective measure of coding gain is Peak Signal to Noise Ratio (PSNR) which is also based on SSD calculations. 
         [0057]    The coding mode that results in minimum Cost2 is chosen. 
         [0058]    Although different costs are associated with defining the displacement vectors and coding modes, it is presently recognized that PSNR is not necessarily the objective measure that correlates best with subjective picture quality. Similarly, it is not necessarily so that SSD in calculating Cost2 results in a best subjective picture quality at a given bit rate. As a consequence, the present inventor recognized the benefits of using SDD to calculate Cost2 in some cases, but using SAD in other cases. In light of these observations, the embodiments that follow use SDD to calculate Cost2 in some cases and SAD in other cases. SSD and SAD used in the cost function each have their respective different strengths:
       SSD offers accurate assessment when handling large residual pixel values spread over a few pixels, for instance a white spot on a dark background.   SAD offers accurate assessment when handling smaller errors spread over more pixels, for instance a small deviation of most pixels in a block. The general result is that pictures look less noisy.       
 
         [0061]    Therefore, as aspect of the embodiments that follow is that they offer an accuracy benefit when using a mixture of SSD and SAD when calculating the Cost2 function mentioned above. Moreover, processing for some parts of the video sequence (e.g., selected frames or sub-frames) uses: 
         [0062]    Cost2=sum(O(i,j)−O′(i,j))2+λ2*R 
         [0063]    Processing for other parts of the video sequence use: 
         [0064]    Cost2=sum|O(i,j)−O′(i,j)|+λ3*R λ3 is different from λ2 due to the use of SAD instead of SSD. 
         [0065]      FIG. 4  shows an example of different frames being processed differently depending on whether SSD or SAD is used in calculating the Cost2 function when deciding the coding mode. In  FIG. 4  each vertical line represents a frame. The bold lines indicate frames having a higher quality (HQ) and therefore higher bit usage than other frames. In this situation, SSD is used in the Cost2 calculation for the bold frames and SAD is used in the Cost2 calculation for the other frames. SSD may be used every N frames for example, where in the example N=8. However, N may also equal any integer number in this particular example. 
         [0066]      FIG. 5  shows a variation on the frame processing sequence shown in  FIG. 4 . In  FIG. 5  the bold portions of a frame are processed using SSD, while the Cost2 function for the non-bold segments is performed using SAD calculations. Thus, within a given frame different portions of the frame may have the Cost2 calculation partitioned between SSD and SAD. While  FIG. 5  shows portions of frames being calculated differently with SSD and SAD, it should be clear that a combination of the partitioned frames in  FIG. 5  may be combined wholly or partly with the full frames analyzed in  FIG. 4 . Therefore, it should be understood that either whole or partial frames may have the Cost2 function calculated using SSD and/or SAD on a sub-frame basis or on adjacent or periodic or another mixture not expressly shown in  FIG. 4  or  5 . 
         [0067]      FIG. 6  shows a process flow for performing the cost to Cost1 and Cost2 functions for displacement vectors in coding modes according to the present disclosure. The process starts in step S 600 , where Cost1 is calculated for displacement vector i. The process then proceeds to step S 601  where a query is made regarding whether i is greater than some predetermined value, X. If the response to the query in step S 601  is negative, the process proceeds to step S 602  where the frame counter is incremented and the process returns to step S 600 . However, if the response to the query in step S 601  is affirmative, the process proceeds to step S 603  where the motion vector is selected having a minimum Cost1 as calculated in step S 600 . The process then proceeds to step S 604  where the Cost2 is calculated for a coding mode j. A greater discussion with regard to step S 604  will be provided in  FIG. 7 . The process then proceeds to step S 605  where a query is made regarding whether j is greater than some predetermined number Z, which represents the number of modes that are considered when performing the cost to calculation. If the response to the query in step S 605  is negative, the process proceeds to step S 606  where the mode indice is incremented and the process returns to step S 604 . However if the response to the query in step S 605  is affirmative, the proceeds to step S 607  where the minimum Cost2 is selected for a particular coding mode. Subsequently the process concludes, now knowing what the minimum Cost1 and Cost2 is for displacement vector and decoding mode that results in the minimum cost. 
         [0068]      FIG. 7  is an expansion on step S 604  from  FIG. 6 . In step S 604  a query is made in step S 700  regarding whether a frame or a part of a frame has been allocated for SSD calculation. If the response to the query in step S 700  is negative, the process proceeds to step S 702  where an SAD calculation is performed for Cost2 for that frame or sub-frame. However, if the response to step S 700  is affirmative, the process proceeds to step S 701  where an SSD calculation is performed for Cost2 on the frame or sub-frame. The output of steps S 701  and S 702  are then provided to step S 605  in  FIG. 6 . Subsequently the process ends. 
         [0069]      FIG. 8  is a block diagram of a computer system  1201  upon which an embodiment of the present invention may be implemented. The computer system  1201  may be programmed to implement a computer based video conferencing endpoint that includes a video encoder or decoder for processing real time video images. The computer system  1201  includes a bus  1202  or other communication mechanism for communicating information, and a processor  1203  coupled with the bus  1202  for processing the information. The computer system  1201  also includes a main memory  1204 , such as a random access memory (RAM) or other dynamic storage device (e.g., dynamic RAM (DRAM), static RAM (SRAM), and synchronous DRAM (SDRAM)), coupled to the bus  1202  for storing information and instructions to be executed by processor  1203 . In addition, the main memory  1204  may be used for storing temporary variables or other intermediate information during the execution of instructions by the processor  1203 . The computer system  1201  further includes a read only memory (ROM)  1205  or other static storage device (e.g., programmable ROM (PROM), erasable PROM (EPROM), and electrically erasable PROM (EEPROM)) coupled to the bus  1202  for storing static information and instructions for the processor  1203 . 
         [0070]    The computer system  1201  also includes a disk controller  1206  coupled to the bus  1202  to control one or more storage devices for storing information and instructions, such as a magnetic hard disk  1207 , and a removable media drive  1208  (e.g., floppy disk drive, read-only compact disc drive, read/write compact disc drive, compact disc jukebox, tape drive, and removable magneto-optical drive). The storage devices may be added to the computer system  1201  using an appropriate device interface (e.g., small computer system interface (SCSI), integrated device electronics (IDE), enhanced-IDE (E-IDE), direct memory access (DMA), or ultra-DMA). 
         [0071]    The computer system  1201  may also include special purpose logic devices (e.g., application specific integrated circuits (ASICs)) or configurable logic devices (e.g., simple programmable logic devices (SPLDs), complex programmable logic devices (CPLDs), and field programmable gate arrays (FPGAs)). 
         [0072]    The computer system  1201  may also include a display controller  1209  coupled to the bus  1202  to control a display  1210 , such as a cathode ray tube (CRT), for displaying information to a computer user. The computer system includes input devices, such as a keyboard  1211  and a pointing device  1212 , for interacting with a computer user and providing information to the processor  1203 . The pointing device  1212 , for example, may be a mouse, a trackball, or a pointing stick for communicating direction information and command selections to the processor  1203  and for controlling cursor movement on the display  1210 . In addition, a printer may provide printed listings of data stored and/or generated by the computer system  1201 . 
         [0073]    The computer system  1201  performs a portion or all of the processing steps of the invention in response to the processor  1203  executing one or more sequences of one or more instructions contained in a memory, such as the main memory  1204 . Such instructions may be read into the main memory  1204  from another computer readable medium, such as a hard disk  1207  or a removable media drive  1208 . One or more processors in a multi-processing arrangement may also be employed to execute the sequences of instructions contained in main memory  1204 . In alternative embodiments, hard-wired circuitry may be used in place of or in combination with software instructions. Thus, embodiments are not limited to any specific combination of hardware circuitry and software. 
         [0074]    As stated above, the computer system  1201  includes at least one computer readable medium or memory for holding instructions programmed according to the teachings of the invention and for containing data structures, tables, records, or other data described herein. Examples of computer readable media are compact discs, hard disks, floppy disks, tape, magneto-optical disks, PROMs (EPROM, EEPROM, flash EPROM), DRAM, SRAM, SDRAM, or any other magnetic medium, compact discs (e.g., CD-ROM), or any other optical medium, punch cards, paper tape, or other physical medium with patterns of holes, a carrier wave (described below), or any other medium from which a computer can read. 
         [0075]    Stored on any one or on a combination of computer readable media, the present invention includes software for controlling the computer system  1201 , for driving a device or devices for implementing the invention, and for enabling the computer system  1201  to interact with a human user (e.g., print production personnel). Such software may include, but is not limited to, device drivers, operating systems, development tools, and applications software. Such computer readable media further includes the computer program product of the present invention for performing all or a portion (if processing is distributed) of the processing performed in implementing the invention. 
         [0076]    The computer code devices of the present invention may be any interpretable or executable code mechanism, including but not limited to scripts, interpretable programs, dynamic link libraries (DLLs), Java classes, and complete executable programs. Moreover, parts of the processing of the present invention may be distributed for better performance, reliability, and/or cost. 
         [0077]    The term “computer readable medium” as used herein refers to any medium that participates in providing instructions to the processor  1203  for execution. A computer readable medium may take many forms, including but not limited to, non-volatile media, volatile media, and transmission media. Non-volatile media includes, for example, optical, magnetic disks, and magneto-optical disks, such as the hard disk  1207  or the removable media drive  1208 . Volatile media includes dynamic memory, such as the main memory  1204 . Transmission media includes coaxial cables, copper wire and fiber optics, including the wires that make up the bus  1202 . Transmission media also may also take the form of acoustic or light waves, such as those generated during radio wave and infrared data communications. 
         [0078]    Various forms of computer readable media may be involved in carrying out one or more sequences of one or more instructions to processor  1203  for execution. For example, the instructions may initially be carried on a magnetic disk of a remote computer. The remote computer can load the instructions for implementing all or a portion of the present invention remotely into a dynamic memory and send the instructions over a telephone line using a modem. A modem local to the computer system  1201  may receive the data on the telephone line and use an infrared transmitter to convert the data to an infrared signal. An infrared detector coupled to the bus  1202  can receive the data carried in the infrared signal and place the data on the bus  1202 . The bus  1202  carries the data to the main memory  1204 , from which the processor  1203  retrieves and executes the instructions. The instructions received by the main memory  1204  may optionally be stored on storage device  1207  or  1208  either before or after execution by processor  1203 . 
         [0079]    The computer system  1201  also includes a communication interface  1213  coupled to the bus  1202 . The communication interface  1213  provides a two-way data communication coupling to a network link  1214  that is connected to, for example, a local area network (LAN)  1215 , or to another communications network  1216  such as the Internet. For example, the communication interface  1213  may be a network interface card to attach to any packet switched LAN. As another example, the communication interface  1213  may be an asymmetrical digital subscriber line (ADSL) card, an integrated services digital network (ISDN) card or a modem to provide a data communication connection to a corresponding type of communications line. Wireless links may also be implemented. In any such implementation, the communication interface  1213  sends and receives electrical, electromagnetic or optical signals that carry digital data streams representing various types of information. 
         [0080]    The network link  1214  typically provides data communication through one or more networks to other data devices. For example, the network link  1214  may provide a connection to another computer through a local network  1215  (e.g., a LAN) or through equipment operated by a service provider, which provides communication services through a communications network  1216 . The local network  1214  and the communications network  1216  use, for example, electrical, electromagnetic, or optical signals that carry digital data streams, and the associated physical layer (e.g., CAT 5 cable, coaxial cable, optical fiber, etc). The signals through the various networks and the signals on the network link  1214  and through the communication interface  1213 , which carry the digital data to and from the computer system  1201  maybe implemented in baseband signals, or carrier wave based signals. The baseband signals convey the digital data as unmodulated electrical pulses that are descriptive of a stream of digital data bits, where the term “bits” is to be construed broadly to mean symbol, where each symbol conveys at least one or more information bits. The digital data may also be used to modulate a carrier wave, such as with amplitude, phase and/or frequency shift keyed signals that are propagated over a conductive media, or transmitted as electromagnetic waves through a propagation medium. Thus, the digital data may be sent as unmodulated baseband data through a “wired” communication channel and/or sent within a predetermined frequency band, different than baseband, by modulating a carrier wave. The computer system  1201  can transmit and receive data, including program code, through the network(s)  1215  and  1216 , the network link  1214  and the communication interface  1213 . Moreover, the network link  1214  may provide a connection through a LAN  1215  to a mobile device  1217  such as a personal digital assistant (PDA) laptop computer, or cellular telephone. 
         [0081]    Obviously, numerous modifications and variations of the present disclosure are possible in light of the above teachings. It is therefore to be understood that within the scope of the appended claims, the invention may be practiced otherwise than as specifically described herein. 
         [0082]    Obviously, numerous modifications and variations of the present invention are possible in light of the above teachings. It is therefore to be understood that within the scope of the appended claims, the invention may be practiced otherwise than as specifically described herein.