In order to describe the manner in which the above-recited and other advantages and features can be obtained, a more particular description of the subject matter briefly described above will be rendered by reference to specific embodiments which are illustrated in the appended drawings. Understanding that these drawings depict only typical embodiments and are not therefore to be considered to be limiting in scope, embodiments will be described and explained with additional specificity and detail through the use of the accompanying drawings in which:
Embodiments herein may comprise a special purpose or general-purpose computer including various computer hardware, as discussed in greater detail below.
Some embodiments described herein allow large or unlimited files or directories to displayed or played by a media adapter by using a ring buffer shared address range for file data so as to accommodate the unknown size of the media file. However, once data has been played, the addresses in the ring buffer shared address range can be overwritten by subsequent data. Addressing for accessing data at a media server from a media adapter can be circular such that once all data in the buffer shared address range has been accessed, the beginning of the buffer can be accessed to access new data. Additionally, some embodiments include sharing of the ring buffer address range such that different directories share the same ring buffer address range. Similarly, different media files, such as audio, video, and image files, may share the same shared address range.
Referring now to
The media server 102 is connected through a router 104 to various clients on the network. The clients on the network may include specialized media adapters configured to provide media to users. As will be discussed further herein, the media adapters may include specialized hardware optimized for providing the media to users. For example, the media adapters may include processors that are optimized for decoding compressed audio, video or image data. The media adaptors may be embodied in a number of forms as illustrated in
Each of the examples of media adapters whether embodied in an integrated unit such as with the television 106, or a standalone unit such as the DVD player 108 or self contained media adapter 112, or other media adapter is connected, in this example, through the router 104 to the media server 102. The connections between the media server 102, router 104 and media adapters may be any suitable network connection including hardwired Ethernet connections, wireless wi-fi connections, or any other suitable connection. Notably some embodiments described herein optimize wireless network connections to maintain suitability for transmitting high bit rate media files.
Referring now to
Similar to the decoder processor 202, the network processor 204 has a flash memory 212 and a DRAM memory 214 connected to it. The flash memory 212 and DRAM memory 214 are computer readable media that may include computer executable instructions that can be executed by the network processor 204. In addition, the DRAM memory 214 may store data for delivery to the decoder processor 202. For example, the network processor 204 may receive data from a data store such as a media server, such as the media server 102. This data may be stored in the DRAM memory 214 for delivery to the decoder processor 202. Such data may include for example, media, file information, directory information, or other information. In the example illustrated, the network processor 204 may be connected to a media server through one or more different network connections.
Ordinarily, a storage device connected to a host processor through an IDE bus is somewhat passive in nature. In other words, typically the IDE device accepts commands from the host processor, and can be polled by the host processor for information, but does not typically provide data to the host processor without first being prompted. In the example shown in
For example, the network processor 204 may be able to detect various conditions such as a storage device not being connected to one of the network connections 218, 220, or the inoperability of the network. The network processor 204 can thus signal on the hardware line 228 that it has data for the decoder processor. When the decoder processor 202 polls the network processor 204, the network processor 204 can provide the diagnostic information.
To retrieve directory and file information, the decoder processor 202 requests data from the network processor 204 using the IDE interface 206. As such, the decoder processor 202 requests the data by providing an address and requesting a read from that address. Some embodiments described herein implement a virtual address mapping that allows the decoder processor 202 to use a shared address range along with an address corresponding to a file and/or directory identifier to access data using typical IDE file access techniques.
Referring now to
Associated with the file space address map 300 is a directory enumeration 302. The directory enumeration 302 includes entries for files and directories. The directory enumeration 302 may be located, for example, in the DRAM 210 connected to the decoder processor 202. Entries in the directory enumeration 302 include a file name (or directory name), a type (i.e. an indicator that the entry is for a file or directory), and an identifier. For example,
Other memory saving techniques, as discussed in more detail below, are also used. For example, it can be observed in
The first high performance stream shared address range 316 and the second high performance and stream shared address range 318 operate in a fashion similar to the low performance stream shared address range 314, except that the two high performance stream shared address ranges are used for high bandwidth media such as video files. Each of the high performance stream shared address ranges may include virtual beginning and ending addresses that represent 100 GB of address space. These values are only exemplary, and other shared address ranges may be used.
In the example illustrated, each of the four shared address ranges 312, 314, 316, and 318 are circular in nature and function essentially as large shared address ring buffers. Thus, for example, if a file or directory size exceeds the addresses allocated in the shared address range, excess addressing will be done by circling back onto the beginning of the shared address range. In other words, once the decoder processor 202 needs to request data beyond what can be represented by an address range it may request the additional data beginning at the beginning again of the shared address range.
In the examples illustrated herein, the low performance stream shared address range 314 has addresses accommodating 10 GB of data. The high performance stream shared address ranges 316 and 318 have addresses accommodating 100 GB of data. The size selections in these examples were done to allow for reasonable trick mode operation. For example, the selected sizes allow for reasonable fast forward and rewind capabilities. The sizes illustrated herein are exemplary, and other sizes may be used. For example, selected sizes may allow for a few minutes of trick mode operation or an hour or more of trick mode operation if the data rate is sufficiently low and the shared address range sufficiently large.
Directories can be opened for enumeration in directory enumeration 302. One functional example of directory enumeration will now be illustrated. This example will begin assuming that no data exists in the directory enumeration 302. In one example, the media adapter 200 may be just been turned on or reset. The decoder processor 202 knows that root directory identifier is 2. The decoder processor 202 converts this identifier to a virtual address in the file space address map 300. The decoder processor 202 then issues and IDE read request to the network processor 204 to read the calculated virtual address.
The network processor 204 then performs a virtual read of the calculated address. In the illustrated example, because only a single shared address range is used for directory addresses, namely the directory enumeration shared address range 312, any virtual read of a calculated address for a directory will result in the address range for the directory enumeration shared address range 312 being returned. Thus, the network processor 204 returns as a response to the decoder processors 202 read request, the address range for the directory enumeration shared address range 312. The decoder processor 202 can use this shared address range 312 to request directory information from the root directory to enumerate directory information into the directory enumeration 302. Because the decoder processor had previously requested a shared address range by reading the calculated address for the root directory, subsequent read requests to the directory enumeration shared address range 312 will result in information for the root directory being returned from the network processor 204 to the decoder processor. In particular, the network processor includes a data structure that correlates identifiers with network identifiers. The network identifier may be, for example, a serial number or other identifier for a particular directory or file that is known by both the network processor 204 and a data server such as the UPnP media server 102. Thus, when a directory is open for enumeration, the network processor 204 will use the network identifier to obtain data from the UPnP server 102. Notably, with only a single directory enumeration shared address range 312, in the illustrated embodiment, only a single directory is open for enumeration at any given time. If a new directory is opened for enumeration, then the previously opened directory is closed.
Once a portion of a directory has been enumerated in the directory enumeration 302, the information in the directory enumeration 302 may be used to open other directories for enumeration. Is should be noted at this point that the directory enumeration 302 does not necessarily contain the entire enumeration of the directory, but rather may be a predetermined amount for the directory up to some maximum. For example, the directory enumeration 302 may only store a maximum of 80 entries. Returning now to the present example, the directory enumeration 302 illustrates a directory titled “video” with an identifier of 3n+2. This identifier can be converted to the corresponding virtual address in the file space address map 300 shown in the first portion 308 and labeled 3n+2. This address space contains a virtual mapping to the directory enumeration shared address range 312 which is again returned to the decoder processor as the response to the request to read the address corresponding to 3n+2. Notably, this is the same response as for the root directory, however the network processor now knows that the directory “video” is open for enumeration instead of the root directory. Addresses within the virtual directory enumeration shared address range 312 can be used by the decoder processor 202 to request directory information for the video directory until another directory is opened for enumeration.
Once a calculated directory identifier address is read from the first portion 308, the directory enumeration shared address range 312 may be randomly accessed up to the end of the shared address range. In the example illustrated, the directory enumeration shared address range 312 may be randomly accessed up to a maximum of 10 GB.
To read actual directory entries, beginning at the beginning of the directory enumeration shared address range 312, the directory is accessed as specified. Directory entries can then be read sequentially according to the entries in the directory enumeration shared address range 312 until either all of the directory entries have been enumerated or until the end of the directory enumeration shared address range 312 is reached. If the end of the directory enumeration shared address range 312 is reached, then the next read address is the beginning of the directory enumeration shared address range 312. Circling back to the beginning of the directory enumeration shared address range 312 can be repeated as many times as needed to retrieve the desired directory information. Notably, in one embodiment, the network processor 204 may also contain a version of the directory enumeration 302. In particular, one embodiment includes a version of the directory enumeration 302 that is larger in capacity than the version of the directory enumeration 302 at the decoder processor. This allows the network processor 204 to buffer and cache directory information for the decoder processor.
Files can be opened for streaming using the low performance shared address range 314, the first high performance shared address range 316, and the second high performance shared address range 318. As such, up to three files for streaming may be open at any given time in the example illustrated in
To open a file for streaming, the decoder processor 202 reads the identifier from the directory enumeration 302 and requests data from a calculated virtual address corresponding to the identifier. The network processor 204 reads the data at the calculated virtual address. Notably, the network processor includes an algorithm to determine which virtual address range is stored at the calculated virtual address. As such, the storage is dynamic in that the read process itself results in the selection of the shared address range. If the file identifier corresponds to a low bandwidth type stream, such as photos or music files, then the low performance stream shared address range 314 will be returned as the response to the request. If the file identifier corresponds to a higher bandwidth type stream, such as a movie, then one of the high performance stream shared address ranges, 316 or 318 will be returned. This can be selected for example, based on if one of the shared address ranges is already in use for buffering a file. Information is returned to the decoder processor 202 that allows the decoder processor to return to upper application layers the virtual file system address range information, and the status of the opened stream. The returned information may include, for example, beginning and ending file system addresses of the address range where the file can be accessed. Status information may also be returned, such as a status value and a percentage of the stream transferred, if know. For example, as with the directory case, a buffer may exist at the network processor 204. When the network processor 204 receives the request to read an address corresponding to an identifier, the network processor can not only return the shared address range, but can also begin buffering the file to reduce network delays when file data is requested.
In one embodiment, a file or directory can be randomly accessed up to the amount of shared address space. However, in one alternative embodiment, access of directory or file addresses may be extended past the shared address range by keeping track of the number of address range wraps and the direction of wrap to calculate a file, stream or directory offset.
Notably, various embodiments may include various error handling and file size handling features. For example, it is likely that the end of a file will not correspond with the end of the shared address space. Even if the end of the file did correspond with the end of the shared address space, it would be unknown which wrap of the shared address space would correspond with the end of the file. Thus, in one embodiment, the end of a file may be indicated by including an indicator. In one embodiment, this may be a NUL file entry.
Illustratively, in one embodiment, a methods may be embodied where it is detected the end of enumerated data in the shared address range has been requested. This may be accomplished by, in one embodiment, detecting a NUL file entry. The network processor 204 can respond to the request for the end of enumerated data in the shared address range with an error. In one embodiment, this may be accomplished by sending a general IDE error. Alternatively, the network processor may set the hardware line 228 to indicate the presence of an error. Other error signaling may additionally or alternatively be performed. The decoder processor 202 can respond to the network processor 204 with a request to define the error. The network processor 204 can then respond with an indication that error indicated the end of enumerated data in the shared address range. This information can be used by upper application layers for applications running on the decoder processor 202.
Other error handling may also be accounted for. For example, in one embodiment, the network processor 204 may detect that a request is being made for data beyond the range of the actual directory or file data, but within the shared address range. The network processor 204 may respond to the request for data beyond the range of actual data in the shared address range with an error propagated in an appropriate fashion, such as those described above. The decoder processor 202 may request the network processor 204 to define the error. The network processor responds with an indication that the request for data is beyond the range of enumerated data in the shared address range. This information can be used by upper application layers for applications running on the decoder processor 202.
The network processor 204 and decoder processor 202, alone or in combination, may be also able to detect an invalid content source. The content source may be invalid because of at least one of a remote data store being removed from a network, a remote data store being powered down, a remote data store being overloaded, network limitations, network accessibility, etc. When an invalid content source is detected, an error can be reported. A request is then received to define the error. A response to the error with an indication that the content source is invalid can be generated. Additionally, if the reason for the invalidity of the content source can be detected, then that information can be returned as well.
Embodiments may also include computer-readable media for carrying or having computer-executable instructions or data structures stored thereon. Such computer-readable media can be any available media that can be accessed by a general purpose or special purpose computer. By way of example, and not limitation, such computer-readable media can comprise RAM, ROM, EEPROM, CD-ROM or other optical disk storage, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to carry or store desired program code means in the form of computer-executable instructions or data structures and which can be accessed by a general purpose or special purpose computer. When information is transferred or provided over a network or another communications connection (either hardwired, wireless, or a combination of hardwired or wireless) to a computer, the computer properly views the connection as a computer-readable medium. Thus, any such connection is properly termed a computer-readable medium. Combinations of the above should also be included within the scope of computer-readable media.
Computer-executable instructions comprise, for example, instructions and data which cause a general purpose computer, special purpose computer, or special purpose processing device to perform a certain function or group of functions. Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described above. Rather, the specific features and acts described above are disclosed as example forms of implementing the claims. Notably, some embodiments may be embodied using a combination of computer readable media and computer executable instructions being consumed by a processor. For example, the file space address map 300 may be implemented as a virtual structure that includes two data structures. The first data structure includes the virtual addresses corresponding to identifiers as shown in the first portion 308. The second data structure includes the shared address ranges in the second portion 310. Notably, the addresses in the first portion include virtual data which is actually generated dynamically. Specifically, the shared address range that is returned as data is generated dynamically when the virtual address corresponding to the identifier is read as explained in the examples above.
The present invention may be embodied in other specific forms without departing from its spirit or essential characteristics. The described embodiments are to be considered in all respects only as illustrative and not restrictive. The scope of the invention is, therefore, indicated by the appended claims rather than by the foregoing description. All changes which come within the meaning and range of equivalency of the claims are to be embraced within their scope.