1. Field of the Invention
The present invention relates to image data filtering.
2. Background Art
An increasing number of devices are being produced that are enabled to capture and display images. For example, mobile devices, such as cell phones, are increasingly being equipped with cameras to capture images, including still snapshots and motion video images. Images captured by such devices can frequently be viewed on displays of the devices, as well as being transferred from the devices for viewing elsewhere. To view the images on relatively small devices, the images typically must be viewed on small display screens that are not capable of viewing the full resolution of the captured images. Thus, such devices must include at least limited image processing capability to down-size the images for viewing on the small display screens.
Many mobile devices have limited processing capability due to cost, power consumption, and size constraints. However, the processing of captured images, especially the processing of video, is very computationally intensive. For example, many mobile devices have cameras capable of capturing images of 2 MegaPixels (MPel) or more. Thus, a processor of such a mobile device must be capable of processing a large amount of data for each captured image. Furthermore, encoding and decoding (e.g., QCIF) of image data may need to be performed by the processor at frame rates such as 15 fps and 30 fps, respectively, as well as the performance of other functions.
To deal with such high-resource demanding tasks, mobile device developers have resorted to including high-powered processing chips in the devices, which have higher clock rates and larger on-chip cache memory, or to including dedicated video/image processing chips. Such approaches result in higher cost devices with higher levels of power consumption, which may not be desirable in battery powered mobile devices.
Thus, ways are desired for handling an image processing workload in devices, such as mobile devices, without significantly raising device costs and power consumption levels.
Methods, systems, and apparatuses for the averaging of packed data words are provided. The data words may contain any type of data, such as image data. Packed data words have multiple data portions. For a packed data word representative of a captured image pixel, the data portions may each relate to specific color data of the pixel. In aspects of the present invention, a pair of packed data words may be averaged together in packed format. This is an advantage over conventional averaging techniques, which must unpack and average each data portion separately.
In an example aspect, a first data word containing first image data is received. A second data word containing second image data is received. A logical AND of the first data word and the second data word is performed to generate a third data word. A logical exclusive OR (XOR) of the first data word and the second data word is performed to generate a fourth data word. A right shift of the fourth data word is performed. The third data word and the right shifted fourth data word are summed to generate a fifth data word that is an average of the first and second data words.
In one further example aspect, prior to performing the right shift of the fourth data word, right-most 1 bits of each color-specific data portion of the fourth data word may be changed to 0 bits. This eliminates unwanted shifting of 1 bits from one color-specific data portion to an adjacent color specific data portion.
In a still further aspect, the right-most 1 bits of each color-specific data portions of the fourth data word may be copied to a sixth data word prior to performing the right shift of the fourth data word. This may be performed to save fractional information that would otherwise be lost, and that may be used in subsequent averaging operations.
In another example aspect, a system for averaging image data information is provided. An AND logic is configured to perform a logical AND of a first data word containing first image data and a second data word containing second image data to generate a third data word. An exclusive OR (XOR) logic is configured to perform a logical XOR of the first data word and the second data word to generate a fourth data word. A right shifter is configured to perform a right shift of the fourth data. A summer is configured to sum the third data word and the right shifted fourth data word to generate a fifth data word that is an average of the first and second data words.
In a further example aspect, the system may include a bit mask logic coupled between the XOR logic and the right shifter. The bit mask logic is configured to mask any right-most 1 bits of color-specific data portions of the fourth data word to 0 bits.
In a still further aspect, the system may include a bit copy logic coupled to an output of the XOR logic. The bit copy logic is configured to copy any right-most 1 bits of color-specific data portions of the fourth data word to a sixth data word.
These and other objects, advantages and features will become readily apparent in view of the following detailed description of the invention. Note that the Summary and Abstract sections may set forth one or more, but not all exemplary embodiments of the present invention as contemplated by the inventor(s).
The accompanying drawings, which are incorporated herein and form a part of the specification, illustrate the present invention and, together with the description, further serve to explain the principles of the invention and to enable a person skilled in the pertinent art to make and use the invention.
The present invention will now be described with reference to the accompanying drawings. In the drawings, like reference numbers indicate identical or functionally similar elements. Additionally, the left-most digit(s) of a reference number identifies the drawing in which the reference number first appears.
Introduction
The present specification discloses one or more embodiments that incorporate the features of the invention. The disclosed embodiment(s) merely exemplify the invention. The scope of the invention is not limited to the disclosed embodiment(s). The invention is defined by the claims appended hereto.
References in the specification to “one embodiment,” “an embodiment,” “an example embodiment,” etc., indicate that the embodiment described may include a particular feature, structure, or characteristic, but every embodiment may not necessarily include the particular feature, structure, or characteristic. Moreover, such phrases are not necessarily referring to the same embodiment. Further, when a particular feature, structure, or characteristic is described in connection with an embodiment, it is submitted that it is within the knowledge of one skilled in the art to effect such feature, structure, or characteristic in connection with other embodiments whether or not explicitly described.
Furthermore, it should be understood that spatial descriptions (e.g., “above,” “below,” “up,” “left,” “right,” “down,” “top,” “bottom,” “vertical,” “horizontal,” etc.) used herein are for purposes of illustration only, and that practical implementations of the structures described herein can be spatially arranged in any orientation or manner.
Image Processing in Mobile Devices
Embodiments of the present invention relate to image processing performed in devices. For example, embodiments include mobile devices where image processing must be performed with limited resources. Types of such mobile devices include mobile phones (e.g., cell phones), handheld computing devices (e.g., personal digital assistants (PDAs), BLACKBERRY devices, PALM devices, etc.), handheld music players (e.g., APPLE IPODs, MP3 players, etc.), and further types of mobile devices. Such mobile devices may include a camera used to capture images, such as still images and video images. The captured images are processed internal to the mobile device.
As shown in
Battery 122 provides power to the components of mobile device 100 that require power. Battery 122 may be any type of battery, including one or more rechargeable and/or non-rechargeable batteries.
Keypad 126 is a user interface device that includes a plurality of keys enabling a user of mobile device 100 to enter data, commands, and/or to otherwise interact with mobile device 100. Mobile device 100 may include additional and/or alternative user interface devices to keypad 126, such as a touch pad, a roller ball, a stick, a click wheel, and/or voice recognition technology.
Image sensor device 102 is an image capturing device. For example, image sensor device 102 may include an array of photoelectric light sensors, such as a charge coupled device (CCD) or a CMOS (complementary metal-oxide-semiconductor) sensor device. Image sensor device 102 typically includes a two-dimensional array of sensor elements organized into rows and columns. For example,
A/D 104 receives analog image signal 128, converts analog image signal 128 to digital form, and outputs a digital image signal 130. Digital image signal 130 includes digital representations of each of the analog values generated by the pixel sensors, and thus includes a digital representation of the captured image. For instance,
The pixel pattern shown for image data 300 in
Image processor 106 receives digital image signal 130. Image processor 106 performs image processing of the digital pixel sensor data received in digital image signal 130. For example, image processor 106 may be used to generate pixels of all three colors at all pixel positions when a Bayer pattern image is output by image sensor device 102. Image processor 106 may perform a demosaicing algorithm to interpolate red, green, and blue pixel data values for each pixel position of the array of image data 200 shown in
Image processor 106 performs processing of digital image signal 130, such as described above, and generates an image processor output signal 132. Image processor output signal 132 includes processed pixel data values that correspond to the image captured by image sensor device 102. Image processor output signal 132 includes color channels 502, 504, and 506, which each include a corresponding full array of pixel data values, respectively representing red, green, and blue color images corresponding to the captured image.
Note that in an embodiment, two or more of image sensor device 102, A/D 104, and image processor 106 may be included together in a single IC chip, such as a CMOS chip, particularly when image sensor device 102 is a CMOS sensor, or may be in two or more separate chips. For instance,
CPU 114 is shown in
Microphone 110 and audio CODEC 112 may be present in some applications of mobile device 100, such as mobile phone applications and video applications (e.g., where audio corresponding to the video images is recorded). Microphone 110 captures audio, including any sounds such as voice, etc. Microphone 110 may be any type of microphone. Microphone 110 generates an audio signal that is received by audio codec 112. The audio signal may include a stream of digital data, or analog information that is converted to digital form by an analog-to-digital (A/D) converter of audio codec 112. Audio codec 112 encodes (e.g., compresses) the received audio of the received audio signal. Audio codec 112 generates an encoded audio data stream that is received by CPU 114.
CPU 114 receives image processor output signal 132 from image processor 106 and receives the audio data stream from audio codec 112. As shown in
When present, RF transceiver 116 is configured to enable wireless communications for mobile device 116. For example, RF transceiver 116 may enable telephone calls, such as telephone calls according to a cellular protocol. RF transceiver 116 may include a frequency up-converter (transmitter) and down-converter (receiver). For example, RF transceiver 116 may transmit RF signals to antenna 118 containing audio information corresponding to voice of a user of mobile device 100. RF transceiver 116 may receive RF signals from antenna 118 corresponding to audio information received from another device in communication with mobile device 100. RF transceiver 116 provides the received audio information to CPU 114. In another example, RF transceiver 116 may be configured to receive television signals for mobile device 100, to be displayed by display 120. In another example, RF transceiver 116 may transmit images captured by image sensor device 102, including still and/or video images, from mobile device 100. In another example, RF transceiver 116 may enable a wireless local area network (WLAN) link (including an IEEE 802.11 WLAN standard link), and/or other type of wireless communication link.
CPU 114 provides audio data received by RF transceiver 116 to audio codec 112. Audio codec 112 performs bit stream decoding of the received audio data (if needed) and converts the decoded data to an analog signal. Speaker 108 receives the analog signal, and outputs corresponding sound.
Image processor 106, audio codec 112, and CPU 114 may be implemented in hardware, software, firmware, and/or any combination thereof. For example, CPU 114 may be implemented as a proprietary or commercially available processor, such as an ARM (advanced RISC machine) core configuration, that executes code to perform its functions. Audio codec 112 may be configured to process proprietary and/or industry standard audio protocols. Image processor 106 may be a proprietary or commercially available image signal processing chip, for example.
Display 120 receives image data from CPU 114, such as image data generated by image processor 106. For example, display 120 may be used to display images captured by image sensor device 102. Display 120 may include any type of display mechanism, including an LCD (liquid crystal display) panel or other display mechanism.
Depending on the particular implementation, image processor 106 formats the image data output in image processor output signal 132 according to a proprietary or known video data format. Display 120 is configured to receive the formatted data, and to display a corresponding captured image. In one example, image processor 106 may output a plurality of data words, where each data word corresponds to an image pixel. A data word may include multiple data portions that correspond to the various color channels for an image pixel. Any number of bits may be used for each color channel, and the data word may have any length.
For instance, in one standard implementation, the data word may be a 24-bit data word that includes 8 bits for the red color channel, 8 bits for the green color channel, and 8 bits for the blue color channel. In another standard implementation, as shown in
In some implementations, display 120 has a display screen that is not capable of viewing the full resolution of the images captured by image sensor device 102. Image sensor devices 102 may have various sizes, including numbers of pixels in the hundreds of thousand, or millions, such as 1 megapixel (Mpel), 2 Mpels, 4 Mpels, 8 Mpels, etc.). Display 120 may be capable of displaying relatively smaller image sizes. In one example, an image captured by image sensor device 102 may be 640 pixels by 480 pixels in size (307,200 pixels). In contrast, a display screen of display 120 may be 128 pixels by 96 pixels in size (12,288 pixels). Thus, display 120 (having a 12,288 pixel screen size) is not capable of displaying the entire captured image (having 307,200 pixels) at once.
To accommodate such differences between a size of display 120 and a size of captured images, CPU 114 (e.g., image processor 136) must down-size a captured image received from image processor 106 before providing the image to display 120. This is illustrated in
Such image downsizing may be performed by a subsampling process. In computer graphics, subsampling is a process used to reduce an image size. Subsampling is a type of image scaling, and may alter the appearance of an image or reduce the quantity of information required to store an image. Two types of subsampling are replacement and interpolation. The replacement technique selects a single pixel from a group and uses it to represent the entire group. The interpolation technique uses a statistical sample of the group (such as a mean) to create a new representation of the entire group.
In a subsampling process used in the current example, a captured image pixel array of 307,200 pixel data values may be divided into a plurality of 5 by 5 sections having 25 pixels each. An averaging function can be performed on the 25 pixel data values of each section to generate a single representative pixel for display for each section. In this manner, an averaged pixel is generated for each section of 25 pixels, creating an image of 12,288 averaged pixels for display by display 120. However, performing an averaging function on 25 pixel data values requires a large number of operations. For example, the following equation (Equation 1) represents an averaging function for a number P of pixels:
where:
To handle the increased processing load, mobile devices 100 typically are provided with high performance CPUs and/or special purpose image processing chips, which are expensive and consume greater amounts of power, in an undesired manner. Embodiments of the present invention overcome deficiencies of conventional mobile devices. Embodiments enable the down-sizing and display of captured images on mobile devices, while reducing CPU performance and power consumption requirements. Example embodiments are described in the following section.
The example embodiments described herein are provided for illustrative purposes, and are not limiting. The examples described herein may be adapted to any type of mobile device, fixed location devices, and to other device types. Furthermore, additional structural and operational embodiments, including modifications/alterations, will become apparent to persons skilled in the relevant art(s) from the teachings herein.
Embodiments relate to filtering operations performed on data, such as captured image data. Frequently, image data to be filtered comes in a packed format. Typical filtering applications must unpack the data before processing the data, which takes extra processing time. Embodiments of the present invention enable efficient processing of such packed format data, by actually processing the data while still in packed format.
Embodiments of the present invention are applicable to all packed data formats, including True color format, where 8 bits of each of red, green, and blue data are present. Another applicable example packed data format is called RGB565. RGB565 is frequently used in imaging applications as a display data format for low- to middle-tier display devices. In RGB565, red channel data takes 5 bits, green takes 6 bits and blue takes 5 bits.
Image filtering applications frequently require averaging processes to be performed. For example, as described above with respect to
In step 902, a first data word containing first image data is received. For example, the received first data word may be first data word 600a shown in
In step 904, a second data word containing second image data is received. For example, the received second data word may be second data word 600b shown in
In step 906, a data portion for a red color is unpacked from a first data word. First data portion 602a of first data word 600a, having red color data, is unpacked from first data word 600a, and is copied to another register. First data portion 602a is right shifted to the right-most position of the register so that it may be processed. For example, first data portion 602a may be copied into, and right-shifted in a first register 1002, shown in
In step 908, a data portion for the red color is unpacked from a second data word. Second data portion 602b of second data word 600b, having red color data, is unpacked from second data word 600b, and is copied to a fourth register. Second data portion 602b is right shifted to the right-most position of the register so that it may be processed. For example, first data portion 602b of second data word 600b may be copied into, and right-shifted in a second register 1004, shown in
In step 910, an averaging operation is performed on the unpacked data portions to generate an averaged data portion for the red color. For example,
To generate an average of data portions 602a and 602b, averaging logic 1008 may perform a typical averaging operation, such as Equation 2 shown below:
Average=(data portion 602a+data portion 602b)/2 Equation 2
According to Equation 2, data portions 602a and 602b are summed. The resulting sum is divided by 2 to obtain an average data portion, which is for red data in this example.
In step 912, the averaged data portion for the red color is packed into an output data word. The average of data portions 602a and 602b (for red color) is left-shifted back to its packed position (shown in
In step 914, steps 906, 908, 910, and 912 are repeated for green and blue color data portions of the first and second data words. For each color data portion of data words 600a and 600b, steps 906, 908, 910, and 912 of flowchart 900 must be repeated to generate an average. According to steps 906 and 908, each of red, green, and blue data portions 602a-606a and 602b-606b must be unpacked from their respective data word into one of registers 1002 and 1004 for separate processing. Red and green data portions 602a, 602b, 604a, and 604b are right-shifted in registers 1002 and 1004 prior to averaging. For step 910, averaging logic 1008 performs an averaging function according to Equation 2 to average each of data portion pairs 602a and 602b, 604a and 604b, and 606a and 606b. Each averaging function may take multiple processing cycles. For example, the addition process of Equation 2 may require one or more processing cycles, and the divide-by-2 process of Equation 2 may require one or more processing cycles. According to step 912, the averaged data portions resulting from step 910 for red, green, and blue are each individually packed into register 1006 (including the left-shifting of the red and green averaged data portions to their packed positions) to create an output average, multi-color RGB565 format data word representing a single image pixel.
Thus, conventionally generating an average for a pair of pixel data values is a computationally intensive process, requiring multiple data unpacking operations (for each color), right-shifting operations for red and green data, an averaging operation, left-shifting operations for the red and green data, and packing of each resulting average data portion into an output data word. Embodiments of the present invention more efficiently perform an averaging of pairs of data words, to save processing cycles and image processing time. In embodiments, data word averaging is performed in a packed manner, which eliminates data portion packing, right-shifting, left-shifting, and unpacking operations to reduce an overall processing load.
For example,
Averaging logic 1108 generates average data word 1110, having a first portion 1102 containing an average of the red data portions 602a and 602b, a second portion 1104 containing an average of the green data portions 604a and 604b, and a third portion 1106 containing an average of the blue data portions 606a and 606b. Average data word 1110 is generated by averaging logic 1108 in a packed format, where data portions 1102, 1104, and 1106 are generated at the same time, and thus are not separately generated and packed one at a time.
Averaging logic 1108 may be implemented in hardware, software, firmware, or any combination thereof. For example, in an embodiment, averaging logic 1108 may be implemented as one or more blocks/modules of code that is executed by a processor, such as CPU 114 shown in
Flowchart 1200 begins with step 1202. In step 1202, a first data word containing first image data is received. For example, as shown in
In step 1204, a second data word containing second image data is received. As shown in
In step 1206, a logical AND of the first data word and the second data word is performed to generate a third data word. For example, as shown in
Examples of first and second data words 600a and 600b are shown below (in both decimal and binary form for ease of illustration) in RGB565 format:
For these example input values, AND logic 1304 generates third data word 1318 to have the value shown below:
In step 1208, a logical exclusive OR (XOR) of the first data word and the second data word is performed to generate a fourth data word. For example, as shown in
For instance, for the examples of first and second data words 600a and 600b provided above, XOR logic 1306 generates fourth data word 1320 to have the value shown below:
In step 1210, a right shift of the fourth data word is performed. For example, as shown in
For instance, for the example value of fourth data word provided above, right shifter 1308 generates right shifted fourth data word 1322 to have the value shown below:
In step 1212, the third data word and the right shifted fourth data word are summed to generate a fifth data word that is an average of the first and second data words. For example, as shown in
For instance, for the example values of third data word 1318 and right shifted data word 1322 provided above, summer 1310 generates fifth data word 1324 to have the value shown below:
Fifth data word 1324 is an average of first and second data words 600a and 600b, for each color data portion. As shown in
In the above example, fifth data word 1324 contains averaged values for each of the red, green, and blue data portions of first and second data words 600a and 600b. In the current example, first data portion 1326 contains 14 (decimal), second data portion 1328 contains 54 (decimal), and third data portion 1330 contains 8 (decimal). For illustrative purposes, the average values of each of the example values for the red, green, and blue data portions of first and second data words 600a and 600b are shown below calculated according to conventional Equation 2, as follows:
The average values calculated conventionally according to Equation 2 (Red=14, Green=54, Blue=8) match the average values generated according to system 1300 shown in
Averaging logic 1302 of
For example, in an embodiment, averaging logic 1502 shown in
An example of the operation of averaging logic 1502 with bit mask logic 1504 is illustrated below, using the following example value of first and second data words 600a and 600b (shown in both decimal and binary form) in RGB565 format:
The green data portion (51) of first data word 600a is odd (has a 1 bit in its right-most bit position), and the red data portion (23) and blue data portion (13) of second data word 600b are odd. The other data portions are even. Using these example values as inputs, AND logic 1304 generates third data word 1318 to have the value shown below:
Furthermore, XOR logic 1306 generates fourth data word 1320 to have the value shown below:
As shown above, each color specific data portion of fourth data word 1320 has a 1 bit in the right-most position (e.g., a red portion having a value of 19, a green portion having a value of 9, and a blue portion having a value of 15).
If fourth data word 1320 shown above is right shifted by one bit, a non-zero bit of the red portion would be shifted into the green portion, a non-zero bit of the green portion would be shifted into the blue portion, and a non-zero bit of the blue portion would be shifted out of fourth data word 1320. To prevent this, bit mask logic 1504 masks any right-most 1 bits of color-specific data portions of fourth data word 1320 to 0 bits. For example, bit mask logic 1504 may apply the following bit mask to fourth data word 1320:
The bit mask shown above is ANDed with fourth data word 1320 by bit mask logic 1504 to generate the following bit masked version of fourth data word 1320, referred to as bit masked fourth data word 1506:
Bit mask logic 1320 changes the right-most bit of each color data portion to a 0 bit. Right shifter 1308 receives bit masked fourth data word 1506 and performs the right shift on bit masked fourth data word 1506. Right shifter 1308 generates a right shifted fourth data word 1508 to have the decimal and binary values shown below:
For these example values of third data word 1318 and right shifted data word 1508, summer 1310 generates a fifth data word 1510 having the value shown below:
Fifth data word 1510 is a non-fractional average of first and second data words 600a and 600b, for each color data portion. Because bit mask logic 1320 changes the right-most bit of each color data portion of fourth data word 1320 to a 0 bit, a fractional portion of the average of each color data portion is lost. To illustrate this, Equation 2 is used below to generate a conventional average of each of the red, green, and blue data portions of first and second data words 600a and 600b, as follows, for the current example:
Each of these average values generated by Equation 2 has a fractional portion—0.5, as well as a non-fractional portion (e.g., 13, 54, and 7). Averaging logic 1502 is configured to generate the non-fractional portion, while removing the fractional portion. Thus, averaging module 1502 may be used in embodiments where there is tolerance for some inaccuracy, where a fractional portion of an average is not needed.
For example, in an embodiment, an averaging logic 1702 shown in
In this example, because each color-specific data portion of fourth data word 1320 includes a right-most 1 bit, sixth data word 1706 receives a 1 bit in each data portion.
Bit copy logic 1704 may be configured in various ways to perform its functions. For example, in an embodiment, bit copy logic 1704 may apply the following bit mask to fourth data word 1320:
The bit mask shown above is ANDed with fourth data word 1320 by bit copy logic 1704 to generate sixth data word 1706. Alternatively, bit copy logic 1704 may be configured in other ways.
By containing the right-most 1 bits of color-specific data portions of fourth data word 1320, sixth data word 1706 can contain a fractional portion of each color specific data portion of the generated average (fifth data word 1510). For instance, for the example average data portion values described above with respect to
AND logic 1304, XOR logic 1306, bit copy logic 1704, bit mask logic 1504, right shifter 1308, and summer 1310 may each be implemented in hardware, software, firmware, or any combination thereof. For example, in an embodiment, AND logic 1304, XOR logic 1306, bit copy logic 1704, bit mask logic 1504, right shifter 1308, and summer 1310 may be implemented as one or more blocks/modules of code that is executed by a processor, such as CPU 114 shown in
The above described flowcharts and averaging logic embodiments may be used in a recursive fashion to average/low-pass filter groups of more than two pixels. The flowcharts and averaging logic embodiments may be arranged in any recursive fashion, as would be apparent to persons skilled in the relevant art(s). A particular recursive arrangement may give each input data word equal weighting, or different weighting, depending on the recursive configuration.
For example,
System 1800 includes a first averaging logic 1802a, a second averaging logic 1804a, and a third averaging logic 1810c. Averaging logics 1802a-1802c can be the same averaging logic used in a recursive fashion to implement system 1800, or can be separate averaging logic blocks configured as shown. Averaging logics 1802a-1802c can be any of averaging logics 1108, 1302, 1502, and 1702 shown in
As shown in
As shown in
A first summer 1902 receives first and second fractional data words 1706a and 1706b, and generates a summed fractional data word 1906. A second summer 1904 receives summed fractional data word 1906, and third averaged data word 151c. In an embodiment, second summer 1904 is configured to determine a non-fractional portion of summed fractional data word 1906. For example, in an embodiment, second summer 1904 may perform a bit-wise AND between of first and second fractional data words 1706a and 1706b to determine the non-fractional portion of summed fractional data word 1906. Second summer 1904 sums the determined non-fractional portion of summed fractional data word 1906 with third averaged data word 1510c to generate a fourth averaged data word 1908. Fourth averaged data word 1908 may be a more accurate average of data words 600a-600d than is third averaged data word 1510c, because it sums in a non-fractional portion (if one exists) of a sum of the fractional portions of the averaging operations provided by first and second averaging logics 1702a and 1702b. Second summer 1904 may be configured to determine a fractional portion of summed fractional data word 1906, and to retain the fractional portion for subsequent averaging operations, if desired.
In this document, the terms “computer program medium” and “computer usable medium” are used to generally refer to media such as a removable storage unit, a hard disk installed in hard disk drive, and signals (i.e., electronic, electromagnetic, optical, or other types of signals capable of being received by a communications interface). These computer program products are means for providing software to a computer system and to storing software in a computer system or other device. The invention, in an embodiment, is directed to such computer program products.
In an embodiment where aspects of the present invention are implemented using software/firmware, the software/firmware may be stored in a computer program product and loaded into a computer system or other device using a removable storage drive, hard drive, or communications interface. The computer system or other device may execute the software/firmware from storage such as a hard drive or memory device (e.g., a ROM device such as an electrically erasable ROM, electrically programmable ROM, a RAM device such as a static RAM, dynamic RAM, etc.). This control logic software/firmware, when executed by a processor, causes the processor to perform the functions of the invention as described herein.
According to an example embodiment, a mobile device may execute computer-readable instructions to performing averaging functions, as further described elsewhere herein (e.g., as described with respect to flowchart 1200 of
While various embodiments of the present invention have been described above, it should be understood that they have been presented by way of example only, and not limitation. It will be apparent to persons skilled in the relevant art that various changes in form and detail can be made therein without departing from the spirit and scope of the invention. Thus, the breadth and scope of the present invention should not be limited by any of the above-described exemplary embodiments, but should be defined only in accordance with the following claims and their equivalents.
Number | Name | Date | Kind |
---|---|---|---|
5774600 | Strongin et al. | Jun 1998 | A |
5883824 | Lee et al. | Mar 1999 | A |
6512523 | Gross | Jan 2003 | B1 |
7035331 | Liao et al. | Apr 2006 | B2 |
7177889 | Chatterjee | Feb 2007 | B2 |
7558816 | Saulsbury et al. | Jul 2009 | B2 |
7636746 | Chatterjee | Dec 2009 | B2 |
Number | Date | Country | |
---|---|---|---|
20090097771 A1 | Apr 2009 | US |