This description relates to employing various techniques to optimize the production of distance field representations to efficiency prepare textual content for presentation.
The astronomical growth of available textual content on the Internet has lead users to demand more variety in expressing this content. Correspondingly, the number of available fonts that can represent this textual content has grown. Along with the many different types of fonts, each font is typically presentable with different typographical emphasis (e.g., bold, italic, etc.). Due to all these font variations, interest is growing to quickly and efficiently prepare fonts for presentation on an end user device.
The systems and techniques described below employ one or multiple optimization techniques to efficiently produce distance fields. By allowing a user to limit the number of points (e.g., pixels) being represented in a distance field, less operations need to be executed (e.g., some pixels can be automatically assigned visual properties rather than calculating a distance field value for mapping visual properties to the pixels). Also, the separation between a distance field point (e.g., pixel) and a character outline contour can be used to further limit executed operations. By grouping similar types of points (e.g., pixels that are horizontally closest to the outline contour), additional operations do not need to be executed thereby generating a distance field in an efficient manner while conserving computation resources (e.g., processing time, memory, etc.).
In one aspect, a computing device implemented method includes receiving a collection of line segments representing a glyph space. For each line segment in the collection, the method includes determining if each side of the line segment is located within an interior or an exterior of the glyph shape. The method includes determining one or more intersections of the line segments in the collection and an array of points of a grid. Each intersection represents a location that the respective line segment crosses a vertical or horizontal centerline of a point included in the points of the array. For each point included in the points of the array and along the centerline of the respective point, the method includes determining a distance between the respective point and one of the one or more intersections. For each point in the array of points, the method includes assigning a distance field value based on a distance that represents a minimum distance between the respective point and a nearest line segment of the line segment collection. The distance field value also represents whether the point is located within the interior or the exterior of the glyph shape.
Implementations may include one or more of the following features. The method may further include rendering the distance field values into a distance field image. Assigning the distance field value may be based on an externally specified distance. The distance may be along a first coordinate axis and limits the use of points along a second coordinate axis, which is orthogonal to the first coordinate axis, to reduce computations. The distance field values may be determined by grouping points that are closer to the collection of line segments along a coordinate axis and grouping points that are closer to the collection of line segments along an orthogonal coordinate axis. Non-crossing vectors associated with grouped points may be used to reduce computations. The coordinate axis may be a horizontal axis and the orthogonal coordinate axis may be a vertical axis. Each point in the grid may represent a pixel or a subpixel component. The method may further include assigning a visual property to each distance field value. Determining the collection of line segments to represent the glyph may use a recursive binary subdivision technique. Each point of the grid may represent a subpixel component of a pixel arranged horizontally. Each point of the grid may be represent a subpixel component of a pixel arranged vertically. Each point in the grid may represent a subpixel component of a pixel arranged diagonally. Each point in the grid may represent a subpixel component of a pixel, and an array of subpixels are aligned along an axis and another array of subpixels are aligned along an orthogonal axis.
A system includes a computing device that includes a memory configured to store instructions. The system also includes a processor to execute the instructions to perform operations that include receiving a collection of line segments representing a glyph space. For each line segment in the collection, operations include determining if each side of the line segment is located within an interior or an exterior of the glyph shape. Operations include determining one or more intersections of the line segments in the collection and an array of points of a grid. Each intersection represents a location that the respective line segment crosses a vertical or horizontal centerline of a point included in the points of the array. For each point included in the points of the array and along the centerline of the respective point, operations include determining a distance between the respective point and one of the one or more intersections. For each point in the array of points, operations include assigning a distance field value based on a distance that represents a minimum distance between the respective point and a nearest line segment of the line segment collection. The distance field value also represents whether the point is located within the interior or the exterior of the glyph shape.
Implementations may include one or more of the following features. Operations may further include rendering the distance field values into a distance field image. Assigning the distance field value may be based on an externally specified distance. The distance may be along a first coordinate axis and limits the use of points along a second coordinate axis, which is orthogonal to the first coordinate axis, to reduce computations. The distance field values may be determined by grouping points that are closer to the collection of line segments along a coordinate axis and grouping points that are closer to the collection of line segments along an orthogonal coordinate axis. Non-crossing vectors associated with grouped points may be used to reduce computations. The coordinate axis may be a horizontal axis and the orthogonal coordinate axis may be a vertical axis. Each point in the grid may represent a pixel or a subpixel component. Operations may further include assigning a visual property to each distance field value. Determining the collection of line segments to represent the glyph may use a recursive binary subdivision technique. Each point of the grid may represent a subpixel component of a pixel arranged horizontally. Each point of the grid may be represent a subpixel component of a pixel arranged vertically. Each point in the grid may represent a subpixel component of a pixel arranged diagonally. Each point in the grid may represent a subpixel component of a pixel, and an array of subpixels are aligned along an axis and another array of subpixels are aligned along an orthogonal axis.
In another aspect, a system includes a computing device that includes a memory configured to store instructions. The system also includes a processor to execute the instructions to perform operations that include receiving a collection of line segments representing a glyph space. For each line segment in the collection, operations include determining if each side of the line segment is located within an interior or an exterior of the glyph shape. Operations include determining one or more intersections of the line segments in the collection and an array of points of a grid. Each intersection represents a location that the respective line segment crosses a vertical or horizontal centerline of a point included in the points of the array. For each point included in the points of the array and along the centerline of the respective point, operations include determining a distance between the respective point and one of the one or more intersections. For each point in the array of points, operations include assigning a distance field value based on a distance that represents a minimum distance between the respective point and a nearest line segment of the line segment collection. The distance field value also represents whether the point is located within the interior or the exterior of the glyph shape.
Implementations may include one or more of the following features. Operations may further include rendering the distance field values into a distance field image. Assigning the distance field value may be based on an externally specified distance. The distance may along a first coordinate axis and limits the use of points along a second coordinate axis, which is orthogonal to the first coordinate axis, to reduce computations. The distance field values may be determined by grouping points that are closer to the collection of line segments along a coordinate axis and grouping points that are closer to the collection of line segments along an orthogonal coordinate axis. Non-crossing vectors associated with grouped points may be used to reduce computations. The coordinate axis may be a horizontal axis and the orthogonal coordinate axis may be a vertical axis. Each point in the grid may represent a pixel or a subpixel component. Operations may further include assigning a visual property to each distance field value. Determining the collection of line segments to represent the glyph may use a recursive binary subdivision technique. Each point of the grid may represent a subpixel component of a pixel arranged horizontally. Each point of the grid may be represent a subpixel component of a pixel arranged vertically. Each point in the grid may represent a subpixel component of a pixel arranged diagonally. Each point in the grid may represent a subpixel component of a pixel, and an array of subpixels are aligned along an axis and another array of subpixels are aligned along an orthogonal axis.
These and other aspects, features, and various combinations may be expressed as methods, apparatus, systems, means for performing functions, program products, etc.
Other features and advantages will be apparent from the description and the claims.
Rendering text on a screen in a timely fashion can be considerably important to viewers. Typically the rendering process calls for associating a stream of encoded numbers representing units of text, for example Unicode code points or another standard, with a representation of the corresponding text shape and producing an image of the shape which can then be imprinted on a display screen. Glyphs can be considered as the representation of a text unit's shape and this shape can be described in a number of ways. For two-dimensional glyphs, the glyph shape is often described as a collection of lines and curves. The curves can be, for example, quadratic or cubic Bezier curves since they are relatively easy to create and control, and their properties facilitate compact representations. The process of converting this collection of geometric objects into an image for subsequent display is referred to as rendering and numerous techniques have been developed for rendering a glyph representation to an image.
In one technique, distance fields are used to represent glyph shapes for rendering text. Techniques described herein provide efficient generation of distance field images from representations of glyph outlines. By reducing computational operations to produce such distance fields, both the time and computational burden can be reduced for rendering anti-aliased text with high quality at multiple aspect sizes.
To provide some context on text representations and rendering, typically a graphic artist will draw representations of glyphs in some media and these representations will be encoded into a set of geometric objects such as lines and curves. The drawings may be created with pen and paper and scanned or they may begin as digital drawings that use control points to specify the properties of the geometric objects. Generally the artist will produce a sufficient number of glyph representations to fully portray a writing system, such as Latin or Arabic or Chinese. Scripts, consisting of a number of glyphs, fully describe the text elements required for a writing system. A particular element of a script may be represented in a number of forms as long as a reader of the writing system can recognize the element. Thus, there is a wide latitude of artistic freedom in representing a script. The method of representing glyphs must accommodate such artistic latitude and the rendering system must be capable of faithfully conveying the resultant glyph images.
Quite often collections of glyph representations are grouped together into font families according to their common appearance. Thus a font family can consist of glyphs organized by weight (thin, regular, bold, etc.), width (condensed, regular, extended, etc.), slant angle (regular, italic, etc.), or style (serif, sans serif, etc.). Font families are generally stylistically consistent so as to convey a sense of unity and purpose of design and give the reader a consistent reading experience.
Referring to
Referring to
When displaying text to a screen, the glyph outline is often first scaled to a particular size relative to the pixels of the screen. The glyph fill rule determines how particular pixels are assigned a visual property (e.g., a color, grey scale, etc.), for example, by controlling the mixing between the foreground text color and the background color. Fully interior pixels are generally assigned the full amount of foreground text color. Pixels along the edge are assigned a partial mixture of foreground and background color in order to smooth the transition between the two and present a more pleasing and readable contrast. This procedure is commonly called anti-aliasing in reference to concepts from digital sampling theory.
Anti-aliasing of digital text on a screen can be achieved in numerous ways. One approach is to assign a foreground/background mixing value based on the total area of the pixel covered within the interior of the glyph outline. The rendering process determines this area based on the outline boundary as it crosses the pixel. Distance fields can also be used to determine the foreground/background mixing value by mapping the pixel's distance field value to a corresponding mixing value (or other type of visual property). A two-dimensional (2D) distance field specifies the minimum distance to an outline at every point in space. A signed 2D distance field assigns a positive or negative sign to the minimum distance based on some convention. For example, in a typical signed distance field, interior locations may be assigned positive values and exterior locations may be assigned negative values. The reverse convention (or other types of conventions) may also be applied. In both cases, a distance of zero is considered exactly on the outline boundary. Similarly, the convention may specify that distances above a certain value are considered interior and distances below a certain value are exterior while distances at exactly that value are exactly on the outline boundary.
Various degrees of anti-aliasing can be achieved by mapping a distance field value to a visual property such as a foreground/background mixing value. This mapping can take many forms, including linear and non-linear mappings, and the mapping is generally limited in space relative to the outline boundary. For digitally rendered text the nature of the mapping controls the appearance of the glyphs and their edge characteristics. For example, if the mapping describes a gradual transition from background to foreground over a larger distance, then the edge of the rendered glyph appears softer and less definitive. If the transition occurs over a smaller distance range, the glyph appearance is sharper and more definitive, trending toward being discrete or binary.
Equidistant contours within the distance field represent self-similar representations of the glyph outline. Using these contours as the basis for the anti-aliasing mapping can result in glyph appearances that are smaller, e.g., with thinner stems, or larger, e.g., with thicker stems. The location of the glyph outline is effectively shifted uniformly to an equidistant location. At the same time the transition from background to foreground can change nature. The combination of the two adjustments in glyph rendering can lead to a wide range of rendered glyph appearances from a single glyph outline.
A digitally sampled, signed 2D distance field is an image in which each pixel represents the minimum distance to the glyph outline and in which the sign of the value represents whether the pixel center is inside or outside the glyph outline, in accordance with the fill rule that is applicable to the outline. In this case the continuous values of the distance field are sampled and encoded as values in the distance field image. Note that the digital sampling does not have to correspond to a particular screen representation nor does it have to be uniform or rectangular in nature. Various discrete sampling schemes can be used and these affect the mapping between a sampled distance value and a visual property (e.g., a screen mixing value).
Similar to pixels, such techniques can also be employed for other types of points used to define distance fields. For example, sub pixels can be used as distance field points. Digital screens often use sub pixel color channels to represent a perceived color of the pixel. Typically these are red, green, and blue channels that when combined can map out a wide range of colors. These subpixel elements may consist of various topologies such as horizontal bars, vertical bars, diagonally arranged, hexagonal regions, etc. with the constraint that they uniformly cover the screen and are sufficiently small so as to not be individually perceived. Distance field values can be computed for each subpixel element and a mapping between distance field value and subpixel intensity can be established. Controlling subpixel intensities relative to the glyph outline results in a more faithful perceived representation of the glyph shape.
A common use of digitally sampled, signed 2D distance fields is to encode the distance field image into a texture map and then map that texture onto a set of vertices in 2D or three dimensional (3D) space. In doing so the texture map and distance values may be interpolated. One or more interpolation schemes may be applied. One interpolation scheme that can be employed is bilinear interpolation in which the values of four adjacent pixels are combined in each pixel. Bi-cubic interpolation is another employable technique to combine distance field values encoded into a texture map in order to more faithfully represent the underlying non-sampled distance field.
Following interpolation, the resulting distance value for a given fragment in 2D or 3D space is mapped to a visual property (e.g., a foreground/background mixing value) for the screen. Applying the mapping to interpolated distance values results in non-pixelated edges at a wide variety of scaling's between the underlying world space and screen space. This allows a distance field that has been sampled using one sampling scheme to be used as the basis for rendering text at a wide variety of text to screen size ratios, without loss of quality due to pixelization at high zoom values. Conversely, at small zoom levels, the glyph rendering appears consistent across pixel boundaries and aliasing effects due to sampling the glyph outline are minimized. These are considerable benefits of using distance fields to render text in 2D and 3D graphical applications.
Determining a sampled 2D signed distance field value can be considered a non-trivial operation, particularly when attempting to conserve computational resources. For some techniques, a set of cells are used to enclose the outline of a glyph object. Distance values for sampled pixels are reconstructed from the cells and interior/exterior regions are determined relative to the cells to determine a signed distance. However, when different parts of the glyph outline overlap each other, erroneous results may be produced in the distance field. Since overlapping contours occur in a number of fonts, such errors can frequently occur. By consolidating the overlapping region, the erroneous results can be addressed, but through a computationally expensive process.
Referring to
Referring briefly back to
In general, the distance field generator 200 employs a heuristic approach to reduce the number of unneeded computations of distance field values. For example, the distance field generator 200 attempts to compute distance field values that will actually be used while attempting to not compute distance field values that will not be used (or are simply not needed). The output of the distance field generator 200 is a signed distance field image that corresponds to the scaled outline, and the distance field values may be encoded to the image by using one or more techniques.
To initiate the creation of the distance field for outline 202, the size of output distance field image is allocated (e.g., a scale is selected by the user). In general, the contours of the outline 202 can be considered a collection of lines, curves, etc. such as quadratic Bezier curves or cubic Bezier curves. Other types of curves can be also used by the distance field generator 200 as long as the curves can be mathematically represented. As illustrated in the figure, the outline 202 includes a number of curves (e.g., curve 206) to represent the glyph (e.g., of the dollar sign character).
Referring to
Once the line segments have been produced to appropriately represent the curves of the outline (based on the tolerance), the distance field generator 200 performs calculations based upon the rows of pixels and columns of pixels that are used to represent the distance field image of the glyph outline. In this example, operations associated with the pixel rows are first executed; however, operations associated with pixel columns may be initially executed. In this example, for each line segment in a set of line segments that approximate a contour of the outline, the distance field generator 200 calculates the line segment's horizontal intersection or intersections 600 (shown in
Referring to
Once pixel row and pixel column data has been calculated and stored, the distance field generator 200 executes operations to produce a distance field. For example, the distance field generator 200 produces a 2D data grid to store the horizontal distance from each corresponding pixel to the closest contour of the outline. The extent of this 2D data grid is the same as the final distance field image produced by the distance field generator 200 based on the outline extents and the distance limit supplied.
With the 2D data grid produced, the distance field generator 200 executes operations for each row of horizontal intersections calculated and stored. In particular, the horizontal intersections are sorted from low to high. Next any intersections that do not represent a change in winding direction are removed. By executing this operation, the distance field generator 200 accounts for overlapping contours of the outline. Stepping through each row of pixels, the distance field generator 200 assigns each pixel the square of the distance from the pixel to the nearest intersection. The distance field generator 200 also tracks whether the pixel is inside or outside the contour. From these operations, a set of distances are measured horizontally for each pixel center to the nearest boundary of the outline. Referring to
The distance field generator 200 also executes similar operations for the stored vertical data. In particular, for each column of vertical intersections, the distance field generator 200 sorts the vertical intersections from low to high. The distance field generator 200 also removes any intersections that do not represent a change in winding direction. From this operation, the distance field generator also accounts for overlapping contours. Stepping through each column of pixels, the distance field generator 200 assigns each pixel the square of the distance from the pixel to nearest intersection. From these operations, a set of distances are measured vertically for each pixel center to the nearest boundary of the outline. Referring to
Referring to
Referring to
In a similar manner the generator also increments in the other vertical direction (e.g., below the pixel 1004) to determine the squared length of corresponding hypotenuses. Referring to
In order to determine the minimum distance for each pixel, the distance field generator 200 would need to execute a considerable number of operations given the number of vertical offsets for each pixel. For example, probing an entire column of pixels containing the initial pixel 1004, the performance of the generator would be slow, perhaps having a performance of O(N2). However, one or more techniques may be implemented in the distance field generator 200 to improve the performance of the distance field calculations. For example, three optimizing techniques may be used individually or in concert by the distance field generator 200 to improve performance.
For one technique, one or more conditions may be applied to limit the number of pixels for which a distance is determined (for the distance field). By reducing the number of pixels, less operations are executed by the distance field generator 200 and the distance field can be computed in a more efficient manner. For one example, the distance field values may not be calculated for field points (e.g., pixels) that are positioned at particular locations. The visual property of pixels sufficiently outside the outline may saturate to a uniform color (e.g. a color such as white), once beyond this limit, distance calculations are redundant. Similarly, pixels located inside the outline may similarly be assigned visual property (e.g., a color such as black) without needing to calculate a distance value. As such, conditions can be defined to limit the pixels for which distance field values are calculated. In some arrangements, the conditions can be user selected; for example, upper, lower, left, and right limits (e.g., thresholds) can be selected by a user (e.g., externally specified) and distance field values are not calculated for pixels located outside these limits. Similarly a user can select limits on the interior of a contour (e.g., the interior of the character “O”) for which distance field values are not calculated (and visual properties may automatically be assigned). In one arrangement, a graphical user interface (GUI) may be employed to allow a user to graphically select limits with a pointing device (e.g., select an upper pixel row and a lower pixel row with a mouse) for which distance field values are not calculated. Setting such limits (e.g., thresholds), the number of computations executed by the distance field generator 200 may be reduced and thereby increase the efficiency for generating distance fields.
Referring to
Referring to
Referring to
While the example illustrated in
Referring to
Operations of the distance field generator include receiving 1702 data representing a glyph. For example, data that represents curves of a glyph contour (e.g., quadratic Bezier curves, cubic Bezier curves, etc.) may be received for processing. Operations also include determining 1704 a collection of line segments to represent the shape of the glyph. For example, a recursive bisection using a De Casteljau's technique can be used to efficiently generate lines segments from these Bezier curves. Operations also include determining 1706 regions (e.g., interior and exterior regions) of the glyph by using the line segments and according to a fill rule. For example, a winding number can be determined and used to identify one or more regions to be filled or not filled (e.g., sides of line segments located interior or exterior to a glyph). Operations also include determining 1708 a set of line intersections between the line segments that represent the glyph shape and a linear sequence (e.g., array) of points (e.g., pixels). For example, a set of line intersections can be determined between the line segments that represent the glyph shape and center lines of horizontal rows of pixels. Similarly a set of line intersections can be determined between the line segments that represent the glyph shape and center lines of vertical columns of points (e.g., pixels). Operations also include determining 1710 a two-dimensional field of points by determining a minimum squared distance from each field point to the nearest line segment. For example, distance field a distance field for a horizontal two-dimensional field of points is generated by determining a minimum squared distance from each point in the horizontal rows of points (e.g., pixels) to nearest line segment, the minimum squared distance being determined from the respective point and the intersection point of the nearest line segment along the center line of the horizontal row of points (e.g., pixels). Similarly, a distance field for a vertical two-dimensional field of points is generated by determining a minimum squared distance from each point in the vertical column of points (e.g., pixels) to the nearest line segment, the minimum squared distance being determined from the respective point and the intersection point of the nearest line segment along the center line of the vertical column of points (e.g., pixels). In some arrangements, these operations can be considered as determining a minimum squared distance from each point in a two-dimensional field of points to a collection of line segments, the minimum squared distance being determined from the respective point to the nearest line segment (of the collection of line segments) along a coordinate axis. The distance horizontally separating a point (e.g., pixel) from a contour can limit the operations to find the minimum distance to the contour (e.g., limit the number vertical steps above and below the pixel for calculating distances). Similarly, the distance vertically separating a point (e.g., pixel) from a contour can limit the operations to find the minimum distance to the contour (e.g., limit the number horizontal steps left and right of the pixel for calculating distances).
Operations to determine the distance field also include applying 1712 one or more conditions that reduce the size of the portion of the two-dimensional field of points. For example, a user can select (e.g., graphically with a pointing device) one more limits, thresholds, etc. (e.g., an upper limit, a lower limit, and interior limit) for which minimum distances need not be computed for pixels that exceed the limits. Operations to determine the distance field also include grouping 1714 points that are closer to the collection of line segments along the coordinate axis and grouping points that are closer to the collection of line segments along an orthogonal coordinate axis. For example, pixels that are horizontally closest to the contour can be grouped and processed together, and similarly pixels that are vertically closest to the contour can be grouped and processed together. Operations of the distance field generator also include determining 1716 the square root of each minimum squared distance of each point in the portion of the two-dimensional field. For example, relatively inefficient square root operations can be executed for each pixel only after the squared minimum distances are efficiently calculated for these considerable number of pixels by using summing operations (associated with right triangles).
Computing device 1800 includes processor 1802, memory 1804, storage device 1806, high-speed interface 1808 connecting to memory 1804 and high-speed expansion ports 1810, and low speed interface 1812 connecting to low speed bus 1814 and storage device 1806. Each of components 1802, 1804, 1806, 1808, 1810, and 1812, are interconnected using various busses, and can be mounted on a common motherboard or in other manners as appropriate. Processor 1802 can process instructions for execution within computing device 1800, including instructions stored in memory 1804 or on storage device 1806 to display graphical data for a GUI on an external input/output device, including, e.g., display 1816 coupled to high speed interface 1508. In other implementations, multiple processors and/or multiple busses can be used, as appropriate, along with multiple memories and types of memory. Also, multiple computing devices 1800 can be connected, with each device providing portions of the necessary operations (e.g., as a server bank, a group of blade servers, or a multi-processor system).
Memory 1804 stores data within computing device 1800. In one implementation, memory 1804 is a volatile memory unit or units. In another implementation, memory 1804 is a non-volatile memory unit or units. Memory 1804 also can be another form of computer-readable medium (e.g., a magnetic or optical disk. Memory 1804 may be non-transitory.)
Storage device 1806 is capable of providing mass storage for computing device 1400. In one implementation, storage device 1806 can be or contain a computer-readable medium (e.g., a floppy disk device, a hard disk device, an optical disk device, or a tape device, a flash memory or other similar solid state memory device, or an array of devices, such as devices in a storage area network or other configurations.) A computer program product can be tangibly embodied in a data carrier. The computer program product also can contain instructions that, when executed, perform one or more methods (e.g., those described above.) The data carrier is a computer- or machine-readable medium, (e.g., memory 1804, storage device 1806, memory on processor 1802, and the like.)
High-speed controller 1808 manages bandwidth-intensive operations for computing device 1800, while low speed controller 1812 manages lower bandwidth-intensive operations. Such allocation of functions is an example only. In one implementation, high-speed controller 1708 is coupled to memory 1804, display 1816 (e.g., through a graphics processor or accelerator), and to high-speed expansion ports 1810, which can accept various expansion cards (not shown). In the implementation, low-speed controller 1812 is coupled to storage device 1806 and low-speed expansion port 1814. The low-speed expansion port, which can include various communication ports (e.g., USB, Bluetooth®, Ethernet, wireless Ethernet), can be coupled to one or more input/output devices, (e.g., a keyboard, a pointing device, a scanner, or a networking device including a switch or router, e.g., through a network adapter.)
Computing device 1800 can be implemented in a number of different forms, as shown in the figure. For example, it can be implemented as standard server 1820, or multiple times in a group of such servers. It also can be implemented as part of rack server system 1824. In addition or as an alternative, it can be implemented in a personal computer (e.g., laptop computer 1822.) In some examples, components from computing device 1800 can be combined with other components in a mobile device (not shown), e.g., device 1850. Each of such devices can contain one or more of computing device 1800, 1850, and an entire system can be made up of multiple computing devices 1500, 1550 communicating with each other.
Computing device 1850 includes processor 1852, memory 1864, an input/output device (e.g., display 1854, communication interface 1866, and transceiver 1868) among other components. Device 1850 also can be provided with a storage device, (e.g., a microdrive or other device) to provide additional storage. Each of components 1850, 1852, 1864, 1854, 1866, and 1868, are interconnected using various buses, and several of the components can be mounted on a common motherboard or in other manners as appropriate.
Processor 1852 can execute instructions within computing device 1850, including instructions stored in memory 1864. The processor can be implemented as a chipset of chips that include separate and multiple analog and digital processors. The processor can provide, for example, for coordination of the other components of device 1850, e.g., control of user interfaces, applications run by device 1850, and wireless communication by device 1850.
Processor 1852 can communicate with a user through control interface 1858 and display interface 1856 coupled to display 1854. Display 1854 can be, for example, a TFT LCD (Thin-Film-Transistor Liquid Crystal Display) or an OLED (Organic Light Emitting Diode) display, or other appropriate display technology. Display interface 1856 can comprise appropriate circuitry for driving display 1854 to present graphical and other data to a user. Control interface 1858 can receive commands from a user and convert them for submission to processor 1852. In addition, external interface 1862 can communicate with processor 1842, so as to enable near area communication of device 1850 with other devices. External interface 1862 can provide, for example, for wired communication in some implementations, or for wireless communication in other implementations, and multiple interfaces also can be used.
Memory 1864 stores data within computing device 1850. Memory 1864 can be implemented as one or more of a computer-readable medium or media, a volatile memory unit or units, or a non-volatile memory unit or units. Expansion memory 1874 also can be provided and connected to device 1850 through expansion interface 1872, which can include, for example, a SIMM (Single In Line Memory Module) card interface. Such expansion memory 1874 can provide extra storage space for device 1850, or also can store applications or other data for device 1850. Specifically, expansion memory 1874 can include instructions to carry out or supplement the processes described above, and can include secure data also. Thus, for example, expansion memory 1874 can be provided as a security module for device 1850, and can be programmed with instructions that permit secure use of device 1850. In addition, secure applications can be provided through the SIMM cards, along with additional data, (e.g., placing identifying data on the SIMM card in a non-hackable manner.)
The memory can include, for example, flash memory and/or NVRAM memory, as discussed below. In one implementation, a computer program product is tangibly embodied in a data carrier. The computer program product contains instructions that, when executed, perform one or more methods, e.g., those described above. The data carrier is a computer- or machine-readable medium (e.g., memory 1864, expansion memory 1874, and/or memory on processor 1852), which can be received, for example, over transceiver 1868 or external interface 1862.
Device 1850 can communicate wirelessly through communication interface 1866, which can include digital signal processing circuitry where necessary. Communication interface 1866 can provide for communications under various modes or protocols (e.g., GSM voice calls, SMS, EMS, or MMS messaging, CDMA, TDMA, PDC, WCDMA, CDMA2000, or GPRS, among others.) Such communication can occur, for example, through radio-frequency transceiver 1868. In addition, short-range communication can occur, e.g., using a Bluetooth®, WiFi, or other such transceiver (not shown). In addition, GPS (Global Positioning System) receiver module 1870 can provide additional navigation- and location-related wireless data to device 1850, which can be used as appropriate by applications running on device 1850. Sensors and modules such as cameras, microphones, compasses, accelerators (for orientation sensing), etc. may be included in the device.
Device 1850 also can communicate audibly using audio codec 1860, which can receive spoken data from a user and convert it to usable digital data. Audio codec 1860 can likewise generate audible sound for a user, (e.g., through a speaker in a handset of device 1850.) Such sound can include sound from voice telephone calls, can include recorded sound (e.g., voice messages, music files, and the like) and also can include sound generated by applications operating on device 1850.
Computing device 1850 can be implemented in a number of different forms, as shown in the figure. For example, it can be implemented as cellular telephone 1880. It also can be implemented as part of smartphone 1882, personal digital assistant, or other similar mobile device.
Various implementations of the systems and techniques described here can be realized in digital electronic circuitry, integrated circuitry, specially designed ASICs (application specific integrated circuits), computer hardware, firmware, software, and/or combinations thereof. These various implementations can include implementation in one or more computer programs that are executable and/or interpretable on a programmable system including at least one programmable processor. The programmable processor can be special or general purpose, coupled to receive data and instructions from, and to transmit data and instructions to, a storage system, at least one input device, and at least one output device.
These computer programs (also known as programs, software, software applications or code) include machine instructions for a programmable processor, and can be implemented in a high-level procedural and/or object-oriented programming language, and/or in assembly/machine language. As used herein, the terms machine-readable medium and computer-readable medium refer to a computer program product, apparatus and/or device (e.g., magnetic discs, optical disks, memory, Programmable Logic Devices (PLDs)) used to provide machine instructions and/or data to a programmable processor, including a machine-readable medium that receives machine instructions.
To provide for interaction with a user, the systems and techniques described here can be implemented on a computer having a device for displaying data to the user (e.g., a CRT (cathode ray tube) or LCD (liquid crystal display) monitor), and a keyboard and a pointing device (e.g., a mouse or a trackball) by which the user can provide input to the computer. Other kinds of devices can be used to provide for interaction with a user as well; for example, feedback provided to the user can be a form of sensory feedback (e.g., visual feedback, auditory feedback, or tactile feedback); and input from the user can be received in a form, including acoustic, speech, or tactile input.
The systems and techniques described here can be implemented in a computing system that includes a backend component (e.g., as a data server), or that includes a middleware component (e.g., an application server), or that includes a frontend component (e.g., a client computer having a user interface or a Web browser through which a user can interact with an implementation of the systems and techniques described here), or a combination of such back end, middleware, or frontend components. The components of the system can be interconnected by a form or medium of digital data communication (e.g., a communication network). Examples of communication networks include a local area network (LAN), a wide area network (WAN), and the Internet.
The computing system can include clients and servers. A client and server are generally remote from each other and typically interact through a communication network. The relationship of client and server arises by virtue of computer programs running on the respective computers and having a client-server relationship to each other.
In some implementations, the engines described herein can be separated, combined or incorporated into a single or combined engine. The engines depicted in the figures are not intended to limit the systems described here to the software architectures shown in the figures.
A number of embodiments have been described. Nevertheless, it will be understood that various modifications can be made without departing from the spirit and scope of the processes and techniques described herein. In addition, the logic flows depicted in the figures do not require the particular order shown, or sequential order, to achieve desirable results. In addition, other steps can be provided, or steps can be eliminated, from the described flows, and other components can be added to, or removed from, the described systems. Accordingly, other embodiments are within the scope of the following claims.