SYSTEMS AND METHODS FOR USING AUDIO WATERMARKS TO JOIN MEETINGS

In one embodiment, a method includes generating an audio watermark for a user of a meeting session. The method also includes detecting the audio watermark. The audio watermark includes an identification of the user and an identification of the meeting session. The method further includes decoding the audio watermark and identifying the user and the meeting session in response to decoding the audio watermark.

TECHNICAL FIELD

The present disclosure relates generally to communication networks, and more specifically to systems and methods for using audio watermarks to join meetings.

BACKGROUND

Users may join meetings from different devices. For example, a user may join a meeting from a mobile phone on their commute to the office. As another example, the user may join a meeting from their desktop computer in their office. In certain situations, the user may join a meeting from their mobile phone on their commute to work and then re-join the same meeting once they arrive at their office. The process of joining the same meeting from different devices can be cumbersome.

DESCRIPTION OF EXAMPLE EMBODIMENTS

Overview

According to an embodiment, a system includes one or more processors and one or more computer-readable non-transitory storage media coupled to the one or more processors and including instructions that, when executed by the one or more processors, cause the system to perform operations. The operations include generating an audio watermark for a user of a meeting session. The operations also include detecting the audio watermark. The operations further include decoding the audio watermark and identifying the user and the meeting session in response to decoding the audio watermark.

In accordance with certain embodiments, the watermark includes an identification of the user and an identification of the meeting session.

In accordance with some embodiments, detecting the audio watermark includes listening, via a microphone of a first device, for the audio watermark produced by a speaker of a second device.

In accordance with certain embodiments, the operations include moving, in response to identifying the user and the meeting session, the meeting session from a first device to a second device.

In accordance with some embodiments, the operations include initiating activation of a virtual assistant in response to identifying the user and the meeting session. In some embodiments, the operations include instructing the virtual assistant to perform an action associated with interacting with the user.

In accordance with certain embodiments, the operations include communicating a notification to a user. In certain embodiments, the operations include receiving an input from the user. In some embodiments, the operations include determining whether to move the meeting session from a first device to a second device based on the input from the user. In certain embodiments, the operations include interpreting the input from the user using one of the following: speech recognition or facial recognition.

According to another embodiment, a method includes generating an audio watermark for a user of a meeting session. The method also includes detecting the audio watermark. The method further includes decoding the audio watermark and identifying the user and the meeting session in response to decoding the audio watermark.

According to yet another embodiment, one or more computer-readable non-transitory storage media embody instructions that, when executed by a processor, cause the processor to perform operations. The operations include generating an audio watermark for a user of a meeting session. The operations also include detecting the audio watermark. The operations further include decoding the audio watermark and identifying the user and the meeting session in response to decoding the audio watermark.

Technical advantages of certain embodiments of this disclosure may include one or more of the following. This disclosure describes systems and methods for using audio watermarks to join meetings. Certain embodiments of this disclosure provide an assisted, fast, efficient, and secure way to move a meeting or call to from one device to another. In certain embodiments, audio watermarks are used to move meetings from one device to another with little to no user interaction. In some embodiments, a watermark detector is used to detect the audio watermark, which may be added to a wake word detector for applications that already include a wake word detector. Certain embodiments utilize a virtual assistant to assist the user in moving the meeting from one device to another, which provides a seamless experience for the user.

Example Embodiments

This disclosure describes systems and methods for using audio watermarks to join meetings. A meeting participant may initially join a virtual meeting from a mobile device and then want to move the virtual meeting to a local device. For example, a meeting participant may join a virtual meeting from a smartphone on their commute to work and then want to move the virtual meeting to their desktop computer upon arriving to work. As another example, a meeting participant may join a virtual meeting on their laptop and then want to move the virtual meeting to a local device in a conference or meeting room. Certain embodiments of this disclosure provide an efficient way to seamlessly move a meeting or call to from one device to another.

FIG.1illustrates a system100for using an audio watermark to join a meeting. System100or portions thereof may be associated with an entity, which may include any entity, such as a business, company, or enterprise, that uses watermarks to join meetings. In certain embodiments, the entity may be associated with a web conferencing organization, a telecommunications company, and the like. The components of system100may include any combination of hardware, firmware, and software. For example, the components of system100may use one or more elements of the computer system ofFIG.3.

