SYSTEMS AND METHODS FOR ENCODING AND DECODING

Information

  • Patent Application
  • 20180131743
  • Publication Number
    20180131743
  • Date Filed
    November 08, 2017
    7 years ago
  • Date Published
    May 10, 2018
    6 years ago
Abstract
Systems and methods for multimedia encoding and decoding are disclosed. The systems and methods include multimedia format detection systems, decoder functionality generation systems, decoder instantiation systems, and multimedia processing engines which are capable of selecting a decoder or playback mechanism for each input encoded multimedia stream. The functionality of the decoder or playback mechanism is represented as syntax elements which may be further encoded. The functionality for decoding or playback is then stored or transmitted with the multimedia bitstream. Alternatively, the functionality and multimedia bitstream can be embedded in or associated with a second digital bitstream. Further, the functionality associated with an encoded multimedia stream can be used to instantiate a decoder or playback mechanism and the encoded multimedia stream decoded with the instantiated decoder or mechanism.
Description
BACKGROUND
Field

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.


Description of the Related Art

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.


SUMMARY

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.





BRIEF DESCRIPTION OF THE DRAWINGS

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.



FIG. 1 is a block diagram illustrating a multimedia analyzer/functionality generator that performs techniques as described in this disclosure.



FIG. 2 is a block diagram illustrating a multimedia receiver/decoder that performs techniques as described in this disclosure.



FIG. 3 is a flowchart illustrating an exemplary process for analyzing the format of multimedia data.



FIG. 4 is a flowchart illustrating an exemplary process for generating functionality for a decoder.



FIG. 5 is a flowchart illustrating an exemplary process for generating a decoder.



FIG. 6 is one exemplary embodiment of an archive data format.



FIG. 7 shows another exemplary embodiment of an archive data format.



FIG. 8 describes one exemplary process used by the encoder 100 to generate the format 700 discussed above with respect to FIG. 7.



FIG. 9 describes one exemplary process used by the decoder 200 to process the format 700 discussed above with respect to FIG. 7.





DETAILED DESCRIPTION

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.



FIG. 1 is a block diagram illustrating a multimedia analyzer/functionality generator 100 that performs techniques as described in this disclosure. The multimedia analyzer/functionality generator 100 includes a format analyzer 102 and an optional first buffer 104 each configured to receive multimedia. The optional first buffer 104 is optionally in communication with a format annotator 106. The format analyzer 102 is in communication with a decoder functionality generator 108. The decoder functionality generator 108 is optionally in communication with an optional source/channel encoder 110, which is further in communication with the format annotator 106. Alternatively or additionally, the decoder functionality generator 108 is directly in communication with the format annotator 106. The format annotator 106 is optionally in communication with an optional multiplexer 112. The functionality of the components of the multimedia analyzer/functionality generator 100 is discussed in detail below.


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 FIG. 2.



FIG. 2 is a block diagram illustrating a multimedia receiver/decoder that performs techniques as described in this disclosure. The receiver/decoder 200 includes a buffer 202 in communication with a multimedia decoder 204. The multimedia decoder 204 is further in communication with a functionality interpreter and instantiator 206. The receiver/decoder 200 optionally includes a demultiplexer 208 in communication with the buffer 202 and the functionality interpreter and instantiator 206 (directly or via a configuration information entropy decoder 210). The receiver/decoder 200 further optionally includes the configuration information source/channel decoder 210 in communication with the functionality interpreter and instantiator 206. The configuration information source/channel decoder 210 is further in communication with the optional demultiplexer 208, if the format annotator 106 or the optional multiplexer 112 included in the format analyzer/functionality generator 200 creates a joint bitstream. The functionality of components of the multimedia receiver/decoder 200 is described in further detail below.


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 FIG. 1, the receiver/decoder may include the demultiplexer 208 to demultiplex the multiplexed data. In addition, if the data received from the encoder are source and/or channel encoded as discussed above with respect to FIG. 1, the receiver/decoder 200 may include the source and/or channel decoder 210 to decode the data.


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 FIG. 1. The buffer 202 may receive the encoded multimedia data as a bitstream directly from the multimedia analyzer/functionality generator. Alternatively, the multimedia format analyzer/functionality generator may send a bitstream with the encoded multimedia multiplexed with syntax elements and optional overhead information corresponding to functionality. In another embodiment, the multimedia format analyzer/functionality generator may send a multiplexed bitstream with the encoded multimedia multiplexed with syntax elements and optional overhead information corresponding to functionality and further multiplexed with a second digital data stream and optional overhead. Accordingly, the demultiplexer 208 receives the bitstream and demultiplexes the data into an encoded multimedia data bitstream with the encoded multimedia data and a functionality data bitstream with both the syntax elements and optional overhead information and an optional second data stream. The demultiplexer 208 then sends the encoded multimedia data bitstream to the buffer 202. The demultiplexer 208 further sends the functionality data bitstream to the configuration information source/channel decoder 210 and/or the functionality interpreter and instantiator 206. In a second embodiment, the demultiplexer 208 receives the multiplexed bitstream and demultiplexes the data into an encoded multimedia data bitstream with the encoded multimedia data and a functionality data bitstream with the codewords and first and second sets of optional overhead information.


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.



