Abstract:
Resources may be managed in a topology for audio/video streaming. DisplayPort is a digital audio/video interconnect standard of the Video Electronic Standards Association (VESA). It allows video and audio to be coupled from a computer to a video display or an audio playback system. The topology includes audio/video sources and sinks and intervening branch devices. Messages between these sources, sinks, and branch devices may be used for resource management.

Description:
CROSS-REFERENCE TO RELATED APPLICATIONS 
     This application claims priority to provisional application Ser. No. 61/298,936, filed on Jan. 28, 2010, hereby incorporated by reference herein. 
    
    
     BACKGROUND 
     This relates generally to devices that source and sink video and audio data. 
     DisplayPort is a digital audio/video interconnect standard of the Video Electronic Standards Association (VESA). It allows video and audio to be coupled from a computer to a video display or an audio playback system. The DisplayPort connector supports 1, 2, or 4 data pairs in a main link that also carries clock and optional audio signals with symbol rates of 1.62, 2.7, or 5.4 gigabits per second. A 1.1 standard was approved in May 2006 and in 2009 a 1.2 standard, with increased data rates, was announced. The DisplayPort 1.2 standard doubles the bandwidth of the 1.1 standard. 
     With the DisplayPort 1.2 standard, two WQXGA monitors may sink audio/video data from a single source link or four WUXGA monitors may sink data from a single source link. In addition, the 1.2 standard allows a higher speed AUX which may be used for Universal Serial Bus (USB) peripheral device data transfer, microphone audio transfer, or camera video transfer, to mention a few applications. 
     Display or sink devices can be connected to source devices, such as personal computers or consumer electronic devices, either directly or through what are called branch devices. Many types of branch devices exist including repeaters that repeat audio or video information, converters that convert audio or video information from one format to another, replicaters, which reproduce the data, and concentrators that take streams from two or more source devices as inputs and transmit them on its downstream links. Interface standards, such as DisplayPort 1.2, allow multiple streams on one link; in such cases, these two or more input streams may be transmitted onto a single downstream link. Some concentrators may operate in a switched fashion, i.e. only one selected source may transmit at a time. 
     Together, the source, sink, and branch devices form a topology in which a given source may be streaming video to one or more sinks through zero or more branch devices. Active video data flows through links connecting various device types. Each link is constrained by its bandwidth and the number of streams that it supports. A sink will have a limited number of audio and video endpoints to render the stream. Thus, based on the topology, there may be contention for the available video or audio resources. 
     One such topology, shown in  FIG. 1 , may include two sources and five sinks, as indicated. A source number  1  wants to stream video to sink number  1  and source number  2  wants to stream video to sink number  2 , the link between branch number  2  and branch number  3  is common to both paths. Thus, issues may arise at the source with respect to this contention, including how much bandwidth is available in that or any other link along the path. Another issue is how resources on the path can be reserved. Still another issue is how many audio/visual streams can be driven. Other issues include how access to shared resources can be managed and how errors can be communicated. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         FIG. 1  is a schematic depiction of a audio/video distribution topology in accordance with one embodiment; 
         FIG. 2  is a sequence chart for enumeration, commit and release in accordance with one embodiment; 
         FIG. 3  is a schematic depiction for one embodiment of a branch device; 
         FIG. 4  is a flow chart for enumeration software in accordance with one embodiment; 
         FIG. 5  is a message sequence chart in accordance with one embodiment; 
         FIG. 6  is a sequence chart for enumeration of path resources in accordance with one embodiment; 
         FIG. 7  is a sequence chart showing how various display configurations can be established for the topology shown in  FIG. 6 ; 
         FIG. 8  is a depiction of a potential mapping between two sources and two sinks in accordance with one embodiment; 
         FIG. 9  is a flow chart for one embodiment; 
         FIG. 10  is a flow chart for one embodiment; 
         FIG. 11  shows a message sequence in accordance with one embodiment; 
         FIG. 12  is an up action path message sequence in accordance with one embodiment; 
         FIG. 13  is a mapping of destination sequences in accordance with one embodiment; 
         FIG. 14  is a message sequence chart for an uplink action path message in accordance with one embodiment; 
         FIG. 15  is a depiction of connections between source and branch devices in accordance with one embodiment; 
         FIG. 16  is a depiction of multiple source and branch devices according to one embodiment; 
         FIG. 17  is a depiction of a topology with two video end points in accordance with one embodiment; and 
         FIG. 18  is a flow chart for one embodiment. 
     
    
    
     DETAILED DESCRIPTION 
     In accordance with some embodiments, specific messages may be exchanged between devices that source and sink video and audio data. Coordinated action may be taken by devices along a path between source and sink devices in response to those messages. Messages may be sent to a targeted destination that is specified by its address. The messages ENUM_PATH_RESOURCES, COMMIT_PATH_RESOURCES, and RELEASE_PATH_RESOURCES may be used, as indicated in  FIG. 2 . These messages can be sent on the AUX channel in the DisplayPort specification, for example. 
     Address spaces are generated before message transmission. Each source  10  sends ENUM_PATH_RESOURCE message  18  to the desired sink  16  to enumerate the main link bandwidth and the number of streams. The branch device  14 , just upstream of the desired sink  16 , responds with the available bandwidth (BW=x) and number of streams (# STREAMS=s), as indicated at  20 . Before this reply is propagated further upstream, the upstream branch  12  alters the available bandwidth (BW=x′) and stream number (# STREAMS=s′) from the downstream branch  14  to reflect what is achievable from the downstream path, as indicated at  22 . 
     Eventually, the source  10  gets the path resources. The message is sent on a control bus (such as AUX on DisplayPort), but the query is for main link resources. There is no reservation of bandwidth on the control bus and control messages are exchanged between devices in the topology, even as the main link resource are completely spoken for by one or two sources. 
     As part of the processing of the message, each device may need to train the main link along the specified path to determine the amount of bandwidth available as downstream link. Audio resources are also enumerated as part of this procedure. This is to determine the number of end points that are available for streaming in any given point in time. 
     Link bandwidth enumeration feeds into operating system operations, such as video mode enumeration. Based on this and asynchronous selection by the end user of the video mode to be driven out, a commit procedure may be accomplished using a COMMIT_RATH_RESOURCES message  24  as follows. Enumerated bandwidth may not be available at commit time. For example, different sources may send different ENUM_PATH_RESOURCES messages at any given time to the same sink. They could also be for different sinks with paths that have a common link. As an example, the sequence of source number  1  enumeration, followed by source number  2  enumeration, followed by source number  1  commit, is followed, for example, by source number  2  commit which fails because of the previous source number  1  commit. 
     The source  10  sends a COMMIT_PATH_RESOURCE message  24  to the sink  16 . The message has the desired bandwidth and number of streams. All devices along the specified path (e.g. branches  12  and  14 ) reserve the resources for this source. The replies  26  and  28  may indicate a success or failure. 
     Each device propagates COMMIT_PATH_RESOURCES  24  only when it is able to successfully commit the desired resources. In addition to independent resource commits from different source devices, it is possible that the intermediate links along the path may retrain to a lower bandwidth, providing another reason for failure. Link training is the handshake that is performed to make the transmitter or receiver agree on an electrical configuration. To account for a topology of devices, this notion is extended to an entire path, where each link on the path needs to be trained in a coordinated fashion called path training. 
     It is possible that some devices may have successfully committed resources for a video stream before a downstream device fails to commit. In order to release these resources, the source device may send out a RELEASE_PATH_RESOURCES  30  message after receiving a failure on COMMIT_PATH_RESOURCES. 
     An active video starts after successful completion of COMMIT_PATH_RESOURCES. Conversely, when the stream is to be terminated, the source issues RELEASE_PATH_RESOURCES  32  to enable release of committed resources at devices along the path. 
     Referring to  FIG. 3 , the source  10 , sink  16 , and each of the branch devices  12  or  14 , indicated in  FIG. 3  as  34 , includes a processor  36 . The processor may be coupled to a receiver  38  and the transmitter  40 . The processor  36  may also be coupled to a storage  42  which stores software including the enumerate software  44 , in one embodiment. Thus, the storage  42  may a computer readable medium that stores instructions executed by the processor  36 . The storage  42  may be a semiconductor, optical, or magnetic memory. 
     The enumerate sequence  44 , shown in  FIG. 4 , may be software in one embodiment, but it also may be implemented in hardware or firmware. A check at diamond  46  determines whether an enumerate message has been received by a branch device. If so, the message receiving branch device replies to the upstream branch device with the receiving device&#39;s available bandwidth and available number of streams. 
     If a receiving device does not receive the enumerate message after a period of time, a check at diamond  50  determines if a non-receiving device is an upstream device that receives a message from a downstream device specifying a bandwidth and number of streams. If so, the upstream device modifies the received bandwidth and number of streams needed to reflect its capabilities. It then sends either the original bandwidth and number of streams or the modified numbers, as needed, to the next branch or to the source, as indicated in block  54 . 
     Referring to  FIG. 5 , a message sequence chart for addition and deletion of a stream includes a source  60  and two sinks  62 ,  64  with appropriate stream identifiers. The identifier for sink 1   62  is “1” and the identifier for sink 2   64  is 1.2. Each device includes a port labeled “1” or “2”. 
     Then, referring to  FIG. 6 , a sequence chart between a source 1   60 , a branch plus sink 1   62 , and a sink 2   64  is depicted. AUX refers to the control channel and main link refers to the data channel. 
     Each link in a topology, such as that shown in  FIG. 5 , for example, may consist of independent control and data channels and the connections are point-to-point. There is an ability to send messages on the control channel to any device using addressing and routing mechanisms. The procedure involves locally unique identifiers for the stream at the sources and maintenance of mapping tables and concentrators, as shown in  FIG. 6 . 
     During an address generation phase, addresses are agreed to for each of the devices in the topology by sending address generation messages  66 . Then the source sends ENUM_PATH_RESOURCES message  68  to the branch+sink 1   62  over the control channel, indicated as AUX. It also sends a COMMIT_PATH_RESOURCES message  70  over the control path as well as to the branch+sink 1   62 . 
     Binding is the procedure by which devices in the topology agree on a destination for the next stream. The binding procedure begins, after enumeration, with a source wanting to transmit a new stream, sending out an ADD_STREAM message  72  to the desired destination sink device identified with a locally unique stream identifier (e.g. 1.2 for sink 2 ). All devices along the path from source  60  to sink device  64  remember the stream identifier and the input port (e.g. 1 or 2) on which the stream has been received in their mapping tables. 
     Each branch device  62  performs a mapping of the input stream identifier (ID  1  for itself) to an output stream identifier (1.2 for sink 2   64 ). In the absence of multiple sources, the input stream identifier is the same as the output stream identifier. Each branching device remembers the output stream identifier and output port number in its mapping table as well. 
     Finally, the branch devices forward the message onwards to the destination as indicated by the route/address contained in the message, assuming there are no other resource constraints on those devices, as indicated at  74 . In case of such resource constraints, the branch device simply sends a negative acknowledgement to the source. The message ends at the desired destination. If the sink device is able to receive the stream, it responds with an acknowledgement  76  to the source. Otherwise, the sink device sends a negative acknowledgement. Then the sink knows that it needs to consume the next new stream that is on the data channel. All branch devices propagate the acknowledgements  78  back up to the source. 
     Upon receipt of the acknowledgement, the source device sends the new stream  80  out on the data channel on its link that leads to the desired destination. The branch device routes the stream along the path for the new stream as remembered from their mapping tables, as indicated at  82 . The sink device knows it needs to consume the new stream based on the message it had previously received and presents the stream on the display. 
     Unbinding or deletion is performed through the delete stream message  84 ,  86  sent to the intended destination with the same stream identifier. This causes the sink device to expect stoppage of the stream and for the branch devices to alter their mapping tables accordingly. Receipt of an acknowledge message to a delete stream message triggers the source to stop sending the stream on the data channel. 
     In  FIG. 7 , various display configurations can be established for the topology shown in  FIG. 4 . A “single display” configuration is simply one display device that presents audio video data. It uses the messages  72 ,  74 ,  80 ,  82 ,  84 , and  86  already described. The “clone mode” configuration is where the same content  92  is sent to be displayed on two monitors or display devices. “Extended desktop” is an alternative dual display configuration in which different images  94 ,  96  are shown on both monitors. 
     When multiple sources are present in the topology, as indicated in  FIG. 8 , from source 1   98  and source 2   100 , each source may issue an ADD_STREAM message with the same stream identifier (in this case # 1 ) at the same time on an overlapping path. In this case, a concentrator branch device  102  that is on the overlapping path for these new streams only propagates an ADD_STREAM message for one source (in this case source 1 ), while blocking the others. That is, only one new stream can be added at a time. After the unblocked source&#39;s message has been conveyed on the data channel, an additional ADD_STREAM message is propagated for the blocked source. 
     In the presence of multiple input ports on a branch device  104 , the next available stream identifier is assigned and the branch device remembers the input stream identifier and port number to its output stream identifier and port number in its mapping table  108 . 
     As one use case, a new stream may be added. The concentrator branch device adds a new entry to its mapping table when it sees an add stream message with an identifier that is not active. If needed, it generates a new output identifier for that stream and uses that while propagating the ADD_STREAM message. A concentrator branch device may add a destination address for this identifier in its mapping table. Another use case is an existing stream extended. If the same source adds a second sink to a stream that is already active through another ADD_STREAM message, the concentrator branch device will not add a new entry in its mapping table since the mapping it had already created is still valid. However, the concentrator does add the second destination address to its input identifier in its mapping table. 
     Still another use case is the removal of a sink from a stream. The concentrator marks the address of the sink for deletion from a list of destination devices when it receives a delete stream message with that sink&#39;s address for an active identifier. Subsequently, when it receives a delete stream acknowledgement message from the sink device, it propagates the message back to the source using the mapping table to alter the identifier that will be recognized by the source. It then deletes the sink&#39;s address for that stream from its mapping table. If that was the last sink receiving the stream with that identifier, it deletes the entry from its mapping table. Otherwise, if there is at least one other sink consuming the stream with that identifier, the entry in the mapping table is not deleted. 
     Referring to  FIG. 9 , a sequence  110 , in accordance with one embodiment for implementing the binding described above, is depicted. The sequence may be implemented in software, hardware, or firmware. In software embodiments, the sequence may be implemented by instructions executed by a processor, such as the processor  36  shown in  FIG. 3 , for a branch device  34 . In such case, the sequence may be stored on the storage  42 . 
     Initially, a branch device receives an ADD_STREAM message, as indicated in block  112 . It stores the STREAM_ID and the input port from that message in its mapping table, as indicated in block  114 . Then the branch device maps the input STREAM_ID to an output STREAM_ID, as indicated at block  116 . It stores the output STREAM_ID and output port number in its mapping table, as indicated in block  118 . Then it forwards the message onwards, as indicated in block  120 . Ultimately, if the message is successfully delivered, an acknowledgment message will be received from a downstream device and the branch device forwards the acknowledgement message upstream, as indicated in block  122 . 
     In some embodiments, a message passing framework  124 , shown in  FIG. 10 , may allow for action by all devices along a path or action only by the destination device. Messages have identifiers, with a new identifier being allocated as each new message is defined. The definition of a message includes determination of whether it is a path or a destination message. Path messages are of two types, depending on the direction in which the action is performed, on the way down towards the sink, in which case it is a down action path message, or on the way back up to the source device, in which case it is up action path message. Messages may be initiated by any device in the topology. Each message has a destination address and associating routing information. 
     The message passing framework  124 , shown in  FIG. 10 , may be implemented in software, hardware, or firmware. For example, it may be implemented in software in the form of instructions stored on a computer readable medium, such as the storage  42  shown in  FIG. 3 , in the device  34 , which may be a branch device or sink device, for example. 
     In accordance with one embodiment, the sequence shown in  FIG. 10  begins by receiving a message from an upstream device, as indicated in block  126 . The device receiving the message may be a branch device or a sink device, as two examples. The receiving device, whether it is the ultimate destination or not, obtains the message definition, as indicated in block  128 . Then, in diamond  130 , the device checks to determine whether an up action message is indicated by the message definition. If so, it performs the actions requested in the message on receipt of the message, as indicated in block  132 . 
     Otherwise, it is not an up action message, a check at diamond  134  determines whether it is a down action message. If it is a down action message, as indicated in block  136 , the actions are performed on the acknowledgement, as opposed upon the receipt of the message. 
     Conversely, if it is not a down action message, then, as determined in diamond  138 , if it is a destination message, the action is only performed if the device receiving the message is the ultimate destination, as indicated in block  140 . 
     The message passing framework enables devices to perform coordinated action on a specified path in a point-to-point topology of connected audio visual source, branch, and sink devices. The framework can be used for a variety of operations including topology discovery, address generation, routing, binding and stream management, resource management, and power management. 
     A down action message, shown in  FIG. 11 , works as follows. Prior to sending a message, the source  110  performs any message specific action  119  needed. The message  112  is sent only if the source action succeeds. The source device transmits a message to the destination device by sending it on a downstream port, as determined based on the address/routing information. Each branch device  114  or  116  or sink  118  that receives the message performs action  119  as required by that message type. Upon the successful completion of action at the destination (e.g. sink  118 ), it responds with an acknowledgement (ACK)  120 . This acknowledgement is propagated back up to the source. 
     An up action message  122  works as depicted in  FIG. 12 . Here, the actions  119  are done as part of the acknowledgement  120 . 
     Destination messages work as depicted in  FIG. 13 . Action  119  is only done by the destination, in this example, the sink  118 . The other devices in the path simply forward the message and the acknowledgement. 
     A use of a down action path message is illustrated in  FIG. 14  for path training, which is training all the links on a path. In  FIG. 13 , the action  119  at each device is link training. The message used is TRAIN_LINKS_ON_PATH, although any other message could be used. In  FIG. 13 , the message is directed at branch  116 . 
       FIG. 15  is a message sequence chart for TRAIN_LINKS_ON_PATH when implemented as an up action message. Here, the actions  119  all occur as part of the acknowledgements  120 . 
     An interface-specific framework may enable a source device to determine that the functions enumerated through different paths are part of the same device. The DisplayPort Standard is an example of an “interface.” Different paths for enumeration can be: a) paths featuring different interface types or b) just different paths within the same interface type. The framework enables a device to be used in conjunction with container identifier initiatives that Microsoft® Windows® and other technologies, such as Universal Serial bus (USB) support, and enables device centric rather than function centric user interfaces for connected devices. 
     The framework may include a 16 byte globally unique identifier (GUID) exposed through a set of container ID registers (which could be DisplayPort configuration data (DPCD) in the case of DisplayPort). The DPCD is essentially a set of registers used for status checking, command communication, and providing context for an interrupt. The container_ID registers may be supported on branch devices, composite sink devices, and any device that has multiple transports. 
     A sink device with a given number of video end points is expected to respond with that number of Extended Display Identification Data (EDID) structures. The EDID data structure tells the source about the capabilities of the monitor. EDID is a VESA standard. When a sink device has an integrated Universal Serial Bus (USB) or hub device, the globally unique identifier of the sink matches the globally unique identifier in the container descriptor of that USB device or hub. All functions that are integrated into the device advertise the same globally unique identifier, regardless of the interface type through which they are accessed. In a sink that has multiple video end points, the container_ID registers from each address returns the same globally unique identifier. For each device in the topology, the source device reads the globally unique identifier as part of the topology discovery process. If the device contains a globally unique identifier, the source device reads the globally unique identifier to determine if the same device has been accessed for multiple paths or through multiple interfaces. 
     Otherwise, a source device infers the functions that are in the same physical device through some interface specific means. In the case where the interface is a DisplayPort Standard, this can be based on the relative address (RAD) of the downstream device. When faced with a topology of devices, each device initiating communication needs to generate an address for the destination device that is valid in the network. That address is called the relative address because the address generated by each device is valid but could be different from what is generated on another source for the same destination. Then, the source reads the EDID from each relative address. A globally unique identifier is generated and associated with the device as identified through EDID. This generated globally unique identifier is used with the container identifier framework in the operating system. 
     Thus, the EDID contains a unique serial number in some embodiments. If this is not valid, there is a change of the same globally unique identifier being associated with multiple EDIDs, resulting in poor user experience. 
     Multiple connections between source and branch devices are shown in  FIG. 16 . In this case, the source generates two addresses for the sink device since there are two paths to that sink. Since the source reads the same globally unique identifier through both paths, it is able to infer that both paths read the same sink device. Had the globally unique identifier been missing, the source reads the EDID from both paths which would be the same, generates a globally unique identifier, and associates that globally unique identifier with the sink device. This identifier is then returned to the operating system. 
       FIG. 17  shows an example with two video end points. The sequence of the source is as follows. The source again generates two addresses, one for each video end point in the sink device. The source reads the container identifier for the register from each video end point address. Since the sink has two interfaces into it, the framework requires a globally unique identifier to be present in the sink and requires that globally unique identifier to be the same in both interfaces. The source detects that the globally unique identifier is the same and infers that the two video end points are part of the same physical device. 
     Referring to  FIG. 18 , in accordance with one embodiment, a sequence  150  may be implemented by a source in the form shown in  FIG. 3 . In some embodiments, the sequence shown in  FIG. 18  may be implemented in software, hardware, or firmware. In software embodiments, it may be implemented by a sequence of instructions executed by a processor, such as the processor  36 , and stored on a storage device  42 . 
     During an initial enumeration or topology discovery phase, an identifier is read for each device in the topology (block  152 ). In other words, the source obtains the identifier for the devices in the topology. That identifier can be any of the identifiers already discussed herein. Then the source establishes a connection to a destination downstream of the source via a path, as indicated at block  154 . Then the source compares the identifiers of the device in the connection path, as indicated in block  156 . If, as determined in block  158 , the identifiers match, the source concludes that the path devices with matching identifiers are part of the same branch or sink device. Thus, the ambiguity that may arise when two devices have the same identifier may be handled easily, in some embodiments. 
     References throughout this specification to “one embodiment” or “an embodiment” mean that a particular feature, structure, or characteristic described in connection with the embodiment is included in at least one implementation encompassed within the present invention. Thus, appearances of the phrase “one embodiment” or “in an embodiment” are not necessarily referring to the same embodiment. Furthermore, the particular features, structures, or characteristics may be instituted in other suitable forms other than the particular embodiment illustrated and all such forms may be encompassed within the claims of the present application. 
     While the present invention has been described with respect to a limited number of embodiments, those skilled in the art will appreciate numerous modifications and variations therefrom. It is intended that the appended claims cover all such modifications and variations as fall within the true spirit and scope of this present invention.