In the illustrated embodiment ofFIG.1, system100includes a network110, a cloud network112, devices120(a mobile device120aand a local device120b), microphones122(a microphone122afor mobile device120aand a microphone122bfor local device120b), speakers124(a speaker124afor mobile device120aand a speaker124bfor local device120b), a user126, a meeting application130, a meeting session132, a user identification134, an audio watermark136, a watermark detector138, a watermark decoder140, a virtual assistant150, a notification152, a user input154, and an action156.

Network110of system100is any type of network that facilitates communication between components of system100. Network110may connect one or more components of system100. One or more portions of network110may include an ad-hoc network, the Internet, an intranet, an extranet, a portion of the public switched telephone network (PSTN), a virtual private network (VPN), an Ethernet VPN (EVPN), a local area network (LAN), a wireless LAN (WLAN), a virtual LAN (VLAN), a wide area network (WAN), a wireless WAN (WWAN), a software-defined wide area network (SD-WAN), a metropolitan area network (MAN), a cellular telephone network, a Digital Subscriber Line (DSL), an Multiprotocol Label Switching (MPLS)network, a 3G/4G/5G network, a Long Term Evolution (LTE) network, a cloud network, a combination of two or more of these, or other suitable types of networks. Network110may include one or more different types of networks. Network110may be any communications network, such as a private network, a public network, a connection through the Internet, a mobile network, a Wi-Fi network, etc. One or more components of system100may communicate over network110.

In the illustrated embodiment ofFIG.1, network110includes cloud network112. Cloud network112is a WAN that hosts users and/or resources and facilitates communication between the users and/or resources via cloud-based technologies. In certain embodiments, cloud network112includes virtual routers, firewalls, network management software, etc. Cloud network112may distribute functions over multiple data centers. The underlying infrastructure for cloud network112may include servers, operating systems, storage, etc. Cloud network112may be a public cloud, a private cloud, or a hybrid (both public and private) cloud. In certain embodiments, cloud network112provides on-demand availability of computer system resources (e.g., data storage and computing power) without direct active management by user126.

In certain embodiments, cloud network112includes one or more servers. Servers may include computer hardware and/or software (e.g., a computer program) that provide functionality for cloud network112. For example, servers may communicate information to and/or receive information from meeting application130. As another example, servers may communicate information to and/or receive information from virtual assistant150. In certain embodiments, servers provide functionality (e.g., computations) for meeting application130, watermark application140, and virtual assistant150.

Network110includes one or more nodes. Nodes are connection points within network110that receive, create, store and/or send data along a path. Nodes may include one or more redistribution points that recognize, process, and forward data to other nodes of network110. Nodes may include virtual and/or physical nodes. For example, nodes may include one or more physical devices, virtual machines, bare metal servers, and the like. As another example, nodes may include data communications equipment such as computers, routers, servers, printers, workstations, switches, bridges, modems, hubs, and the like. In the illustrated embodiment ofFIG.1, nodes include the infrastructure for cloud network112and devices120.

Devices120of system100represent electronic equipment that can receive, create, process, store, and/or communicate information. Devices120may include one or more components of the computer system ofFIG.3. In certain embodiments, devices120include electronic display screens. For example, devices120may include a liquid crystal display (LCD), an organic light-emitting diode (OLED) flat screen interface, and the like. Devices120include one or more input devices. Input devices include microphones122, cameras, more touch screen components, digital buttons, digital keyboards, physical buttons, physical keyboards, graphical user interfaces (GUIs), etc. In the illustrated embodiment ofFIG.1, devices120include mobile device120aand local device120b.

Mobile device120arepresents an electronic device that can easily be moved from one location to another. Mobile device120amay include a mobile phone (e.g., a smartphone), a laptop computer, a tablet, a personal digital assistant (PDAs), a wearable device (e.g., a smartwatch), etc. Mobile device120amay use network110(e.g., a cellular, Bluetooth, or Wi-Fi network) to connect to a vehicular system or a headset. In certain embodiments, mobile device120amay be powered by a battery (e.g., a lithium-ion battery). In some embodiments, mobile device120aruns a mobile operating system that allows for the installation and/or operation of third-party applications (e.g., meeting application130and virtual assistant150).