FIG. 3 is a flowchart illustrating an exemplary process 300 for analyzing the format of multimedia data. Starting at a step 305, encoded multimedia data are received at a multimedia format analyzer. Continuing at a step 310, the multimedia format analyzer compares the encoded multimedia data to structures (e.g., file names, stream headers, formatting codes, etc.) associated with formats. Further at a step 315, the multimedia format analyzer determines whether or not the multimedia data match structures in the library. If, at step 315, the multimedia format analyzer determines the multimedia data match structures in the library, the process continues to a step 320. At the step 320 the multimedia format analyzer outputs an indicator of the format(s) associated with the matching structures. If at step 315, the multimedia format analyzer determines the multimedia data do not match structures in the library, the process continues to a step 325. At the step 325 the multimedia format analyzer outputs an indicator that the format of the multimedia data is unknown.



FIG. 4 is a flowchart illustrating an exemplary process 400 for generating functionality for a decoder. Starting at a step 405, the multimedia decoder functionality generator receives an indicator of a multimedia format. Continuing at a step 410, the multimedia decoder functionality generator optionally further receives information about a receiver/decoder. The information may include information regarding memory, processor, mobility, or power constraints, etc. of the decoder. Further, at a step 415, the multimedia decoder functionality generator further optionally receives information about a communication channel over which encoded multimedia and/or functionality information is to be sent to the receiver/decoder. The information may include bandwidth limitations, load, etc. Next, at a step 420, the multimedia analyzer/functionality generator determines which functionality to select for decoding multimedia data of the indicated multimedia format based on the received indicator, optional information about the decoder, and/or optional information about the communication channel. Continuing at a step 425, the multimedia analyzer/functionality generator selects syntax elements such as codewords that map to the selected functionality. Further at a step 430, the multimedia decoder functionality generator may provide the syntax elements to the receiver/decoder or storage.



FIG. 5 is a flowchart illustrating an exemplary process 500 for generating a decoder. At a step 505, the receiver/decoder receives syntax elements such as codewords. Continuing at a step 510, the receiver/decoder additionally receives encoded multimedia data. Further at a step 515, the decoder generates a new functionality for decoding the encoded multimedia data based on the received syntax elements. Next at a step 520, the decoder decodes the encoded multimedia data using the new functionality.


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.



FIG. 6 is one exemplary embodiment of an archive data format. The format 600 includes three blocks of data 601a-c. Each of blocks 601a-c begins with a header 602a-c respectively. The headers 602a-c may identify the type of data that follows within the respective block 601a-c. For example, each of the header fields 602a-c may determine whether the block of data that follows is a multiplexor or an accessor. An accessor may define platform independent instructions that when executed, are able to interpret, and decode one or more data portions of format 600, discussed further below. A multiplexor, may be considered a specific type of accessor, and may define platform independent instructions that when executed, provide a demultiplexing algorithm for portions of data within the data format 600. Platform independent, as used herein in relation to instructions, algorithms, etc., refers to the ability for the corresponding instructions, algorithms, etc., to be used on computing or processing hardware independent of the operation system or configuration of the hardware. For example, platform independent instructions or algorithms may be operable on any of a Windows, Android, iOS, MasOS, or other computer operating system, for example when used in conjunction with a virtual machine, a Java environment, LLVM interpreter, or similar environment.


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 FIG. 6. Each block 601a-c also includes a parameter specifications field 608a-c. The parameters specifications field 608a-c may indicate which data should be passed to the accessor encoded in the respective block 601a-c. For example, in some aspects, the parameters specifications field 607a-c may include tags for known data types that should be passed to the accessor within blocks 610a-c.


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.



