The present technology relates to systems and methods for encoding and decoding audio/video and other digital data. More particularly, the technology relates to computer architecture and operating methods that can enable decoders to decode unsupported formats of audio/video and other multimedia.
Digital audio/video and general digital multimedia capabilities can be incorporated into a wide range of devices, including digital televisions, digital direct broadcast systems, wireless communication devices such as radio telephone handsets, wireless broadcast systems, personal digital assistants (PDAs), laptop or desktop computers, digital cameras, digital recording devices, video gaming devices, video game consoles, and the like. Digital devices implement image and video encoding techniques or formats such as JPEG, GIF, RAW, TIFF, PBM, MPEG-2, MPEG-4, and H.264/MPEG-4, Part 10, Advanced Video Coding (AVC), to store, transmit and receive digital images and video efficiently. Digital devices implement audio encoding techniques or formats such as, AAC, MP3, and WAV to store, transmit, and receive digital audio efficiently. Digital devices further implement additional data and graphics encoding techniques or formats such as IGES, 3DT, PS, MNG, ODF and SVG.
Audio, video and other digital data are commonly encoded prior to transmission or storage by an encoder, e.g., a server. The encoding typically consists of operations such as compression or organization into a selected format. The audio, video and other digital data, collectively termed digital multimedia, may be independently stored or provided to a user. Alternatively, the digital multimedia may be embedded in other digital data provided to a user. For instance, an image, video, or animation may be part of an electronic newspaper article, an electronic slideshow, or a technical paper. In either case, the digital multimedia must be decoded prior to display by decoders resident on devices such as mobile devices, DVD players, Blu-Ray players, TV sets, tablets, laptops, computers, or set top boxes. However, a particular decoder may not support decoding of the format used by the encoder. For example, the format used by the encoder may be a legacy format no longer supported by decoders, or may be a new format that the decoder does not support.
Since different decoders may support different formats, traditionally digital multimedia needed to be coded in many different formats to support many different decoders. For example, a user downloading an audio/video file from a server through a network such as the Internet, may have many devices such as a mobile phone, a TV set, a laptop, etc. The downloaded content is traditionally in a single format. However, each of the user's devices may be configured to decode a different format. Accordingly, the user may need to download multiple versions of the audio/video data, each in a different format, for each of the decoders. This leads to bandwidth usage of the network for each version downloaded. Alternatively, the user might download and install a new decoder for each codec type on each device in order to decode the encoded multimedia. However, this solution requires that all legacy formats be supported on all devices. As a third alternative, the user may transcode (decode and re-encode) the digital multimedia received from the downloaded format to each format required for each device. However, this requires computational resources to decode the digital multimedia from the received format and re-encode the digital multimedia into the desired format. Further, this requires memory resources to store each copy of the digital multimedia in each of the desired formats. Additionally, decoding and re-encoding of digital data can lead to loss in quality due to both the loss in precision and the fact that decoding and encoding processes for multimedia data are often lossy as opposed to lossless processes.
One potential technique for avoiding transcoding and to adapt to video content is to provide switches between pre-determined standardized algorithms and tools as suggested in 1997 in Section 2.2.1 of “The MPEG-4 Systems and Description Language: A Way Ahead in Audio Visual Information Representation” by A. Ovaro, et al. As described in Section 2.2.1.3 of this document, the drawbacks include exhaustive specification of all configurations, difficulty of scaling up with increase in available tools, and challenges in anticipating future codec needs.
Similarly, a system for implementing reconfiguration of decoder algorithm elements using flexible or fixed libraries at both the encoder and decoder is proposed in Section 2.2.2 of “The MPEG-4 Systems and Description Language: A Way Ahead in Audio Visual Information Representation” by A. Ovaro, et al. and described in more detail “Whitepaper on Reconfigurable Video Coding (RVC)” ISO/IEC JTCI/SC20/WG11 document N9586 by E. Jang, et al. Information about which tools to select from a decoder library is transmitted either prior to encoded audio/video transmission or is embedded within the compressed audio/video bitstream. Systems for implementing intermittent configuration of algorithms are described in U.S. Pat. No. 5,987,181. Decoding tools or algorithms are selected from local libraries at the decoder through indicators embedded within the compressed bitstream. However, these approaches are limited to specific, pre-determined toolsets and restrict flexibility of systems.
Two systems for partially reconfiguring decoders without the use of local libraries at the decoder are given “Dynamic Replacement of Video Coding Elements” by Bystrom, et al. and “A Syntax for Defining, Communicating, and Implementing Video Decoder Function and Structure” by Kannagara, et al. The first transmits a tool for an inverse transform at the start of an encoded video frame or transmits a binary patch for replacing code in a decoder. The latter transmits encoded algorithms or data with the compressed video and adds the encoded algorithms to the decoder or replaces existing algorithms within the decoder.
The systems, methods, and devices described herein each may have several aspects, no single one of which is solely responsible for its desirable attributes. Without limiting the scope of this disclosure as expressed by the claims which follow, its more prominent features will now be discussed briefly. After considering this discussion, and particularly after reading the section entitled “Detailed Description” one will understand how the features of this technology provide advantages that include, without being limited thereto, enabling decoders to decode unsupported multimedia formats.
One aspect of this disclosure is a multimedia processing engine. The multimedia processing engine comprises a format analyzer configured to determine the format of multimedia data. The engine also includes a functionality generator in communication with the format analyzer. The functionality generator is configured to select or generate functionality for decoding the multimedia data.
Another aspect of this disclosure is a multimedia processing engine comprising a functionality interpreter. The functionality interpreter is configured to receive data corresponding to a functionality. The functionality interpreter is further configured to generate the functionality based on the data. The engine also includes a functionality instantiator. The functionality instantiator is configured to generate a decoder based on the functionality. The decoder is configured to decode multimedia data.
The foregoing and other features of the present disclosure will become more fully apparent from the following description and appended claims, taken in conjunction with the accompanying drawings. Understanding that these drawings depict only several embodiments in accordance with the disclosure and are not to be considered limiting of its scope, the disclosure will be described with additional specificity and detail through use of the accompanying drawings.
The following detailed description is directed to certain specific embodiments. However, the teachings herein can be applied in a multitude of different ways, including for example, as defined and covered by the claims. It should be apparent that the aspects herein may be embodied in a wide variety of forms and that any specific structure, function, or both being disclosed herein is merely representative. Based on the teachings herein one skilled in the art should appreciate that an aspect disclosed herein may be implemented independently of any other aspects and that two or more of these aspects may be combined in various ways. For example, a system or apparatus may be implemented or a method may be practiced using any number of the aspects set forth herein. In addition, such a system or apparatus may be implemented or such a method may be practiced using other structure, functionality, or structure and functionality in addition to or other than one or more of the aspects set forth herein. In this description, reference is made to the drawings wherein like parts are designated with like numerals throughout.
Various embodiments of systems and methods are described herein for encoding and decoding digital multimedia and/or functionality. In the embodiments described herein, the systems and methods may allow digital multimedia to be encoded and decoded in a more efficient manner. For example, the systems and methods described herein may allow for configuration of a decoder to support decoding of additional formats of multimedia. Further, the systems and methods may allow for any type of configuration, without requiring replacement of the decoder hardware or download of new configuration data from an alternate data source other than the data provided with the digital multimedia.
In one embodiment, the systems and methods described herein correspond to a reconfigurable decoder/receiver of digital multimedia. The systems and methods described herein further correspond to a multimedia analyzer/functionality generator configured to determine the coding format of encoded multimedia and generate syntax elements (e.g., codewords) for use by the receiver that are used to configure the decoder as further discussed below. It should be noted that certain embodiments described below may reference codewords, however, other syntax elements may be similarly used.
The format analyzer 102 is configured to receive encoded multimedia data. The format analyzer 102 is configured to analyze the encoded multimedia in order to determine the format in which the multimedia is encoded. For example, the format analyzer 102 may compare the encoded multimedia against structures stored in a library such as a local library (e.g., a local memory store) of the format analyzer 102 or a non-local library (e.g., network storage), where different structures are associated with different formats. The structures may include, for example, file names, stream headers, formatting codes, etc. Based on the comparison to the structures, if a format with matching structures is found, the format analyzer 102 determines the format of the encoded multimedia. If matching structures are not found, the format analyzer 102 may determine that the multimedia data are encoded in an unknown format. One of ordinary skill in the art should recognize that the format analyzer 102 may be configured to compare and/or analyze the multimedia data to interpret a format in other manners as well. The format analyzer 102 further provides information about the detected format or a signal indicating an unknown format to the decoder functionality generator 108. In an alternate embodiment the format analyzer 102 may be configured to additionally receive a second encoded multimedia stream so that multiple streams may be processed in serial or in parallel. The format analyzer 102 is configured to analyze the second encoded multimedia data in order to determine the format in which the multimedia data are encoded. The format of the second encoded multimedia stream may differ from that of the first encoded multimedia stream. The format of the second stream is provided to the decoder functionality generator 108.
The decoder functionality generator 108 is configured to receive the information about the detected format or a signal indicating an unknown format from the format analyzer 102. If the format is known, then the decoder functionality generator 108 identifies one or more functionalities that are capable of decoding the detected format. The functionalities may further be stored in a local library or a non-local library. The decoder functionality generator 108 may then select a particular functionality based on the identified functionalities that are capable of decoding the detected format. In one embodiment, the decoder functionality generator 108 has only one functionality to select from the library per format. In another embodiment, the decoder functionality generator 108 is configured to receive functionality from a user as an input. In another embodiment the decoder functionality generator 108 may be configured to receive information about a detected format for a second input encoded multimedia stream from the format analyzer 102. The decoder functionality generator 108 may be configured to process the information about the detected formats of the first and second input encoded multimedia streams in parallel or in serial.
In another embodiment, the decoder functionality generator 108 has multiple functionalities to select from the library per format. Different functionalities may have different features such as type of post processing of decoded data, different temporal and spatial prediction algorithms, etc. Further, different functionalities may require different complexity of the decoder. For example, some functionalities may require more or less memory for storage of code and data elements. Some functionalities may require more or less computational power to execute. Some functionalities may require more or less time for the decoder to execute. Some functionalities may require more bandwidth to transmit over a communication channel. Accordingly, the decoder functionality generator 108 may optionally receive an input indicating information regarding the decoder to which the multimedia data are to be sent and/or information regarding the communication channel over which the multimedia data are to be sent. Based on this information, the decoder functionality generator 108 may select a particular functionality for decoding the determined format. For example, functionalities that require less bandwidth to transmit may be used when the information indicates that channel bandwidth is limited. Further, functionalities that require less power may be used when the information indicates the decoder has a particular constraint on power consumption. Further, functionalities that require less storage may be used when the information indicates the decoder has limited space, or a storage medium on which the functionality or encoded multimedia is stored has limited space. Further, compression performance of the decoding algorithms in terms of bitrate for a particular subjective or objective quality level may be used when information regarding this parameter is available. The decoder functionality generator 108 may be configured to weigh multiple points of information in selecting the functionality. The relative weights assigned to each point of information may be static or adjustable. One of ordinary skill in the art should understand similar selection processes for functionalities may be performed.
The decoder functionality generator 108 further sends information regarding the selected functionality to the optional source/channel encoder 110 or directly to the format annotator 106. In one embodiment the information corresponds to syntax elements such as codewords. The decoder functionality generator 108 maps the functionality to one or more syntax elements with optional overhead information. The overhead information may correspond to information used by the decoder to identify and/or decode the syntax elements such as a header that identifies the data as codewords. In another embodiment, the mapping function is performed by a functionality encoder that is part of a separate module than the decoder functionality generator 108. As an example, the decoder functionality generator 108 may generate or select from algorithms written in a specific language, such as C. The decoder functionality generator 108 or the external functionality encoder may then map the C-language instructions to bytecodes or other codewords with optional overhead information. In a further embodiment the functionality generator 108 sends information regarding the selected functionality corresponding to a second input encoded multimedia stream to the optional source/channel encoder 110 or directly to the format annotator 106. The information may be transmitted in sequence with the information regarding the selected functionality of a first encoded multimedia stream or may be sent separately from that of a first encoded multimedia stream.
The optional source/channel encoder 110 is configured to receive the syntax elements and optional overhead information from the decoder functionality generator 108 and to source and/or channel encode the syntax elements and overhead information. Source coding may include compression and various entropy encoding configurations may be used as would be understood by one of ordinary skill in the art. Various channel encoding configurations may be used as would be understood by one of ordinary skill in the art. Furthermore, joint source-channel coding may be used as would be understood by one of ordinary skill in the art. The source/channel encoder 110 may then transmit the encoded data to the format annotator 106.
The format annotator 106 is configured to receive the encoded multimedia from the optional buffer 104 or is in direct communication with the storage or other mechanism supplying the encoded multimedia. The format annotator 106 is further configured to receive the syntax elements and optional overhead information directly from the decoder functionality generator 108, or source and/or channel encoded syntax elements and optional overhead information from the source/channel encoder 110. In one embodiment, the format annotator 106 is configured to act as a multiplexer. Accordingly, the format annotator 106 is configured to multiplex the syntax elements and optional overhead information (source and/or channel encoded or not) with the encoded multimedia to form a single set of bits of data or bitstream corresponding to both pieces of data. In another embodiment, the format annotator 106 keeps the encoded multimedia and syntax elements and optional overhead information (source and/or channel encoded or not) as separate sets of bits of data or bitstreams.
The format annotator 106 then makes the bitstream(s) available to a receiver/decoder or a storage unit. Optionally, the format annotator 106 makes the bitstream(s) available to an optional multiplexer 112. In one embodiment, the optional multiplexer 112 is configured to receive the bitstream(s) from the format annotator 106 and multiplex the bitstream(s) with a second digital data stream. The second digital data stream which is input to the optional multiplexer 112 may be an electronic document, a web page, or other electronic data. In another embodiment, the optional multiplexer 112 is configured to receive the bitstream(s) from the format annotator 106 and multiplex the bitstream(s) with a second digital data stream and overhead. The overhead may consist of information such as synchronization codes, identification information, and additional access mechanism instructions. The optional multiplexer 112 then outputs the multiplexed bitstream to a receiver/decoder or a storage unit. For example, the format annotator 106 may output the bitstream(s) or the optional multiplexer 112 may output the multiplexed bitstream to a storage medium, such as random access memory (RAM) such as synchronous dynamic random access memory (SDRAM), read-only memory (ROM), non-volatile random access memory (NVRAM), electrically erasable programmable read-only memory (EEPROM), FLASH memory, magnetic or optical data storage media (e.g., DVD, Blu-Ray, CD, etc.), and the like. The storage medium may be accessible by the receiver/decoder. Additionally or alternatively, the format annotator 106 outputs the bitstream(s) or the optional multiplexer 112 outputs the multiplexed bitstream for wired or wireless transmission to the receiver/decoder. For example, the format annotator 106 outputs the bitstream(s) or the optional multiplexer 112 outputs the multiplexed bitstream to an appropriate transceiver and/or modem for transmitting the bitstream(s) to the receiver/decoder over one or more communication channels. Any known wired and/or wireless protocol may be used such as, IEEE 802.11 standards, including IEEE 802.11(a), (b), or (g), the BLUETOOTH standard, CDMA, GSM, TDMA, Ethernet (IEEE 802.3), and/or USB. The receiver/decoder may utilize the bitstream(s) to configure a decoder to decode the encoded multimedia data as discussed in further detail below with respect to
The presence or absence of optional components in the receiver/decoder 200 may be based on the configuration of components of a corresponding multimedia analyzer/functionality generator (e.g., multimedia analyzer/functionality generator 100) that sends encoded multimedia data and/or functionality to the receiver/decoder 200 for decoding. For example, if multimedia data are sent from an encoder to the receiver/decoder 200 is multiplexed as discussed above with respect to the format annotator 106 and optional multiplexer 112 components of
The buffer 202 is configured to receive encoded multimedia that has been processed by a multimedia format analyzer/functionality generator such as discussed above with respect to
The configuration information source/channel decoder 210 is configured to source and/or channel decode the functionality data bitstream when the data are source and/or channel encoded by the corresponding encoder. The configuration information source/channel decoder 210 is configured to send the decoded functionality data bitstream to the functionality interpreter and instantiator 206. In a further embodiment, if functionality data corresponding to a second encoded multimedia stream are transmitted by the multimedia analyzer/functionality generator 100 or received from a storage medium then the configuration information source/channel decoder 210 may be configured to receive the encoded functionality data corresponding to the second stream. Further, the configuration information source/channel decoder 210 may be configured to process functionality data corresponding to multiple compressed multimedia streams in serial or in parallel.
The functionality interpreter and instantiator 206 receives the functionality data bitstream, which includes syntax elements and optional first and second overhead information, as discussed above. The functionality interpreter and instantiator 206 maps the syntax elements to the correct functionality. For example, the syntax elements may map to functionality such as processing elements, structures, and or code segments. Based on these syntax elements, the functionality interpreter and instantiator 206 interconnects, parameterizes, or adds to existing syntax elements used by the multimedia decoder 204. The functionality interpreter and instantiator 206 generates machine code or hardware organization and links the code or organization with the multimedia decoder 204, thus configuring the multimedia decoder 204 based on the received functionality. In a further embodiment, if functionality data corresponding to a second encoded multimedia stream are transmitted by the multimedia analyzer/functionality generator 100 then the functionality interpreter and instantiator 206 may be configured to receive the functionality data corresponding to the second stream. Further, the functionality interpreter and instantiator 206 may be configured to process functionality data corresponding to multiple encoded multimedia streams in serial or in parallel. In another embodiment, the functionality interpreter and instantiator 206 may delay some or all of its operations until triggered by an optional control signal.
The multimedia decoder 204 is configured by the functionality interpreter and instantiator 206 as discussed above. The multimedia decoder 204 further receives the multimedia data to be decompressed according to the received functionality from the buffer 202. The multimedia decoder 204 decompresses the encoded multimedia data and outputs the decoded multimedia data. In a further embodiment, if functionality data corresponding to a second encoded multimedia stream is transmitted by the multimedia analyzer/functionality generator 100 then the multimedia decoder 204 may be configured to decompress the second stream. Further, the multimedia decoder 204 may be configured to process the multiple compressed multimedia streams in serial or in parallel. In another embodiment, the multimedia decoder 204 may delay decoding the encoded multimedia data until triggered by an optional control signal. The multimedia decoder 204 may comprise a field programmable gate array (FPGA) or other suitable configurable circuitry.
One of ordinary skill in the art should recognize that various steps may be added or omitted from the processes 300, 400, and 500. Further, the various steps of the processes 300, 400, and 500 may be performed in a different order than described above.
In the example format 600, the header 602a indicates that a multiplexor is defined in block 601a. Block 601a includes a start and end field 604a and 606a respectively. These fields indicate where the multiplexor within block 601a is located. Fields 604a and 606a indicate offsets to the beginning and end of the multiplexor field 610, shown by the arrows in
Each of the fields 610a-c may store an accessor. An accessor may include data defining a platform independent algorithm for decoding data stored within the blocks 601a-c. In the case of block 601a, which stores a demultiplexor in field 610a, the accessor/demultiplexor 610a may demultiplex other blocks within the data format 600, such as data 640, which includes blocks 601b-c. For example, the demultiplexor stored in the field 610a may be configured to decode blocks 601b-c so as to extract block 601a-b, instantiate the accessors/decoders stored in fields 610b-c and pass the accessors 610b-c “pointers” to their respective data portions 612b-c.
Each of the accessor/decoder blocks 601b-c may also include data begin and data end fields 626a-b and 628a-b respectively. The data begin and data end fields 628a-b indicate where in the blocks 601b-c the data fields 612b-c begin and end respectively.
The format 700 may provide for operation as follows. An archive may be comprised of the zip file 705, which may, in some aspects, be stored on a stable storage as a single set of bits. The stable storage may comprise computer data storage that provides or guarantees atomicity (e.g., atomic writes) and/or may survive hardware and/or power failures. In some aspects, the single set of bits may be identified by a name used by a file system of an operating system (e.g. a file name). The file name may be a unique identifier identifying a single unique computer file corresponding to specific data recorded in a computer storage device. Thus, the single set of bits may correspond to a single computer file. In some aspects, the zip file 705 may be generated by the encoder 100. The encoder 100 may stream the zip file 705 to the decoder 200 in some aspects. The decoder 200 may receive the archive format 700, unzip the zip file 705, and load the mark up portion 710 (which may be in a file format) using a mark-up parser 725, such as a browser program, for example, Microsoft Edge, Google Chrome, Firefox, or the like. The mark-up portion 710 may instruct the mark-up parser 725 to load and/or instantiate one or more accessors stored in the accessor portion 715 by an accessor execution engine 726.
In some aspects, the components of the format 700, such as the mark-up 710, accessors 715, and data portions 720 may be encapsulated by a different technology than zip files. For example, in some aspects, the components may be encapsulated using “tar” or rar format files. In some aspects, the components of the format 700 may not be encapsulated into a single file, but may be provided in a data stream as independent files, without any technical encapsulation.
After loading the one or more accessors, the loaded accessors may be executed by the accessor execution engine 726. In some aspects, the accessor execution engine 726 may be integrated with the mark up parser 725, for example, as is the case with many common browsers. In some aspects, the accessor execution engine 726 may be a program separate from the mark up parser 725. For example, in some aspects the accessor execution engine 726 may be a java virtual machine, or a LLVM interpreter (when the accessors are implemented using LLVM). When the one or more accessors from the accessor portion 715 are executed, they may be passed one or more input parameters identifying a location of a respective portion of the data portion 720. The one or more accessors may then decode their respective portions of the data portion 720, such as one of data portions 722a-c. One example accessor that may be stored in the accessor portion 715 may implement an audio or video player, with its respective data (e.g. one of 722a-c) in data portion 720 storing audio or video data respectively.
In block 805, encoded data is received. For example, in some aspects, encoded data may be received by the format analyzer 102 of
In block 810, one or more accessors for the encoded data (received in block 805) may be identified. For example, in some aspects, the format analyzer 102 may analyze the format of the encoded data to determine a type of accessor that is capable of or configured to decode the encoded data. The format of the encoded data may be passed to the decoder functionality generator 108 of
In block 815, a mark-up file the specifies that the selected accessor(s) should be invoked to process the encoded data is generated. For example, block 815 may generate the mark up portion 710 discussed above with respect to
In block 820, the mark-up, accessors, and encoded data are packaged. For example, in aspects generating the format 700, packaging may include compressing and/or encoding the mark-up, accessors, and encoded data into a single file, such as a zip file or an ISO-BMFF file.
In aspects generating the format 600, packaging may include generating the data structure as shown in
In block 905, data is received from a data stream. In some aspects, the data received from the data stream may be received from a single file, such as a zip file, such as zip file 705 discussed above with respect to
The first portion of data may include data defining instructions that implement a demultiplexing algorithm for the second portion. For example, as shown in
The demultiplexing algorithm may be represented in the data stream as a set of platform independent instructions for an execution engine. For example, in some aspects, the demultiplexing algorithm may be represented by java byte codes that may be executed in a platform independent manner via a Java virtual machine. In some other aspects, the demultiplexing algorithm may be represented as LLVM byte codes
In block 910, instructions are extracted from the first portion of data received in block 905. The instructions implement a demultiplexor for the second portion of the data stream. The demultiplexor may include platform independent instructions, such as intermediate codes or byte codes for an interpreter or execution engine. For example, in some aspects, the demultiplexor may be represented as java byte code or LLVM byte codes. In some aspects, the demultiplexor may be provided in source code format. For example, the instructions defined by the demultiplexor may be C, C++, C#, or Java source level source statements that may be compiled and linked in block 710. In some aspects, the instructions may represent scripting source code, such as that found in c shell, korn shell, bash shell, perl, or even python.
For example, in some aspects receiving format 600, extracting instructions may include parsing the format 600 to identify field 610a. In aspects receiving format 700, extracting the instructions may include unzipping the file 705 and loading the mark-up portion 710 into the mark up parser 725. The mark-up portion 710 may indicate to the mark-up parser 725 that it should load and execute one or more accessors from the accessor portion 715. For example, a first accessor loaded by the mark-up portion 710 from the accessor portion 715 may be a demultiplexer for the data portion 720. In some aspects, the accessor 716a may also demultiplex the accessors 716b-d as well.
In block 915, the demultiplexer is instantiated and executed. Instantiating and executing the demultiplexer may include loading the instructions into executable hardware memory and passing control of execution to a starting statement or instruction of the demultiplexer. Some aspects of block 715 include passing one or more parameters to the demultiplexor when it is executed. For example, the demultiplexer may be passed a pointer or other identifier to the start of data to be demultiplexed. When processing the example format of
In the archive format 700 discussed above with respect to
As discussed above with respect to
The demultiplexer may then instantiate and execute the first accessor and second accessor. The first accessor may be passed first data as input. The first data may also be included in the second portion, and may be identified by the demultiplexer. The second accessor may be passed second data as input, which may also be include in the second portion, and may be identified by the demultiplexer. In some aspects, first and second data are included in a single file within the second portion. In some other aspects, first and second data are stored as separate files within the second portion.
The technology is operational with numerous other general purpose or special purpose computing system environments or configurations. Examples of well-known computing systems, environments, and/or configurations that may be suitable for use with the technology disclosed herein include, but are not limited to, personal computers, server computers, hand-held or laptop devices, multiprocessor systems, microprocessor-based systems, programmable consumer electronics, network PCs, minicomputers, mainframe computers, distributed computing environments that include any of the above systems or devices, and the like.
As used herein, instructions refer to computer-implemented steps for processing information in the system. Instructions can be implemented in software, firmware or hardware and include any type of programmed step undertaken by components of the system.
A Local Area Network (LAN), personal area network (PAN), or Wide Area Network (WAN) may be a home or corporate computing network, including access to the Internet, to which computers and computing devices comprising the system are connected. In one embodiment, the LAN conforms to the Transmission Control Protocol/Internet Protocol (TCP/IP) industry standard.
As used herein, multimedia, multimedia data, digital data, and digital multimedia refer to images, graphics, sounds, video, animations, electronic documents, scientific data, or any other digital data type data that is entered into the system.
As used herein, encoded digital data refers to data that are stored or held in a data format, which may be compressed or uncompressed.
As used herein, decode refers to decompression, interpretation, playback or conversion.
A microprocessor may be any conventional general purpose single- or multi-chip microprocessor such as a Pentium® processor, a Pentium® Pro processor, a 8051 processor, a MIPS® processor, a Power PC® processor, or an Alpha® processor. In addition, the microprocessor may be any conventional special purpose microprocessor such as a digital signal processor or a graphics processor. The microprocessor typically has conventional address lines, conventional data lines, and one or more conventional control lines.
The system is comprised of various modules/components as discussed in detail. As can be appreciated by one of ordinary skill in the art, each of the modules comprises various sub-routines, procedures, definitional statements and macros. Each of the modules are typically separately compiled and linked into a single executable program. Therefore, the description of each of the modules is used for convenience to describe the functionality of the preferred system. Thus, the processes that are undergone by each of the modules may be arbitrarily redistributed to one of the other modules, combined together in a single module, or made available in, for example, a shareable dynamic link library.
The system may be used in connection with various operating systems such as Linux®, UNIX® or Microsoft Windows®.
The system may be written in any conventional programming language such as C, C++, BASIC, Pascal, or Java, and ran under a conventional operating system. C, C++, BASIC, Pascal, Java, and FORTRAN are industry standard programming languages for which many commercial compilers can be used to create executable code. The system may also be written using interpreted languages such as Perl, Python or Ruby.
A web browser comprising a web browser user interface may be used to display information (such as textual and graphical information) to a user. The web browser may comprise any type of visual display capable of displaying information received via a network. Examples of web browsers include Microsoft's Internet Explorer browser, Netscape's Navigator browser, Mozilla's Firefox browser, PalmSource's Web Browser, Apple's Safari, or any other browsing or other application software capable of communicating with a network.
Those of skill will further appreciate that the various illustrative logical blocks, modules, circuits, and algorithm steps described in connection with the embodiments disclosed herein may be implemented as electronic hardware, computer software, or combinations of both. To clearly illustrate this interchangeability of hardware and software, various illustrative components, blocks, modules, circuits, and steps have been described above generally in terms of their functionality. Whether such functionality is implemented as hardware or software depends upon the particular application and design constraints imposed on the overall system. Skilled artisans may implement the described functionality in varying ways for each particular application, but such implementation decisions should not be interpreted as causing a departure from the scope of the present disclosure.
The various illustrative logical blocks, modules, and circuits described in connection with the embodiments disclosed herein may be implemented or performed with a general purpose processor, a digital signal processor (DSP), an application specific integrated circuit (ASIC), a field programmable gate array (FPGA) or other programmable logic device, discrete gate or transistor logic, discrete hardware components, or any combination thereof designed to perform the functions described herein. A general purpose processor may be a microprocessor, but in the alternative, the processor may be any conventional processor, controller, microcontroller, or state machine. A processor may also be implemented as a combination of computing devices, e.g., a combination of a DSP and a microprocessor, a plurality of microprocessors, one or more microprocessors in conjunction with a DSP core, or any other such configuration.
In one or more example embodiments, the functions and methods described may be implemented in hardware, software, or firmware executed on a processor, or any combination thereof. If implemented in software, the functions may be stored on or transmitted over as one or more instructions or code on a computer-readable medium. Computer-readable media includes both computer storage media and communication media including any medium that facilitates transfer of a computer program from one place to another. A storage media may be any available media that can be accessed by a 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 that can be used to carry or store desired program code in the form of instructions or data structures and that can be accessed by a computer. Also, any connection is properly termed a computer-readable medium. For example, if the software is transmitted from a web site, server, or other remote source using a coaxial cable, fiber optic cable, twisted pair, digital subscriber line (DSL), or wireless technologies such as infrared, radio, and microwave, then the coaxial cable, fiber optic cable, twisted pair, DSL, or wireless technologies such as infrared, radio, and microwave are included in the definition of medium. Disk and disc, as used herein, includes compact disc (CD), laser disc, optical disc, digital versatile disc (DVD), floppy disk and Blu-ray disc where disks usually reproduce data magnetically, while discs reproduce data optically with lasers. Combinations of the above should also be included within the scope of computer-readable media.
With respect to the use of substantially any plural and/or singular terms herein, those having skill in the art can translate from the plural to the singular and/or from the singular to the plural as is appropriate to the context and/or application. The various singular/plural permutations may be expressly set forth herein for sake of clarity.
It will be understood by those within the art that, in general, terms used herein, and especially in the appended claims (e.g., bodies of the appended claims) are generally intended as “open” terms (e.g., the term “including” should be interpreted as “including but not limited to,” the term “having” should be interpreted as “having at least,” the term “includes” should be interpreted as “includes but is not limited to,” etc.). It will be further understood by those within the art that if a specific number of an introduced claim recitation is intended, such an intent will be explicitly recited in the claim, and in the absence of such recitation no such intent is present. For example, as an aid to understanding, the following appended claims may contain usage of the introductory phrases “at least one” and “one or more” to introduce claim recitations. However, the use of such phrases should not be construed to imply that the introduction of a claim recitation by the indefinite articles “a” or “an” limits any particular claim containing such introduced claim recitation to embodiments containing only one such recitation, even when the same claim includes the introductory phrases “one or more” or “at least one” and indefinite articles such as “a” or “an” (e.g., “a” and/or “an” should typically be interpreted to mean “at least one” or “one or more”); the same holds true for the use of definite articles used to introduce claim recitations. In addition, even if a specific number of an introduced claim recitation is explicitly recited, those skilled in the art will recognize that such recitation should typically be interpreted to mean at least the recited number (e.g., the bare recitation of “two recitations,” without other modifiers, typically means at least two recitations, or two or more recitations). Furthermore, in those instances where a convention analogous to “at least one of A, B, and C, etc.” is used, in general such a construction is intended in the sense one having skill in the art would understand the convention (e.g., “a system having at least one of A, B, and C” would include but not be limited to systems that have A alone, B alone, C alone, A and B together, A and C together, B and C together, and/or A, B, and C together, etc.). In those instances where a convention analogous to “at least one of A, B, or C, etc.” is used, in general such a construction is intended in the sense one having skill in the art would understand the convention (e.g., “a system having at least one of A, B, or C” would include but not be limited to systems that have A alone, B alone, C alone, A and B together, A and C together, B and C together, and/or A, B, and C together, etc.). It will be further understood by those within the art that virtually any disjunctive word and/or phrase presenting two or more alternative terms, whether in the description, claims, or drawings, should be understood to contemplate the possibilities of including one of the terms, either of the terms, or both terms. For example, the phrase “A or B” will be understood to include the possibilities of “A” or “B” or “A and B.”
While the above description has pointed out novel features of the technology as applied to various embodiments, the skilled person will understand that various omissions, substitutions, and changes in the form and details of the device or process illustrated may be made without departing from the scope of the instant technology. Therefore, the scope of the technology is defined by the appended claims rather than by the foregoing description. All variations coming within the meaning and range of equivalency of the claims are embraced within their scope.
This application claims the benefit of priority to U.S. Provisional Appl. No. 62/419,206, filed Nov. 8, 2016, which is incorporated in its entirety by reference herein.
Number | Date | Country | |
---|---|---|---|
62419206 | Nov 2016 | US |