Local device120brepresents a stationary electronic device. Local device120bmay include a desktop computer, a personal computer, a workstation, a supercomputer, a mainframe computer, a minicomputer, a digital computer, and the like. Local device120bmay include one or more power supplies. In certain embodiments, local device120bruns an operating system that allows the installation and operation of third-party applications (e.g., meeting application130and virtual assistant150). Local device120bmay be located in any suitable location to receive and communicate information to user126of system100. For example, local device120bmay be located in a booked or idle meeting room, a conference room, a huddle room, an office space, a residence, and the like.

In the illustrated embodiment ofFIG.1, devices120are associated with microphones122. Microphones122of system100are input devices that capture audio by translating sound vibrations in the air into electronic signals. In certain embodiments, microphones122scribe the electronic signals to a recording medium. Microphones122may include analogue microphones, dynamic microphones, condenser microphones, microelectromechanical systems microphones, or any other suitable type of microphone122. Microphones122may be built into devices120or connected to devices120via wired or wireless connections. In the illustrated embodiment ofFIG.1, microphones122include microphone122afor mobile device120aand microphone122bfor local device120b.

In the illustrated embodiment ofFIG.1, devices120are associated with speakers124. Speakers124of system100are output devices that produce sound. In certain embodiments, speakers124convert electrical energy into acoustical signal energy that is radiated into a room or open air. Speakers124may include electrodynamic speakers, loudspeakers, in-wall/ceiling speakers, soundbars, subwoofers, or any other suitable type of speaker124. Speakers124may be built into devices120or connected to devices120via wired or wireless connections. In the illustrated embodiment ofFIG.1, speakers124include speaker124afor mobile device120aand speaker124bfor local device120b.

User126of system100is a person who utilizes mobile device120aand local device120b. User126may be a local user, a remote user, a meeting participant, an administrator, a customer, a combination thereof, and the like. In certain embodiments, user126is associated with one or more accounts. User126may be associated with an account name, a username, a login name, a screen name, one or more passwords, a user profile, etc. In certain embodiments, user126utilizes one or more applications downloaded to mobile device120. For example, user126may utilize meeting application130and/or virtual assistant application150.

Devices120of system100run one or more applications. Applications are computer software packages that perform specific functions for user126or for another application. Each application may be self-contained or may be a group of programs. In the illustrated embodiment ofFIG.1, the applications running on devices120include meeting application130and virtual assistant application150.

Meeting application130of system100is a software platform that facilitates communication with participants of a meeting. Meeting application130may be used to facilitate audio meetings, web conferences, video conferences, teleconferences, webinars, etc. In certain embodiments, meeting application130is installed on mobile device120aand/or local device120b. In some embodiments, meeting application runs via a web browser. Meeting application130may allow user126to speak and/or listen to audio over standard telephone lines, via microphones122, via speakers124, etc. Meeting application130may allow user126to visually interact with one or more other meeting participants via cameras (e.g., smartphone cameras, webcams, etc.). In the illustrated embodiment ofFIG.1, meeting application130performs one or more functions in cloud network112.

In certain embodiments, meeting application130establishes meeting session132. Meeting session132is a temporary and interactive information interchange between two or more devices120communicating over network110. Meeting session132is established at a certain point in time, and then ended at a later point in time. In certain embodiments, one or more messages are exchanged during meeting session132. Meeting session132may be established and/or implemented in accordance with one or more protocols (e.g., a Transmission Control Protocol/Internet Protocol (TCP/IP)) and/or services at the application layer, at the session layer, or at the transport layer in the Open Systems Interconnection (OSI) model. Meeting session132may include an application layer session (e.g., a Hypertext Transfer Protocol (HTTP) session or a telnet remote login session), a session layer session (e.g., a Session Initiation Protocol (SIP) based Internet phone call), a transport layer session (e.g., a TCP session), a server-side web session, a client-side web session, and the like.