FIG. 7 shows another exemplary embodiment of an archive data format 700. FIG. 7 shows a zip file 705 that includes a mark-up portion 710, one or more accessors 715, and a data portion 720. In some aspects, the mark up portion 710 may be hyper text mark up (HTML) language, extensible markup language (XML) or another mark up language. In some other aspects, portion 710 may define scripting language source code, such as bash, csh, ksh, python, perl, or any other programming language. The accessor(s) 715 may be configured to decode and/or process the data 720. In some aspects, the accessor portion 715 may be comprised of n accessors and the data portion 720 may be comprised of n−1 corresponding data sub-portions for the n accessors. In some aspects, accessor #1716a may be a demultiplexor for accessors 2-4 (n) and/or data portions 722a-c (n−1) for example. In some aspects, the accessors 715 and data 720 may be stored in a single file. In some other aspects, the accessor 715 may be stored in a different file from the data 720. (two separate files included in the zip file 705 for example). In some aspects, each of the individual accessors 716a-d may be stored in separate files. In some aspects, each of the individual data portions 722a-c may be stored in separate files.


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.



FIG. 8 describes one exemplary process used by the encoder 100 to generate the format 700 discussed above with respect to FIG. 7. In another aspect, FIG. 8 below describes one exemplary process used by the encoder 100 to generate the format 600 discussed above with respect to FIG. 6.


In block 805, encoded data is received. For example, in some aspects, encoded data may be received by the format analyzer 102 of FIG. 1. The encoded data may be encoded multimedia data in some aspects. For example, the encoded data may be audio or video data. In some aspects, the data may define a document, such as a word processing document or presentation document.


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 FIG. 1, which selects an appropriate accessor/decoder from an accessor library in some aspects. As discussed above, an accessor for data may be platform independent instructions implementing an algorithm for decoding the data.


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 FIG. 7 in some aspects. The generated mark-up file may be an html or xml format in various aspects. In aspects of process 800 generating format 600, no mark up file may be generated.


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 FIG. 6, based on the encoded data received in block 805 and the accessors identified in block 810. In some aspects, a platform independent demultiplexer/parser of the format 600 may also be packaged in block 820, for example, platform independent instructions implementing the demultiplexer/parser for format 600, such as Java byte codes or LLVM byte codes, may be packaged in field 610a, as discussed above.



FIG. 9 describes one exemplary process used by the decoder 200 to process the format 700 discussed above with respect to FIG. 7. In another aspect, FIG. 9 below describes one exemplary process used by the decoder 200 to process the format 600 discussed above with respect to FIG. 6.


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 FIG. 7. Alternatively, the data received from the data stream may be in the format 600 discussed above with respect to FIG. 6. In some aspects, the data received may include a first portion and a second portion. The first portion may be received from a first file and the second portion may be received from a second file in some aspects.


The first portion of data may include data defining instructions that implement a demultiplexing algorithm for the second portion. For example, as shown in FIG. 6, in some aspects, the data received in block 905 may include data in the block 601a, or a block of data of similar structure, that defines a header such as header 602a, and an implementation of a demultiplexor, such as that shown in field 610a. The demultiplexor included in the first portion may be configured to decode the second portion. The second portion may contain one or more accessors, such as those shown in FIG. 6 stored in fields 610b-c, and data for those accessors to decode, such as data stored in data fields 612b-c.


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 FIG. 6, the demultiplexer may be passed a pointer to header field 602b when it is executed. In some aspects, this parameter may be dynamically indicated by the demultiplexer parameter specification field 608a illustrated in FIG. 6.


In the archive format 700 discussed above with respect to FIG. 7, instantiating and executing the demultiplexer may include loading an accessor from the accessor portion 715 into the accessor execution engine 726, such as a browser as discussed above. In some aspects, the first accessor caused to be executed by the mark-up portion 710 may also demultiplex a remaining portion of the accessor portion 715 that does not include the first accessor (demultiplexor). For example, the accessor portion 715 may include “N” accessors, with accessor #1 including instructions to extract accessors 2 through N from the accessor portion 715. The demultiplexor may also be configured to extract one or more data portions 722a-c from the data portion 720 when demultiplexing the format 700 of FIG. 7.