User identification134is any identification used to uniquely identify user126of meeting session132. User identification134may be a meeting attendee identification, a meeting participant identification, a user login credential (e.g., a login ID or password), an email address of user126, a name of user126, a social security number, a date of birth, an account number, a student record number, a driver's license number, an employee identification number, a photo, and the like. User identification134may include data that directly identifies user126or links user126to their identity. In certain embodiments, user identification134is used to bind device120to meeting session132for user126.

In certain embodiments, meeting application130generates audio watermark136for user126. Audio watermark136is a unique electronic identifier embedded in an audio signal. In certain embodiments, meeting application130embeds audio watermark136into an audio signal in a way that is difficult to remove. If the audio signal is copied, then the information is also carried in the copy. Each audio watermark136may include information such as an identification of meeting session132, a unique identification of a meeting participant, a digital signature, personal information of user126, and the like. For example, audio watermark136may include user identification134and an identification of meeting session132. In certain embodiments, information may be embedded into audio as an inaudible watermark. The identification of meeting session132may be a meeting ID, a session ID, an event ID, and the like. The identification of meeting session132may include a session type (e.g., a breakout session or an innovation talk), a technology focus (e.g., an application, a cloud, or a collaboration), a session level (e.g., introductory, intermediate, or advanced), etc. The identification of meeting session132may include one or more numbers, letters, characters, a combination thereof, etc.

Meeting application130uses one or more techniques to generate audio watermark136. The technique may depend on the desired data rate, audibility, and robustness of audio watermark136. The techniques may include spread spectrum audio watermarking (SSW), ultrasound watermarking, spread spectrum watermarking, echo modulation watermarking, low frequency-based watermarking, time domain-based audio watermarking, audio watermarking in the frequency domain, audio watermarking in the compressed domain, a combination thereof, and the like. In certain embodiments, audio watermark136is repeatedly embedded throughout the audio content of meeting session132.

Watermark detector138of system100is software used to determine whether audio watermark136is present in an audio signal. For example, watermark detector138may use one or more algorithms to detect the presence of audio watermark136in sound captured by microphone122. In certain embodiments, watermark detector138is a hard decision detector that generates a binary output indicating that watermark136is detected or not detected. In some embodiments, watermark detector138is a soft decision detector that provides an output representing a value related to the detection reliability.

Watermark detector138may use any suitable technique to detect audio watermark136. The techniques may include SSW, ultrasound watermarking, spread spectrum watermarking, echo modulation watermarking, low frequency-based watermarking, time domain-based audio watermarking, audio watermarking in the frequency domain, audio watermarking in the compressed domain, a combination thereof, and the like. In certain embodiments, watermark detector138may include a change to out-of-call behavior of microphone122. In some embodiments, watermark detector138may use a short moving window technique similar to a wake word detector. In certain embodiments, watermark detector138may be added to a wake word detector for applications that already have a wake word detector.

Watermark decoder140of system100is software used to identify the information embedded in watermarks136. In certain embodiments, watermark decoder140decodes the audio signal to extract the binary bit stream of data. In some embodiments, watermark decoder140performs decoding by synchronization. Watermark decoder140may use a key to modulate an embedded data sequence. In certain embodiments, watermark decoder140compares the decoded data to audio watermark136. For example, watermark decoder140may compare a decoded sequence extracted from the audio signal to an original watermark sequence of audio watermark136. In some embodiments, watermark decoder140uses the information (e.g., the identification of meeting session132and user identification134) from decoded audio watermark136to identify user126.

Virtual assistant150of system100is a software agent that performs tasks and/or services for user126based on user input154. For example, virtual assistant150may assist user126with meeting joins, calls, and other functions. In certain embodiments, virtual assistant150is a cloud-based program that requires internet-connected devices and/or applications to function. Meeting application130may initiate activation of virtual assistant150in response to one or more occurrences. For example, meeting application130may initiate activation of virtual assistant150in response to identifying user126and meeting session132from audio watermark136. In some embodiments, device120invokes virtual assistant150in proactive mode.

Upon activation, virtual assistant150may communicate notification152to user126. Notification152is an alert generated by virtual assistant150to notify user126of a new message or update. Notification152may be an oral notification, a verbal notification, a text message, a desktop notification (e.g., a banner, sidebar, or badge notification), a push notification (e.g., a web, desktop, mobile app, or wearable device push notification), an email message, a vibrational notification, or any other suitable type of alert. In certain embodiments, virtual assistant150communicates notification152to user126suggesting that user126take a particular action156. For example, virtual assistant150may communicate (orally or visually) the following notification152to user126: “Hey <user's provided name>, would you like to move your meeting (or call) to the room device?”.

In certain embodiments, notification152requests input from user126. For example, notification152may ask user126whether they would like virtual assistant150to move meeting session132from mobile device120ato local device120b. As another example, notification152may ask user126whether they would like to mute meeting session132, end meeting session132, resume meeting session132, increase/decrease the volume on mobile device120aand/or local device120b, and the like.

User input154of system100is information or data communicated to a software program for processing. User input154may be communicated to one or more elements of system100via one or more of the following input devices: microphones122(audio input or voice input), speakers124, a keyboard, a mouse, a webcam, a touchpad, a touch screen, a graphics tablet, etc. For example, user input154may be received from user126via microphone122bof local device120b. In certain embodiments, user126submits user input154in the form of a language request. For example, user input154may communicate the following statement to virtual assistant150: “please move my meeting session to the device in my office.”

Virtual assistant150may interpret user input154using speech recognition, facial recognition, and the like. In certain embodiments, virtual assistant150understands natural language voice commands. For example, virtual assistant150may use natural language processing (NLP) to interpret “please move my meeting to the new device.” As another example, virtual assistant150may use NLP to interpret “please move my meeting to the new device in 5 minutes.” Virtual assistant150may process and/or store user input154in cloud network112. In some embodiments, virtual assistant150may use one or more artificial intelligence (AI) platforms to interpret user input154, to determine one or more actions156, etc. Al platforms may include one or more machine learning platforms, NLP platforms, speech recognition platforms, a combination thereof, etc. In some embodiments, virtual assistant150uses one or more algorithms to learn from data received from user126and/or predict the needs of user126.

Virtual assistant150may perform (or initiate performance of) action156in response to user input154. Action156may include moving meeting session132from one device120to another, creating messages to communicate to one or more components of system100, reading messages aloud, scheduling meetings, placing phone calls, reminding user126about appointments, and the like. In certain embodiments, virtual assistant150determines which (if any) action156to perform in response to user input154. For example, virtual assistant150may receive user input154from user126indicating that user126would like to move their meeting session132from mobile device120ato local device120b. Virtual assistant150interprets user input154to determine associated action156. Virtual assistant150may then instruct meeting application130to move meeting session132from one device120to another.

In operation, while driving to the office, user126uses meeting application130to join meeting session132from mobile device120a. Meeting application130creates audio watermark136for user126of meeting session132. Audio watermark136includes user identification134and an identification of meeting session132. User126arrives to the office. As user126approaches local device120bin office, microphone122bof local device120breceives (see notation160) audio of meeting session132from speaker124aof mobile device120a. Local device120buses watermark detector138to detect (see notation162) audio watermark136from the received audio. Once detected, local device120buses watermark decoder140to decode audio watermark136. Local device120bdetermines user identification134and the identification of meeting session132from the decoded information and uses this information to identify user126and meeting session132. Once user126is identified, mobile device120amay communicate (see notation164a) meeting information associated with meeting session132to local device120b.

In response to identifying user126and meeting session132, local device120binitiates (see notation166) activation of virtual assistant150. Virtual assistant150interacts (see notation168) with user126by communicating notification152to user126and asking user126whether they would like to move meeting session132from mobile device120ato local device120b. User communicates user input154in the form of a verbal response to speaker124bof local device120bconfirming that user126would like to move meeting session132to local device120b. Virtual assistant150receives user input154from speaker124bof local device120band uses speech recognition to interpret user input154. In response to interpreting user input154confirming that user126would like to move meeting session132to local device120b, virtual assistant150may instruct (see notation164b) meeting application130to move meeting session132from mobile device120ato mobile device120b. As such, system100provides an assisted, fast, efficient, and secure process of moving meeting session132between devices120of user126.