As discussed above with respect to FIG. 7, in some aspects, the demultiplexer may extract a first and second accessor from the second portion. Process 900 may operate similarly with respect to format 600, discussed above with respect to FIG. 6. In some aspects, the first and second accessors are stored as separate files within the second portion. In other aspects, the first and second accessors are stored as a single file within the second portion.


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.

Claims
  • 1. An archiving system comprising: an electronic hardware processor; andan electronic hardware memory storing instructions that when executed cause the electronic hardware processor to: generate a data stream comprising first data, a first accessor implementing a platform independent algorithm for the first data, second data, a second accessor implementing a platform independent algorithm for the second data, and a demultiplexer implementing a platform independent algorithm to extract the first data, the first accessor, the second data, and the second accessor from the data stream, andstore the data stream to a stable storage.
  • 2. The archiving system of claim 1, wherein the demultiplexer includes platform independent instructions that invoke the first accessor on first data and invoke the second accessor on second data.
  • 3. The archiving system of claim 1, wherein the first accessor or second accessor comprises platform independent instructions that implement a decoding algorithm for first data or second data respectively.
  • 4. The archiving system of claim 3, wherein first data defines a document encoded in a document format and the first accessor implements a document viewer application for the document format.
  • 5. The archiving system of claim 4, wherein the document format is one of PDF, DOCx, XLSs, PPTx, EPUB, ODx, and TXT/RTF.
  • 6. The archiving system of claim 3, wherein the second data defines a media file encoded in a media file format and the second accessor implements a media player application for the media file format.
  • 7. The archiving system of claim 6, wherein the media file format is one of Audio Video Interlaced format (AVI), Motion Picture Experts Group format (MPEG), Windows Media Video format (WMV), Apple Quick Time format (MOV), and MP3 format.
  • 8. The archiving system of claim 1, further comprising storing the data stream as a single file identified by a single file name.
  • 9. The archiving system of claim 8, wherein the data stream is stored as a .zip file or an ISO-BMFF file.
  • 10. The archiving system of claim 1, further comprising storing the first and second data in a first file, and storing the first and second accessors in a different second file.
  • 11. The archiving system of claim 10, further comprising encapsulating the first and second files into a single set of bits.
  • 12. The archiving system of claim 1, wherein the platform independent algorithms are defined via an instruction type, wherein the instruction type is one of Java byte code or LLVM byte code.
  • 13. The archiving system of claim 12, wherein the electronic hardware memory stores further instructions that when executed cause the electronic hardware processor to generate the data stream to include an indication of the instruction type.
  • 14. An archiving system comprising: an electronic hardware processor; andan electronic hardware memory storing instructions that when executed cause the electronic hardware processor to: receive a data stream including a first portion and a second portion;extract from the first portion instructions implementing a platform independent demultiplexer for the second portion; andinstantiate and execute the demultiplexer on the second portion.
  • 15. The archiving system of claim 14, wherein the electronic hardware memory stores further instructions that when executed cause the electronic hardware processor to read the data stream from a single file stored as a single set of bits.
  • 16. The archiving system of claim 14, wherein the electronic hardware memory stores further instructions that when executed cause the electronic hardware processor to read the first portion from a first file stored as a set of bits and to read the second portion from a second file stored as a second set of bits.
  • 17. The archiving system of claim 14, wherein the demultiplexer instructions cause the electronic hardware processor to: extract a first accessor and a second accessor from the second portion; andinstantiate and execute the first accessor on a first accessor data portion included in the second portion and execute the second accessor on a second accessor data portion included in the second portion.
  • 18. The archiving system of claim 17, wherein the demultiplexer instructions cause the electronic hardware processor to extract the first and second accessors from a first file stored in the second portion, and instantiate and execute the first and second accessors on first and second data portions respectively stored in a second file included in the second portion.
  • 19. The archiving system of claim 17, wherein the demultiplexer instructions cause the electronic hardware processor to extract the first accessor from a first file stored in the second portion and extract the second access from a second file stored in the second portion, and instantiate and execute the first accessor on a first data portion stored in a third file included in the second portion and execute the second accessor on a second data portion included in a fourth file included in the second portion.
  • 20. The archiving system of claim 14, wherein the electronic hardware memory stores further instructions that when executed cause the electronic hardware processor to decode the first portion to determine one or more parameters to pass to the demultiplexer, and to pass the demultiplexer the determined parameters.
CROSS-REFERENCE TO RELATED APPLICATIONS

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.

Provisional Applications (1)
Number Date Country
62419206 Nov 2016 US