AlthoughFIG.1illustrates a particular number of networks110, cloud networks112, devices120, microphones122, speakers124, users126, meeting applications130, meeting sessions132, user identifications134, audio watermarks136, watermark detectors144, watermark decoders146, virtual assistants150, notifications152, user inputs154, and actions156, this disclosure contemplates any suitable number of networks110, cloud networks112, devices120, microphones122, speakers124, users126, meeting applications130, meeting sessions132, user identifications134, audio watermarks136, watermark detectors144, watermark decoders146, virtual assistants150, notifications152, user inputs154, and actions156. For example, system100may include a plurality of users126. As another example, meeting application130may create a plurality of audio watermarks136that uniquely identify each of the plurality of users126.

Furthermore, althoughFIG.1describes and illustrates particular components, devices, or systems carrying out particular actions, this disclosure contemplates any suitable combination of any suitable components, devices, or systems carrying out any suitable actions.

FIG.2illustrates a method200for using an audio watermark to join a meeting, in accordance with certain embodiments. Method200begins at step205. At step210of method200, a meeting application connects a user to a meeting session using a mobile device. For example, referring toFIG.1, meeting application130may connect user126to meeting session132using mobile device120a. The meeting session may be an audio session, a video session, a web conferencing session, and the like. The user may join the meeting session from their mobile device while commuting to work. Method200then moves from step210to step215.

At step215of method200, the meeting application creates an audio watermark for the user of the meeting session. For example, referring toFIG.1, meeting application130may create audio watermark136for user126of meeting session132. The audio watermark includes an identification of the user and an identification of the meeting session. The audio watermark may be repeatedly embedded throughout the audio content of the meeting session. Method200then moves from step215to step220.

At step220of method200, a local device detects the audio watermark. For example, referring toFIG.1, local device120bmay use watermark detector138to detect audio watermark136by listening, via microphone122bof local device120b, for audio watermark136output by speaker124aof mobile device120a. In certain embodiments, the local device detects the audio watermark as the user and the mobile device move within proximity of the local device (e.g., the user enters their office). Method200then moves from step215to step220.

At step225of method200, the local device decodes the audio watermark. For example, referring toFIG.1, local device120bmay use watermark decoder140to decode audio watermark136in response to detecting audio watermark136. In certain embodiments, the meeting session determines a user identification and an identification of meeting session embedded in audio watermark136. Method200then moves from step225to step230.

At step230of method200, the local device attempts to identify the user and the meeting session from the decoded audio watermark. For example, referring toFIG.1, local device120bmay determine user identification134and an identification of meeting session132from the decoded information and use user identification134and the identification of meeting session132to identify user126of meeting session132. If the local device fails to identify the user of the meeting session (e.g., the user identification and/or the identification of the meeting session are invalid or do not have a match), then method200advances from step230to step260, where method200ends.

If, at step230of method200, the local device identifies the user of the meeting session (e.g., the user identification and the identification of the meeting session), then method200moves from step230to step235, where the local device initiates activation of a virtual assistant. For example, referring toFIG.1, meeting session132may initiate activation of virtual assistant150in response to identifying user126and meeting session132. Method200then moves from step235to step240, where the local device instructs the virtual assistant to communicate with the user. For example, referring toFIG.1, local device120bmay instruct virtual assistant150to interact with user126. In certain embodiments, the meeting application communicates an oral or visual notification to the user. For example, the meeting application may ask the user whether they would like to move the meeting session to a different device. Method200then moves from step240to step245.

At step245of method200, the virtual assistant receives an input from the user. For example, referring toFIG.1, virtual assistant150may receive user input154from user126. The user input may be received by an input device such as a speaker, a touch screen, and the like. Method200then moves from step245to step250, where the virtual assistant determines whether the user input has instructed the meeting application to move the meeting session from the mobile device to the local device. If the virtual assistant determines that the user input has not instructed the meeting application to move the meeting session from the mobile device to the local device, then method200advances from step250to step260, where method200ends.

If, at step250of method200, the virtual assistant determines that the user input has instructed the meeting application to move the meeting session from the mobile device to the local device, then method200moves from step250to step255, where the virtual assistant instructs the meeting application to move the meeting session from the user's mobile device to the user's local device. Method200then moves from step255to step260, where method200ends. As such, method200provides an assisted, fast, efficient, and secure process of using an audio watermark to move a meeting session between devices.

Although this disclosure describes and illustrates particular steps method200ofFIG.2as occurring in a particular order, this disclosure contemplates any suitable steps of method200ofFIG.2occurring in any suitable order. For example, the meeting session may create the watermark for the user prior to connecting the user to the meeting session.

Although this disclosure describes and illustrates an example method for using an audio watermark to join a meeting including the particular steps of the method ofFIG.2, this disclosure contemplates any suitable method for using an audio watermark to join a meeting including any suitable steps, which may include all, some, or none of the steps of the method ofFIG.2, where appropriate. For example, method200may determine whether the user has instructed the meeting application to move the meeting from a local device to a mobile device in addition to (or in lieu of) steps250and255.

Furthermore, althoughFIG.2describes and illustrates particular components, devices, or systems carrying out particular actions, this disclosure contemplates any suitable combination of any suitable components, devices, or systems carrying out any suitable actions.

FIG.3illustrates an example computer system300. In particular embodiments, one or more computer system300perform one or more steps of one or more methods described or illustrated herein. In particular embodiments, one or more computer system300provide functionality described or illustrated herein. In particular embodiments, software running on one or more computer system300performs one or more steps of one or more methods described or illustrated herein or provides functionality described or illustrated herein. Particular embodiments include one or more portions of one or more computer system300. Herein, reference to a computer system may encompass a computing device, and vice versa, where appropriate. Moreover, reference to a computer system may encompass one or more computer systems, where appropriate.

In particular embodiments, computer system300includes a processor302, processor304, storage306, an input/output (I/O) interface308, a communication interface310, and a bus312. Although this disclosure describes and illustrates a particular computer system having a particular number of particular components in a particular arrangement, this disclosure contemplates any suitable computer system having any suitable number of any suitable components in any suitable arrangement.

In particular embodiments, processor302includes hardware for executing instructions, such as those making up a computer program. As an example and not by way of limitation, to execute instructions, processor302may retrieve (or fetch) the instructions from an internal register, an internal cache, processor304, or storage306; decode and execute them; and then write one or more results to an internal register, an internal cache, processor304, or storage306. In particular embodiments, processor302may include one or more internal caches for data, instructions, or addresses. This disclosure contemplates processor302including any suitable number of any suitable internal caches, where appropriate. As an example and not by way of limitation, processor302may include one or more instruction caches, one or more data caches, and one or more translation lookaside buffers (TLBs). Instructions in the instruction caches may be copies of instructions in processor304or storage306, and the instruction caches may speed up retrieval of those instructions by processor302. Data in the data caches may be copies of data in processor304or storage306for instructions executing at processor302to operate on; the results of previous instructions executed at processor302for access by subsequent instructions executing at processor302or for writing to processor304or storage306; or other suitable data. The data caches may speed up read or write operations by processor302. The TLBs may speed up virtual-address translation for processor302. In particular embodiments, processor302may include one or more internal registers for data, instructions, or addresses. This disclosure contemplates processor302including any suitable number of any suitable internal registers, where appropriate. Where appropriate, processor302may include one or more arithmetic logic units (ALUs); be a multi-core processor; or include one or more processors302. Although this disclosure describes and illustrates a particular processor, this disclosure contemplates any suitable processor.

In particular embodiments, processor304includes main memory for storing instructions for processor302to execute or data for processor302to operate on. As an example and not by way of limitation, computer system300may load instructions from storage306or another source (such as, for example, another computer system300) to processor304. Processor302may then load the instructions from processor304to an internal register or internal cache. To execute the instructions, processor302may retrieve the instructions from the internal register or internal cache and decode them. During or after execution of the instructions, processor302may write one or more results (which may be intermediate or final results) to the internal register or internal cache. Processor302may then write one or more of those results to processor304. In particular embodiments, processor302executes only instructions in one or more internal registers or internal caches or in processor304(as opposed to storage306or elsewhere) and operates only on data in one or more internal registers or internal caches or in processor304(as opposed to storage306or elsewhere). One or more memory buses (which may each include an address bus and a data bus) may couple processor302to processor304. Bus312may include one or more memory buses, as described below. In particular embodiments, one or more memory management units (MMUs) reside between processor302and processor304and facilitate accesses to processor304requested by processor302. In particular embodiments, processor304includes random access memory (RAM). This RAM may be volatile memory, where appropriate. Where appropriate, this RAM may be dynamic RAM (DRAM) or static RAM (SRAM). Moreover, where appropriate, this RAM may be single-ported or multi-ported RAM. This disclosure contemplates any suitable RAM. Processor304may include one or more memories304, where appropriate. Although this disclosure describes and illustrates particular memory, this disclosure contemplates any suitable memory.

In particular embodiments, storage306includes mass storage for data or instructions. As an example and not by way of limitation, storage306may include a hard disk drive (HDD), a floppy disk drive, flash memory, an optical disc, a magneto-optical disc, magnetic tape, or a Universal Serial Bus (USB) drive or a combination of two or more of these. Storage306may include removable or non-removable (or fixed) media, where appropriate. Storage306may be internal or external to computer system300, where appropriate. In particular embodiments, storage306is non-volatile, solid-state memory. In particular embodiments, storage306includes read-only memory (ROM). Where appropriate, this ROM may be mask-programmed ROM, programmable ROM (PROM), erasable PROM (EPROM), electrically erasable PROM (EEPROM), electrically alterable ROM (EAROM), or flash memory or a combination of two or more of these. This disclosure contemplates mass storage306taking any suitable physical form. Storage306may include one or more storage control units facilitating communication between processor302and storage306, where appropriate. Where appropriate, storage306may include one or more storages306. Although this disclosure describes and illustrates particular storage, this disclosure contemplates any suitable storage.

In particular embodiments, I/O interface308includes hardware, software, or both, providing one or more interfaces for communication between computer system300and one or more I/O devices. Computer system300may include one or more of these I/O devices, where appropriate. One or more of these I/O devices may enable communication between a person and computer system300. As an example and not by way of limitation, an I/O device may include a keyboard, keypad, microphone, monitor, mouse, printer, scanner, speaker, still camera, stylus, tablet, touch screen, trackball, video camera, another suitable I/O device or a combination of two or more of these. An I/O device may include one or more sensors. This disclosure contemplates any suitable I/O devices and any suitable I/O interfaces308for them. Where appropriate, I/O interface308may include one or more device or software drivers enabling processor302to drive one or more of these I/O devices. I/O interface308may include one or more I/O interfaces308, where appropriate. Although this disclosure describes and illustrates a particular I/O interface, this disclosure contemplates any suitable I/O interface.

In particular embodiments, communication interface310includes hardware, software, or both providing one or more interfaces for communication (such as, for example, packet-based communication) between computer system300and one or more other computer system300or one or more networks. As an example and not by way of limitation, communication interface310may include a network interface controller (NIC) or network adapter for communicating with an Ethernet or other wire-based network or a wireless NIC (WNIC) or wireless adapter for communicating with a wireless network, such as a Wi-Fi network. This disclosure contemplates any suitable network and any suitable communication interface310for it. As an example and not by way of limitation, computer system300may communicate with an ad hoc network, a personal area network (PAN), a LAN, a WAN, a MAN, or one or more portions of the Internet or a combination of two or more of these. One or more portions of one or more of these networks may be wired or wireless. As an example, computer system300may communicate with a wireless PAN (WPAN) (such as, for example, a BLUETOOTH WPAN), a Wi-Fi network, a WI-MAX network, a cellular telephone network (such as, for example, a Global System for Mobile Communications (GSM) network, a 3G network, a 4G network, a 5G network, an LTE network, or other suitable wireless network or a combination of two or more of these. Computer system300may include any suitable communication interface310for any of these networks, where appropriate. Communication interface310may include one or more communication interfaces310, where appropriate. Although this disclosure describes and illustrates a particular communication interface, this disclosure contemplates any suitable communication interface.