CROSS REFERENCES RELATED TO APPLICATIONThis application is a divisional application of U.S. Ser. No. 09/584,832 filed on May 31, 2000 by Khoi Hoang.[0001]
BACKGROUND OF THE INVENTIONVideo-on-demand (VOD) systems are one type of data-on-demand (DOD) systems. In VOD systems, video data files are provided by a server or a network of servers to one or more clients on a demand basis.[0002]
In a conventional VOD architecture, a server or a network of servers communicates with clients in a standard hierarchical client-server model. For example, a client sends a request to a server for a data file (e.g., a video data file). In response to the client request, the server sends the requested data file to the client. In the standard client-server model, a client's request for a data file can be fulfilled by one or more servers. The client may have the capability to store any received data file locally in non-volatile memory for later use. The standard client-server model requires a two-way communications infrastructure. Currently, two-way communications require building new infrastructure because existing cables can only provide one-way communications. Example of two-way communications infrastructure are hybrid fiber optics coaxial cable (HFC) or all fiber infrastructure. Replacing existing cables is very costly and the resulting services may not be affordable by most users.[0003]
In addition, the standard client-server model has many limitations when a service provider (e.g., a cable company) attempts to provide VOD services to a large number of clients. One limitation of the standard client-server model is that the service provider has to implement a mechanism to continuously listen and fulfill every request from each client within the network; thus, the number of clients who can receive service is dependent on the capacity of such a mechanism. One mechanism uses massively-parallel computers having large and fast disk arrays as local servers. However, even the fastest existing local server can only deliver video data streams to about 1000 to 2000 clients at one time. Thus, in order to service more clients, the number of local servers must increase. Increasing local servers requires more upper level servers to maintain control of the local servers.[0004]
Another limitation of the standard client-server model is that each client requires its own bandwidth. Thus, the total required bandwidth is directly proportional to the number of subscribing clients. Cache memory within local servers has been used to improve bandwidth limitation but using cache memory does not solve the problem because cache memory is also limited.[0005]
Presently, in order to make video-on-demand services more affordable for clients, existing service providers are increasing the ratio of clients per local server above the local server's capabilities. Typically, a local server, which is capable of providing service to 1000 clients, is actually committed to service 10,000 clients. This technique may work if most of the subscribing clients do not order videos at the same time. However, this technique is set up for failure because most clients are likely to want to view videos at the same time (i.e., evenings and weekends), thus, causing the local server to become overloaded.[0006]
Thus, it is desirable to provide a system that is capable of providing on-demand services to a large number of clients over virtually any transmission medium without replacing existing infrastructure.[0007]
SUMMARY OF THE INVENTIONIn an exemplary embodiment, at a server side, a method for sending data to a client to provide data-on-demand services comprises the steps of: receiving a data file, specifying a time interval, parsing the data file into a plurality of data blocks based on the time interval such that each data block is displayable during the time interval, determining a required number of time slots to send the data file, allocating to each time slot at least a first of the plurality of data blocks and optionally one or more additional data blocks, such that the plurality of data blocks is available in sequential order to a client accessing the data file during any time slot, and sending the plurality of data blocks based on the allocating step. In one embodiment, the parsing step includes the steps of: determining an estimated data block size, determining a cluster size of a memory in a channel server, and parsing the data file based on the estimated data block size and the cluster size. In another embodiment, the determining step includes the step of assessing resource allocation and bandwidth availability.[0008]
In an exemplary embodiment, at a client side, a method for processing data received from a server to provide data-on-demand services comprises the steps of: (a) receiving a selection of a data file during a first time slot; (b) receiving at least one data block of the data file during a second time slot; (c) during a next time slot: receiving any data block not already received, sequentially displaying a data block of the data file, and repeating step (c) until all data blocks of the data file has been received and displayed. In one embodiment, the method for processing data received from a server is performed by a set-top box at the client side.[0009]
In an exemplary embodiment, a data file is divided into a number of data blocks and a scheduling matrix is generated based on the number of data blocks. At the server side, the scheduling matrix provides a send order for sending the data blocks, such that a client can access the data blocks in sequential order at a random time. In an exemplary embodiment, a method for generating a scheduling matrix for a data file comprises the steps of: (a) receiving a number of data blocks [x] for a data file; (b) setting a first variable [j] to zero; (c) setting a second variable [i] to zero; (d) clearing all entries in a reference array; (e) writing at least one data block stored in matrix positions of a column [(i+j) modulo x] in a matrix to a reference array, if the reference array does not already contain the data block; (f) writing a data block [i] into the reference array and a matrix position [(i+j) modulo x, j] of the matrix, if the reference array does not contain the data block [i]; (g) incrementing the second variable [i] by one and repeating step (e) until the second variable [i] is equal to the number of data blocks [x]; and (h) incrementing the first variable [j] by one and repeating the step (c) until the first variable [j] is equal to the number of data blocks [x]. In one embodiment, a scheduling matrix is generated for each data file in a set of data files and a convolution method is applied to generate a delivery matrix based on the scheduling matrices for sending the set of data files.[0010]
A data-on-demand system comprises a first set of channel servers, a central controlling server for controlling the first set of channel servers, a first set of up-converters coupled to the first set of channel servers, a combiner/amplifier coupled to the first set of up-converters, and a combiner/amplifier adapted to transmit data via a transmission medium. In an exemplary embodiment, the data-on-demand system further comprises a channel monitoring module for monitoring the system, a switch matrix, a second set of channel servers, and a second set of up-converters. The channel monitoring module is configured to report to the central controlling server when system failure occurs. The central controlling server, in response to report from the channel monitoring module, instructs the switch matrix to replace a defective channel server in the first set of channel servers with a channel server in the second set of channel servers and a defective up-converter in the first set of up-converters with an up-converter in the second set of up-converters.[0011]
A method for providing data-on-demand services comprises the steps of calculating a delivery matrix of a data file, sending the data file in accordance with the delivery matrix, such that a large number of clients is capable of viewing the data file on demand. In one embodiment, the data file includes a video file.[0012]
BRIEF DESCRIPTION OF THE DRAWINGSFIG. 1A illustrates an exemplary DOD system in accordance with an embodiment of the invention.[0013]
FIG. 1B illustrates an exemplary DOD system in accordance with another embodiment of the invention.[0014]
FIG. 2 illustrates an exemplary channel server in accordance with an embodiment of the invention.[0015]
FIG. 3 illustrates an exemplary set-top box in accordance with an embodiment of the invention.[0016]
FIG. 4 illustrates an exemplary process for generating a scheduling matrix in accordance with an embodiment of the invention.[0017]
DETAILED DESCRIPTION OF THE INVENTIONFIG. 1A illustrates an[0018]exemplary DOD system100 in accordance with an embodiment of the invention. In this embodiment, theDOD system100 provides data files, such as video files, on demand. However, theDOD system100 is not limited to providing video files on demand but is also capable of providing other data files, for example, game files on demand. TheDOD system100 includes a central controllingserver102, acentral storage103, a plurality ofchannel servers104a-104n,a plurality of up-converters106a-106n,and a combiner/amplifier108. The central controllingserver102 controls thechannel servers104. Thecentral storage103 stores data files in digital format. In an exemplary embodiment, data files stored in thecentral storage103 is accessible via a standard network interface (e.g., ethernet connection) by any authorized computer, such as the central controllingserver102, connected to the network. Eachchannel server104 is assigned to a channel and is coupled to an up-converter106. Thechannel servers104 provide data files that are retrieved from thecentral storage103 in accordance with instructions from the central controllingserver102. The output of eachchannel server104 is a quadrature amplitude modulation (QAM) modulated intermediate frequency (IF) signal having a suitable frequency for the corresponding up-converter106. The QAM-modulated IF signals are dependent upon adopted standards. The current adopted standard in the United States is the data-over-cable-systems-interface-specification (DOCSIS) standard, which requires an approximately 43.75 MHz IF frequency. The up-converters106 convert IF signals received from thechannel servers104 to radio frequency signals (RF signals). The RF signals, which include frequency and bandwidth, are dependent on a desired channel and adopted standards. For example, under the current standard in the United States for a cable television channel 80, the RF signal has a frequency of approximately 559.25 MHz and a bandwidth of approximately 6 MHz. The outputs of the up-converters106 are applied to the combiner/amplifier108. The combiner/amplifier108 amplifies, conditions, and combines the received RF signals then outputs the signals out to atransmission medium110.
In an exemplary embodiment, the central[0019]controlling server102 includes a graphics user interface (not shown) to enable a service provider to schedule data delivery by a drag-and-drop operation. Further, the centralcontrolling server102 authenticates and controls thechannel servers104 to start or stop according to delivery matrices. In an exemplary embodiment, the centralcontrolling server102 automatically selects a channel and calculates delivery matrices for transmitting data files in the selected channel. The centralcontrolling server102 provides offline addition, deletion, and update of data file information (e.g., duration, category, rating, and/or brief description). Further, the centralcontrolling server102 controls thecentral storage103 by updating data files and databases stored therein.
In an exemplary embodiment, an existing[0020]cable television system120 may continue to feed signals into the combiner/amplifier108 to provide non-DOD services to clients. Thus, theDOD system100 in accordance with the invention does not disrupt present cable television services.
FIG. 1B illustrates another exemplary embodiment of the[0021]DOD system100 in accordance with the invention. In addition to the elements illustrated in FIG. 1A, theDOD system100 includes aswitch matrix112, achannel monitoring module114, a set of back-up channel servers116a-116b,and a set of back-up up-converters118a-118b.In one embodiment, theswitch matrix112 is physically located between the up-converters106 and the combiner/amplifier108. Theswitch matrix112 is controlled by the centralcontrolling server102. Thechannel monitoring module114 comprises a plurality of configured set-top boxes, which simulate potential clients, for monitoring the health of theDOD system100. Monitoring results are communicated by thechannel monitoring module114 to the centralcontrolling server102. In case of a channel failure (i.e., a channel server failure, an up-converter failure, or a communication link failure), the centralcontrolling server102 through theswitch matrix112 disengages the malfunctioning component and engages a healthy backup component116 and/or118 to resume service.
In an exemplary embodiment, data files being broadcasted from the[0022]DOD system100 are contained in motion pictures expert group (MPEG) files. Each MPEG file is dynamically divided into data blocks and sub-blocks mapping to a particular portion of a data file along a time axis. These data blocks and sub-blocks are sent during a pre-determined time in accordance with three-dimensional delivery matrices provided by the centralcontrolling server102. A feedback channel is not necessary for theDOD system100 to provide DOD services. However, if a feedback channel is available, the feedback channel can be used for other purpose, such as billing or providing Internet services.
FIG. 2 illustrates an[0023]exemplary channel server104 in accordance with an embodiment of the invention. Thechannel server104 comprises aserver controller202, aCPU204, aQAM modulator206, alocal memory208, and anetwork interface210. Theserver controller202 controls the overall operation of thechannel server104 by instructing theCPU204 to divide data files into blocks (further into sub-blocks and data packets), select data blocks for transmission in accordance with a delivery matrix provided by the centralcontrolling server102, encode selected data, compress encoded data, then deliver compressed data to theQAM modulator206. The QAM modulator206 receives data to be transmitted via a bus (i.e., PCI, CPU local bus) or Ethernet connections. In an exemplary embodiment, theQAM modulator206 may include a downstream QAM modulator, an upstream quadrature amplitude modulation/quadrature phase shift keying (QAM/QPSK) burst demodulator with forward error correction decoder, and/or an upstream tuner. The output of theQAM modulator206 is an IF signal that can be applied directly to an up-converter106.
The[0024]network interface210 connects thechannel server104 toother channel servers104 and to the centralcontrolling server102 to execute the scheduling and controlling instructions from the centralcontrolling server102, reporting status back to the centralcontrolling server102, and receiving data files from thecental storage103. Any data file retrieved from thecentral storage103 can be stored in thelocal memory208 of thechannel server104 before the data file is processed in accordance with instructions from theserver controller202. In an exemplary embodiment, thechannel server104 may send one or more DOD data streams depending on the bandwidth of a cable channel (e.g., 6, 6.5, or 8 MHz), QAM modulation (e.g., QAM 64 or QAM 256), and a compression standard/bit rate of the DOD data stream (i.e., MPEG-1 or MPEG-2).
FIG. 3 illustrates an exemplary set-top box (STB)[0025]300 in accordance with an embodiment of the invention. TheSTB300 comprises aQAM demodulator302, aCPU304, a conditional access module306 (e.g., a smart card system), alocal memory308, abuffer memory309, aSTB controller310, adecoder312, and agraphics overlay module314. TheSTB controller310 controls the overall operation of theSTB300 by controlling theCPU302 and the QAM demodulator302 to select data in response to a client's request, decode selected data, decompress decoded data, reassemble decoded data, store decoded data in thelocal memory308 or thebuffer memory309, and deliver stored data to thedecoder312. In an exemplary embodiment, theSTB controller310 controls the overall operation of theSTB300 based on data packet headers in the data packets received from thetransmission medium110. In an exemplary embodiment, thelocal memory308 comprises non-volatile memory (e.g., a hard drive) and thebuffer memory309 comprises volatile memory.
In one embodiment, the[0026]QAM demodulator302 comprises transmitter and receiver modules and one or more of the following: privacy encryption/decryption module, forward error correction decoder/encoder, tuner control, downstream and upstream processor, CPU and memory interface circuits. The QAM demodulator302 receives modulated IF signals, samples and demodulates the signals to restore data.
The[0027]conditional access module306 permits a decoding process when access is granted after authentication and/or when appropriate fees have been charged. Access condition is determined by the service provider.
In an exemplary embodiment, when access is granted, the[0028]decoder312 decodes at least one data block to transform the data block into images displayable on an output screen. Thedecoder312 supports commands from a subscribing client, such as play, stop, pause, step, rewind, forward, etc.
The[0029]graphics overlay module314 enhances displayed graphics quality by, for example, providing alpha blending or picture-in-picture capabilities. In an exemplary embodiment, thegraphics overlay module314 can be used for graphics acceleration during game playing mode, for example, when the service provider provides games-on-demand services using the system in accordance with the invention.
In an exemplary embodiment, although data files are broadcasted to all cable television subscribers, only the DOD subscriber who has a[0030]compatible STB300 will be able to decode and enjoy data-on-demand services. In one exemplary embodiment, permission to obtain data files on demand can be obtained via a smart card system in the conditionalaccess control module306. A smart card may be rechargeable at a local store or vending machine set up by a service provider. In another exemplary embodiment, a flat fee system provides a subscriber an unlimited access to all available data files.
In an exemplary embodiment, data-on-demand interactive features permit a client to select at any time an available data file. The amount of time between when a client presses a select button and the time the selected data file begins playing is referred to as a response time. As more resources are allocated (e.g., bandwidth, server capability) to provide DOD services, the response time gets shorter. In an exemplary embodiment, a response time can be determined based on an evaluation of resource allocation and desired quality of service.[0031]
In an exemplary embodiment, a selected response time determines the duration of a time slot. The duration of a time slot (TS) is the time interval for playing a data block at normal speed by a client. In an exemplary embodiment, a data file, such as a video file, is divided into a number of data blocks such that each data block can support the playing of the data file for the duration of a time slot.[0032]
In one embodiment, the number of data blocks (NUM_OF_BLKS) for each data file can be calculated as follows:[0033]
Estimated_BLK_Size=(DataFile_Size*TS)/DataFile_Length (1)
BLK SIZE=(Estimated BLK Size+CLUSTER_SIZE−1 Byte)/CLUSTER_SIZE (2)
BLK_SIZE_BYTES=BLK_SIZE*CLUSTER_SIZE (3)
NUM_OF_BLKS=(DataFile_Size+BLK_SIZE_BYTES−1 Byte)/BLK_SIZE_BYTES (4)
In equations (1) to (4), the Estimated_BLK_Size is an estimated block size (in Bytes); the DataFile_Size is the data file size (in Bytes); TS represents the duration of a time slot (in seconds); DataFile_Length is the duration of the data file (in seconds); BLK SIZE is the number of clusters needed for each data block; CLUSTER_SIZE is the size of a cluster in the[0034]local memory208 for each channel server104 (e.g., 64 KBytes); BLK_SIZE_BYTES is a block size in Bytes. In this embodiment, the number of blocks (NUM_OF_BLKS) is equal to the data file size (in Bytes) plus a data block size in Bytes minus 1 Byte and divided by a data block size in Bytes. Equations (1) to (4) illustrate one specific embodiment. A person of skill in the art would recognize that other methods are available to calculate a number of data blocks for a data file. For example, dividing a data file into a number of data blocks is primarily a function of an estimated block size and the cluster size of thelocal memory208 of achannel server104. Thus, the invention should not be limited to the specific embodiment presented above.
FIG. 4 illustrates an exemplary process for generating a scheduling matrix for sending a data file in accordance with an embodiment of the invention. In an exemplary embodiment, this invention uses time division multiplexing (TDM) and frequency division multiplexing (FDM) technology to compress and schedule data delivery at the server side. In an exemplary embodiment, a scheduling matrix is generated for each data file. In one embodiment, each data file is divided into a number of data blocks and the scheduling matrix is generated based on the number of data blocks. Typically, a scheduling matrix provides a send order for sending data blocks of a data file from a server to clients, such that the data blocks are accessible in sequential order by any client who wishes to access the data file at a random time.[0035]
At[0036]step402, a number of data blocks (x) for a data file is received. A first variable, j, is set to zero (step404). A reference array is cleared (step406). The reference array keeps track of data blocks for internal management purposes. Next, j is compared to x (step408). If j is less than x, a second variable, i, is set to zero (step412). Next, i is compared to x (step414). If i is less than x, data blocks stored in the column [(i+j) modulo (x)] of a scheduling matrix are written into the reference array (step418). If the reference array already has such data block(s), do not write a duplicate copy. Initially, since the scheduling matrix does not yet have entries, this step can be skipped. Next, the reference array is checked if it contains data block i (step420). Initially, since all entries in the reference array has been cleared atstep406, there would be nothing in the reference array. If the reference array does not contain data block i, data block i is added into the scheduling matrix at matrix position [(i+j) modulo (x), j] and the reference array (step422). After the data block i is added to the scheduling matrix and the reference array, i is incremented by 1, such that i=i+1 (step424), then the process repeats atstep414 until i=x. If the reference array contains data block i, i is incremented by 1, such that i=i+1 (step424), then the process repeats atstep414 until i=x. When i=x, j is incremented by 1, such that j=j+1 (step416) and the process repeats atstep406 until j=x. The entire process ends when j=x (step410).
In an exemplary embodiment, if a data file is divided into six data blocks (x=6), the scheduling matrix and the reference arrays are as follows:
[0037]| TS0 | TS1 | TS2 | TS3 | TS4 | TS5 |
|
| [0, 0] blk0 | [1, 0] blk1 | [2, 0] blk2 | [3, 0] blk3 | [4, 0] blk4 | [5, 0] blk5 |
| [0, 1] | [1, 1] blk0 | [2, 1] | [3, 1] | [4, 1] | [5, 0] |
| [0, 2] | [1, 2] | [2, 2] blk0 | [3, 2] blk1 | [4, 2] | [5, 1] |
| [0, 3] | [1, 3] | [2, 3] | [3, 3] blk0 | [4, 3] | [5, 2] blk2 |
| [0, 4] | [1, 4] blk3 | [2, 4] | [3, 4] | [4, 4] blk0 | [5, 3] blk1 |
| [0, 5] | [1, 5] | [2, 5] | [3, 5] blk4 | [4, 5] | [5, 4] blk0 |
|
[0038] | space0 | space1 | space2 | space3 | space4 | space5 |
| |
| TS0 | blk0 | blk1 | blk2 | blk3 | blk4 | blk5 |
| TS1 | blk1 | blk0 | blk2 | blk3 | blk4 | blk5 |
| TS2 | blk2 | blk0 | blk3 | blk1 | blk4 | blk5 |
| TS3 | blk3 | blk1 | blk0 | blk4 | blk5 | blk2 |
| TS4 | blk4 | blk0 | blk5 | blk2 | blk1 | blk3 |
| TS5 | blk5 | blk2 | blk1 | blk0 | blk3 | blk4 |
|
Appendix A attached to this application describes a step-by-step process of the exemplary process illustrated in FIG. 4 to generate the above scheduling matrix and reference arrays. In this exemplary embodiment, based on the scheduling matrix above, the six data blocks of the data file are sent in the following sequence:[0039]
TS1
[0041]blk0, blk1, blk3
TS3
[0043]blk0, blk1, blk3, blk4
TS5
[0045]blk0, blk1, blk2, blk5
In another exemplary embodiment, a look-ahead process can be used to calculate a look-ahead scheduling matrix to send a predetermined number of data blocks of a data file prior to a predicted access time. For example, if a predetermined look-ahead time is the duration of one time slot, for any time slot greater than or equal to time slot number four, data block 4 (blk4) of a data file should be received by a[0046]STB300 at a subscribing client at or before TS3, but blk4 would not be played until TS4. The process steps for generating a look-ahead scheduling matrix is substantially similar to the process steps described above for FIG. 4 except that the look-ahead scheduling matrix in this embodiment schedules an earlier sending sequence based on a look-ahead time. Assuming a data file is divided into six data blocks, an exemplary sending sequence based on a look-ahead scheduling matrix, having a look-ahead time of the duration of two time slots, can be represented as follows:
TS1
[0048]blk0, blk1, blk3, blk4
TS3
[0050]blk0, blk1, blk3, blk4, blk5
TS5
[0052]blk0, blk1, blk2
A three-dimensional delivery matrix for sending a set of data files is generated based on the scheduling matrices for each data file of the set of data files. In the three-dimensional delivery matrix, a third dimension containing IDs for each data file in the set of data files is generated. The three-dimensional delivery matrix is calculated to efficiently utilize available bandwidth in each channel to deliver multiple data streams. In an exemplary embodiment, a convolution method, which is well known in the art, is used to generate a three-dimensional delivery matrix to schedule an efficient delivery of a set of data files. For example, a convolution method may include the following policies: (1) the total number of data blocks sent in the duration of any time slot (TS) should be kept at a smallest possible number; and (2) if multiple partial solutions are available with respect to policy (1), the preferred solution is the one which has a smallest sum of data blocks by adding the data blocks to be sent during the duration of any reference time slot, data blocks to be sent during the duration of a previous time slot (with respect to the reference time slot), and data blocks to be sent during the duration of a next time slot (with respect to the reference time slot). For example, assuming an exemplary system sending two short data files, M and N, where each data file is divided into six data blocks, the sending sequence based on a scheduling matrix is as follows:[0053]
TS1
[0055]blk0, blk1, blk3
TS3
[0057]blk0, blk1, blk3, blk4
TS5
[0059]blk0, blk1, blk2, blk5
Applying the exemplary convolution method as described above, possible combinations of delivery matrices are as follows:
[0060] | Option 1: Send video file N at shift 0 TS | |
| TS0 => M0, N0 | 2 |
| TS1 => M0, M1, M3, N0, N1, N3 | 6 |
| TS2 => M0, M2, N0, N2 | 4 |
| TS3 => M0, M1, M3, M4, N0, N1, N3, N4 | 8 |
| TS4 => M0, M4, N0, N4 | 4 |
| TS5 => M0, M1, M2, M5, N0, N1, N2, N5 | 8 |
| Option 2: Send video file N at shift 1 TS |
| TS0 => M0, N0, N1, N3 | 4 |
| TS1 => M0, M1, M3, N0, N2 | 5 |
| TS2 => M0, M2, N0, N1, N3, N4 | 6 |
| TS3 => M0, M1, M3, M4, N0, N4 | 6 |
| TS4 => M0, M4, N0, N1, N2, N5 | 6 |
| TS5 => M0, M1, M2, M5, N0 | 5 |
| Option 3: Send video file N at shift 2 TS |
| TS0 => M0, N0, N2 | 3 |
| TS1 => M0, M1, M3, N0, N1, N3, N4 | 7 |
| TS2 => M0, M2, N0, N4 | 4 |
| TS3 => M0, M1, M3, M4, N0, N1, N2, N5 | 8 |
| TS4 => M0, M4, N0 | 3 |
| TS5 => M0, M1, M2, M5, N0, N1, N3 | 7 |
| Option 4: Send video file N at shift 3 TS |
| TS0 => M0, N0, N1, N3, N4 | 5 |
| TS1 => M0, M1, M3, N0, N4 | 5 |
| TS2 => M0, M2, N0, N1, N2, N5 | 6 |
| TS3 => M0, M1, M3, M4, N0 | 5 |
| TS4 => M0, M4, N0, N1, N3 | 5 |
| TS5 => M0, M1, M2, M5, N0, N2 | 6 |
| Option 5: Send video file N at shift 4 TS |
| TS0 => M0, N0, N4 | 3 |
| TS1 => M0, M1, M3, N0, N1, N2, N5 | 7 |
| TS2 => M0, M2, N0 | 3 |
| TS3 => M0, M1, M3, M4, N0, N1, N3 | 7 |
| TS4 => M0, M4, N0, N2 | 4 |
| TS5 => M0, M1, M2, M5, N0, N1, N3, N4 | 8 |
| Option 6: Send video file N at shift 5 TS |
| TS0 => M0, N0, N1, N2, N5 | 5 |
| TS1 => M0, M1, M3, N0 | 4 |
| TS2 => M0, M2, N0, N1, N3 | 5 |
| TS3 => M0, M1, M3, M4, N0, N2 | 6 |
| TS4 => M0, M4, N0, N1, N3, N4 | 6 |
| TS5 => M0, M1, M2, M5, N0, N4 | 6 |
| |
Applying policy (1),[0061]options 2, 4, and 6 have the smallest maximum number of data blocks (i.e., 6 data blocks) sent during any time slot. Applying policy (2), the optimal delivery matrix in this exemplary embodiment is option 4 because option 4 has the smallest sum of data blocks of any reference time slot plus data blocks of neighboring time slots (i.e., 16 data blocks). Thus, optimally for this embodiment, the sending sequence of the data file N should be shifted by three time slots. In an exemplary embodiment, a three-dimensional delivery matrix is generated for eachchannel server104.
When data blocks for each data file are sent in accordance with a delivery matrix, a large number of subscribing clients can access the data file at a random time and the appropriate data blocks of the data file will be timely available to each subscribing client. In the example provided above, assume the duration of a time slot is equal to 5 seconds, the[0062]DOD system100 sends data blocks for data files M and N in accordance with the optimal delivery matrix (i.e., shift delivery sequence of data file N by three time slots) in the following manner:
Time 00:00:00
[0063]M0 N0 N1 N3 N4
Time 00:00:05
[0064]M0 M1 M3 N0 N4
Time 00:00:10
[0065]M0 M2 N0 N1 N2 N5
Time 00:00:15
[0066]M0 M1 M3 M4 N0
Time 00:00:20
[0067]M0 M4 N0 N1 N3
Time 00:00:25
[0068]M0 M1 M2 M5 N0 N2
Time 00:00:30
[0069]M0 N0N1 N3 N4
Time 00:00:35
[0070]M0 M1 M3 N0 N4
Time 00:00:40
[0071]M0 M2 N0 N1 N2 N5
Time 00:00:45
[0072]M0 M1 M3 M4 N0
Time 00:00:50
[0073]M0 M4 N0 N1 N3
Time 00:00:55
[0074]M0 M1 M2 M5 N0 N2
If at time 00:00:00 a client A selects movie M, the[0075]STB300 at client A receives, stores, plays, and rejects data blocks as follows:
Time 00:00:00
[0076]Receive M0
play M0, store M0.
Time 00:00:05
[0077]Receive M1, M3
play M1, store M0, M1, M3.
Time 00:00:10
[0078]Receive M2
play M2, store M0, M1, M2 M3.
Time 00:00:15
[0079]Receive M4
play M3, store M0, M1, M2, M3, M4.
Time 00:00:20
[0080]Receive none
play M4, store M0, M1, M2, M3, M4.
Time 00:00:25
[0081]Receive M5
play M5, store M0, M1, M2, M3, M4, M5.
If at time 00:00:10, a client B selects movie M, the[0082]STB300 at client B receives, stores, plays, and rejects data blocks as follows:
Time 00:00:10
[0083]Rcv M0, M2
play M0, store M0, M2.
Time 00:00:15
[0084]Rcv M1, M3, M4
play M1, store M0, M1, M2, M3, M4.
Time 00:00:20
[0085]Rcv none
play M2, store M0, M1, M2, M3, M4.
Time 00:00:25
[0086]Rcv M5
play M3, store M0, M1, M2, M3, M4, M5.
Time 00:00:30
[0087]Rcv none
play M4, store M0, M1, M2, M3, M4, M5.
Time 00:00:35
[0088]Rcv none
play M5, store M0, M1, M2, M3, M4, M5.
If at time 00:00:15, a client C selects movie N, the[0089]STB300 of the client C receives, stores, plays, and rejects data blocks as follows:
Time 00:00:15
[0090]Rcv N0
play N0, store N0.
Time 00:00:20
[0091]Rcv N1 N3
play N1, store N0, N1, N3.
Time 00:00:25
[0092]Rcv N2
play N2, store N0, N1, N2, N3.
Time 00:00:30
[0093]Rcv N4
play N3, store N0, N1, N2, N3, N4.
Time 00:00:35
[0094]Rcv none
play N4, store N0, N1, N2, N3, N4.
Time 00:00:40
[0095]Rcv N5
play N5, store N0, N1, N2, N3, N4, N5.
If at time 00:00:30, a client D also selects movie N, the[0096]STB300 at the client D receives, stores, plays, and rejects data blocks as follows:
Time 00:00:30
[0097]Rcv N0, N1, , N3, N4
play N0, store N0, N1, N3, N4.
Time 00:00:35
[0098]Rcv none
play N1, store N0, N1, N3, N4.
Time 00:00:40
[0099]Rcv N2, N5
play N2, store N0, N1, N2, N3, N4, N5.
Time 00:00:45
[0100]Rcv none
play N3, store N0, N1, N2, N3, N4, N5.
Time 00:00:50
[0101]Rcv none
play N4, store N0, N1, N2, N3, N4, N5.
Time 00:00:55
[0102]Rcv none
play N5, store N0, N1, N2, N3, N4, N5.
As shown in the above examples, any combination of clients can at a random time independently select and begin playing any data file provided by the service provider.[0103]
GENERAL OPERATIONA service provider can schedule to send a number of data files (e.g., video files) to[0104]channel servers104 prior to broadcasting. The centralcontrolling server102 calculates and sends to thechannel servers104 three-dimensional delivery matrices (ID, time slot, and data block send order). During broadcasting,channel servers104 consult the three-dimensional delivery matrices to send appropriate data blocks in an appropriate order. Each data file is divided into data blocks so that a large number of subscribing clients can separately begin viewing a data file continuously and sequentially at a random time. The size of a data block of a data file is dependent on the duration of a selected time slot and the bit rate of the data stream of the data file. For example, in a constant bit rate MPEG data stream, each data block has a fixed size of:
Block Size (MBytes)=BitRate (Mb/s)×TS (sec)/8 (1).
In an exemplary embodiment, a data block size is adjusted to a next higher multiple of a memory cluster size in the[0105]local memory208 of achannel server104. For example, if a calculated data block length is 720 Kbytes according to equation (1) above, then the resulting data block length should be 768 Kbytes if the cluster size of thelocal memory208 is 64 Kbytes. In this embodiment, data blocks should be further divided into multiples of sub-blocks each having the same size as the cluster size. In this example, the data block has twelve sub-blocks of 64 KBytes.
A sub-block can be further broken down into data packets. Each data packet contains a packet header and packet data. The packet data length depends on the maximum transfer unit (MTU) of a physical layer where each channel server's CPU sends data to. In the preferred embodiment, the total size of the packet header and packet data should be less than the MTU. However, for maximum efficiency, the packet data length should be as long as possible.[0106]
In an exemplary embodiment, data in a packet header contains information that permits the subscriber client's[0107]STB300 to decode any received data and determine if the data packet belongs to a selected data file (e.g., protocol signature, version, ID, or packet type information). The packet header may also contain other information, such as block/sub-block/packet number, packet length, cyclic redundancy check (CRC) and offset in a sub-block, and/or encoding information.
Once received by a[0108]channel server104, data packets are sent to theQAM modulator206 where another header is added to the data packet to generate a QAM-modulated IF output signal. The maximum bit rate output for theQAM modulator206 is dependent on available bandwidth. For example, for aQAM modulator206 with 6 MHz bandwidth, the maximum bit rate is 5.05 (bit/symbol)×6 (MHz)=30.3 Mbit/sec.
The QAM-modulated IF signals are sent to the up-[0109]converters106 to be converted to RF signals suitable for a specific channel (e.g., for CATV channel 80, 559.250 MHz and 6 MHz bandwidth). For example, if a cable network has high bandwidth (or bit rate), each channel can be used to provide more than one data stream, with each data stream occupying a virtual sub-channel. For example, three MPEG1 data streams can fit into a 6 MHz channel using QAM modulation. The output of the up-converters106 is applied to the combiner/amplifier108, which sends the combined signal to thetransmission medium110.
In an exemplary embodiment, the total system bandwidth (BW) for transmitting “N” data streams is BW=N×bw, where bw is the required bandwidth per data stream. For example, three MPEG-1 data streams can be transmitted at the same time by a DOCSIS cable channel having a system bandwidth of 30.3 Mbits/sec because each MPEG- 1 data stream occupies 9 Mbits/sec of the system bandwidth.[0110]
Typically, bandwidth is consumed regardless of the number of subscribing clients actually accessing the DOD service. Thus, even if no subscribing client is using the DOD service, bandwidth is still consumed to ensure the on-demand capability of the system.[0111]
The[0112]STB300, once turned on, continuously receives and updates a program guide stored in thelocal memory308 of aSTB300. In an exemplary embodiment, theSTB300 displays data file information including the latest program guide on a TV screen. Data file information, such as video file information, may include movieID, movie title, description (in multiple languages), category (e.g., action, children), rating (e.g., R, PG13), cable company policy (e.g., price, length of free preview), subscription period, movie poster, and movie preview. In an exemplary embodiment, data file information is sent via a reserved physical channel, such as a channel reserved for firmware update, commercials, and/or emergency information. In another exemplary embodiment, information is sent in a physical channel shared by other data streams.
A subscribing client can view a list of available data files arranged by categories displayed on a television screen. When the client selects one of the available data files, the[0113]STB300 controls its hardware to tune into a corresponding physical channel and/or a virtual sub-channel to start receiving data packets for that data file. TheSTB300 examines every data packet header, decodes data in the data packets, and determines if a received data packet should be retained. If theSTB300 determines that a data packet should not be retained, the data packet is discarded. Otherwise, the packet data is saved in thelocal memory308 for later retrieval or is temporarily stored in thebuffer memory309 until it is sent to thedecoder312.
To improve performance efficiency by avoiding frequent read/write into the[0114]local memory308, in an exemplary embodiment, theSTB300 uses a “sliding window” anticipation technique to lock anticipated data blocks in thememory buffer309 whenever possible. Data blocks are transferred to thedecoder312 directly out of thememory buffer309 if a hit in an anticipation window occurs. If an anticipation miss occurs, data blocks are read from thelocal memory308 into thememory buffer309 before the data blocks are transferred to thedecoder312 from thememory buffer309.
In an exemplary embodiment, the[0115]STB300 responds to subscribing client's commands via infrared (IR) remote control unit buttons, an IR keyboard, or front panel pushbuttons, including buttons to pause, play in slow motion, rewind, zoom and single step. In an exemplary embodiment, if a subscribing client does not input any action for a predetermined period of time (e.g., scrolling program menu, or selecting a category or movie), a scheduled commercial is played automatically. The scheduled commercial is automatically stopped when the subscribing client provides an action (e.g., press a button in a remote control unit). In another exemplary embodiment, theSTB300 can automatically insert commercials while a video is being played. The service provider (e.g., a cable company) can set up a pricing policy that dictates how frequently commercials should interrupt the video being played.
If an emergency information bit is found in a data packet header, the[0116]STB300 pauses any data receiving operation and controls its hardware to tune into the channel reserved for receiving data file information to obtain and decode any emergency information to be displayed on an output screen. In an exemplary embodiment, when theSTB300 is idled, it is tuned to the channel reserved for receiving data file information and is always ready to receive and display any emergency information without delay.
The foregoing examples illustrate certain exemplary embodiments of the invention from which other embodiments, variations, and modifications will be apparent to those skilled in the art. The invention should therefore not be limited to the particular embodiments discussed above, but rather is defined by the following claims.[0117]
APPENDIX ASystems and Methods for Providing Video-On-Demand Services for Broadcasting SystemsThe following is a step-by-step description of the exemplary process illustrated in FIG. 4 for generating a scheduling matrix for a data file having six data blocks:[0118]
START[0119]
(Step[0120]402) Receive a number of data blocks for a data file (x); assume the number of data blocks is equal to 6 (x=6).
(Step[0121]404) Set j=0
(Step[0122]406) Clear a Reference Array (RA)
(Step[0123]408) Compare j to x.
(Step[0124]412) j is less than x (0<6), let i=0
(Step[0125]414) Compare i to x.
(Step[0126]418) i is less than x (0<6). Read matrix positions of column [0] in the SM and write to RA; initially, the SM is empty so nothing is written into RA.
(Step[0127]420) Does RA contain data block i or blk0?
(Step[0128]422) RA does not contain anything because it is empty. Write blk0 into position [0, 0] in SM and the RA.
(Step[0129]424) Add 1 to i (i=1) to derive value for position [1, 0]. Go back toStep414.
(Step[0130]414) Compare i to x.
(Step[0131]418) i is less than x (1<6). Read matrix positions of column [1] in the SM and write to RA; initially, the SM is empty so nothing is written into RA.
(Step[0132]420) Does RA contain data block i or blk1?
(Step[0133]422) RA does not contain blk1. Write blk1 into position [1, 0] in SM and the RA.
(Step[0134]424) Add 1 to i (i=2) to derive value for position [2, 0]. Go back toStep414.
(Step[0135]414) Compare i to x.
(Step[0136]418) i is less than x (2<6). Read matrix positions of column [2] in the SM and write to RA; initially, the SM is empty so nothing is written into RA.
(Step[0137]420) Does RA contain data block i or blk2?
(Step[0138]422) RA does not contain blk2. Write blk2 into position [2, 0] in SM and the RA.
(Step[0139]424) Add 1 to i (i=3) to derive value for position [3, 0]. Go back toStep414.
(Step[0140]414) Compare i to x.
(Step[0141]418) i is less than x (3<6). Read matrix positions of column [3] in the SM and write to RA; initially, the SM is empty so nothing is written into RA.
(Step[0142]420) Does RA contain data block i or blk3?
(Step[0143]422) RA does not contain blk3. Write blk3 into position [3, 0] in SM and the RA.
(Step[0144]424) Add 1 to i (i=4) to derive value for position [4, 0]. Go back toStep414.
(Step[0145]414) Compare i to x.
(Step[0146]418) i is less than x (4<6). Read matrix positions of column [4] of the SM and write to RA; initially, the SM is empty so nothing is written into RA.
(Step[0147]420) Does RA contain data block i or blk4?
(Step[0148]422) RA does not contain blk4. Write blk4 into position [4, 0] in SM and the RA.
(Step[0149]424) Add 1 to i (i=5) to derive value for position [5, 0]. Go back toStep414.
(Step[0150]414) Compare i to x.
(Step[0151]418) i is less than x (5<6). Read matrix positions of column [5] of the SM and write to RA; initially, the SM is empty so nothing is written into RA.
(Step[0152]420) Does RA contain data block i or blk5?
(Step[0153]422) RA does not contain blk5. Write blk5 into position [5, 0] in SM and the RA.
(Step[0154]424) Add 1 to i (i=6). Go back toStep414.
(Step[0155]414) Compare i to x.
(Step[0156]416) i is equal to x (6=6). Increment j by 1 (j=1). Go to Step406.
(Step[0157]406) Clear a Reference Array (RA)
(Step[0158]408) Compare j to x.
(Step[0159]412) j is less than x (1<6), let i=0.
(Step[0160]414) Compare i to x.
(Step[0161]418) i is less than x (0<6). Read matrix positions of column [1] in the SM and write to RA. Position [1, 0] containsblk 1; thus,blk 1 is written into RA. All other positions are empty.
(Step[0162]420) Does RA contain data block i or blk0?
(Step[0163]422) RA does not contain blk0. Write blk0 into position [1, 1] in the SM and the RA. RA now has blk1 andblk 0.
(Step[0164]424) Add 1 to i (i=1) to derive value for position [2, 1]. Go back toStep414.
(Step[0165]414) Compare i to x.
(Step[0166]418) i is less than x (1<6). Read matrix positions of column [2] in the SM and write to RA. Position [2, 0] containsblk 2. All other positions are empty. RA now has blk1,blk 0, andblk 2.
(Step[0167]420) Does RA contain data block i or blk1?
(Step[0168]424) RA contains blk1. Thus, nothing is written into position [2, 1]. Add 1 to i (i=2) to derive value for position [3, 1]. Go back toStep414.
(Step[0169]414) Compare i to x.
(Step[0170]418) i is less than x (2<6). Read matrix positions in column [3] of the SM and write to RA. Position [3, 0] contains blk3. All other positions are empty. RA now has blk1, blk0, blk2, and blk3.
(Step[0171]420) Does RA contain data block i or blk2?
(Step[0172]424) RA does contain blk2. Thus, nothing is written into position [3, 1]. Add 1 to i (i=3) to derive value for position [4, 1]. Go back toStep414.
(Step[0173]414) Compare i to x.
(Step[0174]418) i is less than x (3<6). Read matrix positions of column [4] in the SM and write to RA. Position [4, 0] contains blk4. All other positions are empty. RA now has blk1, blk0, blk2, blk3, and blk4.
(Step[0175]420) Does RA contain data block i or blk3?
(Step[0176]424) RA does contain blk3. Thus, nothing is written into position [4, 1]. Add 1 to i (i=4) to derive value for position [5, 1]. Go back toStep414.
(Step[0177]414) Compare i to x.
(Step[0178]418) i is less than x (4<6). Read matrix positions of column [5] in the SM and write to RA. Position [5, 0] contains blk5. All other positions are empty. RA now has blk1, blk0, blk2, blk3, blk4, and blk5.
(Step[0179]420) Does RA contain data block i or blk4?
(Step[0180]424) RA does contain blk4. Thus, nothing is written into position [5, 1]. Add 1 to i (i=5) to derive value for position [0, 1]. Go back toStep414.
(Step[0181]414) Compare i to x.
(Step[0182]418) i is less than x (5<6). Read matrix positions of column [0] in the SM and write to RA. Position [0, 0] contains blk0. All other positions are empty. RA already contains blk0; thus, blk0 is discarded.
(Step[0183]420) Does RA contain data block i or blk5?
(Step[0184]424) RA does contain blk5. Thus, nothing is written into position [0, 1]. Add 1 to i (i=6). Go back toStep414.
(Step[0185]414) Compare i to x.
(Step[0186]416) i is equal to x (6=6). Increment j by 1 (j=2). Go to Step406.
(Step[0187]406) Clear a Reference Array (RA)
(Step[0188]408) Compare j to x.
(Step[0189]412) j is less than x (2<6), let i=0.
(Step[0190]414) Compare i to x.
(Step[0191]418) i is less than x (0<6). Read matrix positions of column [2] in the SM and write to RA. Position [2, 0] containsblk 2. All other positions are empty. RA now has blk2.
(Step[0192]420) Does RA contain data block i or blk0?
(Step[0193]422) RA does not contain blk0. Write blk0 into position [2, 2] in the SM and the RA. RA now has blk2 andblk 0.
(Step[0194]424) Add 1 to i (i=1) to derive value for position [3, 2]. Go back toStep414.
(Step[0195]414) Compare i to x.
(Step[0196]418) i is less than x (1<6). Read matrix positions of column [3] in the SM and write to RA. Position [3, 0] contains blk3. All other positions are empty. RA now has blk2,blk 0, andblk 3.
(Step[0197]420) Does RA contain data block i or blk1?
(Step[0198]422) RA not contain blk1. Write blk1 into position [3, 2] in the SM and the RA. RA now has blk2, blk0, blk3, and blk1.
(Step[0199]424) Add 1 to i (i=2) to derive value for position [4, 2]. Go back toStep414.
(Step[0200]414) Compare i to x.
(Step[0201]418) i is less than x (2<6). Read matrix positions of column [4] in the SM and write to RA. Position [4, 0] contains blk4. All other positions are empty. RA now has blk2, blk0, blk3, blk1, and blk4.
(Step[0202]420) Does RA contain data block i or blk2?
(Step[0203]424) RA does contain blk2. Thus, nothing is written into position [4, 2]. Add 1 to i (i=3) to derive value for position [5, 2]. Go back toStep414.
(Step[0204]414) Compare i to x.
(Step[0205]418) i is less than x (3<6). Read matrix positions of column [5] in the SM and write to RA. Position [5, 0] contains blk5. All other positions are empty. RA now has blk2, blk0, blk3, blk1, blk4, and blk5.
(Step[0206]420) Does RA contain data block i or blk3?
(Step[0207]424) RA does contain blk3. Thus, nothing is written into position [5, 2]. Add 1 to i (i=4) to derive value for position [0, 2]. Go back toStep414.
(Step[0208]414) Compare i to x.
(Step[0209]418) i is less than x (4<6). Read matrix positions of column [0] in the SM and write to RA. Position [0, 0] contains blk0. All other positions are empty. RA already contain blk0; thus, blk0 is discarded.
(Step[0210]420) Does RA contain data block i or blk4?
(Step[0211]424) RA does contain blk4. Thus, nothing is written into position [0, 2]. Add 1 to i (i=5) to derive value for position [1, 2]. Go back toStep414.
(Step[0212]414) Compare i to x.
(Step[0213]418) i is less than x (5<6). Read matrix positions of column [1] in the SM and write to RA. Position [1, 0] contains blk1 and position [1, 1] contains blk0. RA already contains blk1 and blk0; thus, blk1 and blk0 are discarded. All other positions are empty.
(Step[0214]420) Does RA contain data block i or blk5?
(Step[0215]424) RA does contain blk5. Thus, nothing is written into position [1, 2]. Add 1 to i (i=6). Go back toStep414.
(Step[0216]414) Compare i to x.
(Step[0217]416) i is equal to x (6=6). Increment j by 1 (j=3). Go to Step406.
(Step[0218]406) Clear a Reference Array (RA)
(Step[0219]408) Compare j to x.
(Step[0220]412) j is less than x (3<6), let i=0.
(Step[0221]414) Compare i to x.
(Step[0222]418) i is less than x (0<6). Read matrix positions of column [3] in the SM and write to RA. Position [3, 0] contains blk3 and position [3, 2] contains blk1. Blk3 and blk1 are written into RA. All other positions are empty.
(Step[0223]420) Does RA contain data block i or blk0?
(Step[0224]422) RA does not contain blk0. Write blk0 into position [3, 3] in the SM and the RA. RA now has blk3, blk1, and blk0.
(Step[0225]424) Add 1 to i (i=1) to derive value for position [4, 3]. Go back toStep414.
(Step[0226]414) Compare i to x.
(Step[0227]418) i is less than x (1<6). Read matrix positions of column [4] in the SM and write to RA. Position [4, 0] contains blk 4. All other positions are empty. RA now has blk3,blk 1,blk 0 and blk 4.
(Step[0228]420) Does RA contain data block i or blk1?
(Step[0229]424) RA contains blk1. Thus, nothing is written into position [4, 3]. Add 1 to i (i=2) to derive value for position [5, 3]. Go back toStep414.
(Step[0230]414) Compare i to x.
(Step[0231]418) i is less than x (2<6). Read matrix positions of column [5] in the SM and write to RA. Position [5, 0] contains blk5. All other positions are empty. RA now has blk3, blk1, blk0, blk4, and blk5.
(Step[0232]420) Does RA contain data block i or blk2?
(Step[0233]422) RA does not contain blk2. Write blk2 into position [5, 3] in the SM and the RA. RA now has blk3, blk1, blk0, blk4, blk5, and blk2.
(Step[0234]424) Add 1 to i (i=3) to derive value for position [0, 3]. Go back toStep414.
(Step[0235]414) Compare i to x.
(Step[0236]418) i is less than x (3<6). Read matrix positions of column [0] in the SM and write to RA. Position [0, 0] contains blk0. All other positions are empty. RA already contains blk0; thus, discard blk0.
(Step[0237]420) Does RA contain data block i or blk3?
(Step[0238]424) RA does contain blk3. Thus, nothing is written into position [0, 3]. Add 1 to i (i=4) to derive value for position [1, 3]. Go back toStep414.
(Step[0239]414) Compare i to x.
(Step[0240]418) i is less than x (4<6). Read matrix positions of column [1] in the SM and write to RA. Position [1, 0] contains blk1 and position [1, 1] contains blk0. All other positions are empty. RA already containsblk 1 and blk0; do not write a duplicate copy.
(Step[0241]420) Does RA contain data block i or blk4?
(Step[0242]424) RA does contain blk4. Thus, nothing is written into position [1, 3]. Add 1 to i (i=5) to derive value for position [2, 3]. Go back toStep414.
(Step[0243]414) Compare i to x.
(Step[0244]418) i is less than x (5<6). Read matrix positions of column [2] in the SM and write to RA. Position [2, 0] contains blk2 and position [2, 2] containsblk 0. All other positions are empty. RA already contains blk2 and blk0; do not write a duplicate copy.
(Step[0245]420) Does RA contain data block i or blk5?
(Step[0246]424) RA does contain blk5. Thus, nothing is written into position [2, 3]. Add 1 to i (i=6). Go back toStep414.
(Step[0247]414) Compare i to x.
(Step[0248]416) i is equal to x (6=6). Increment j by 1 (j=4). Go to Step406.
(Step[0249]406) Clear a Reference Array (RA)
(Step[0250]408) Compare j to x.
(Step[0251]412) j is less than x (4<6), let i=0.
(Step[0252]414) Compare i to x.
(Step[0253]418) i is less than x (0<6). Read matrix positions of column [4] in the SM and write to RA. Position [4, 0] contains blk4. Blk4 is written into RA. All other positions are empty.
(Step[0254]420) Does RA contain data block i or blk0?
(Step[0255]422) RA does not contain blk0. Write blk0 into position [4, 4] in the SM and the RA. RA now has blk4 and blk0.
(Step[0256]424) Add 1 to i (i=1) to derive value for position [5, 4]. Go back toStep414.
(Step[0257]414) Compare i to x.
(Step[0258]418) i is less than x (1<6). Read matrix positions of column [5] in the SM and write to RA. Position [5, 0] contains blk5 and position [5, 3]contains blk2. All other positions are empty. RA now has blk4, blk0, blk 5, and blk2.
(Step[0259]420) Does RA contain data block i or blk1 ?
(Step[0260]422) RA does not contain blk1. Write blk1 into position [5, 4] of the SM and the RA. RA now has blk4, blk0, blk5, blk2, and blk1.
(Step[0261]424) Add 1 to i (i=2) to derive value for position [0, 4]. Go back toStep414.
(Step[0262]414) Compare i to x.
(Step[0263]418) i is less than x (2<6). Read matrix positions of column [0] in the SM and write to RA. Position [0, 0] contains blk0. All other positions are empty. RA already contains blk0; thus, do not write a duplicate copy.
(Step[0264]420) Does RA contain data block i or blk2?
(Step[0265]424) RA does contain blk2. Add 1 to i (i=3) to derive value for position [1, 4]. Go back toStep414.
(Step[0266]414) Compare i to x.
(Step[0267]418) i is less than x (3<6). Read matrix positions of column [1] in the SM and write to RA. Position [1, 0] contains blk1 and position [1, 1] contains blk0. All other positions are empty. RA already contains blk1 and blk0; do not write a duplicate copy.
(Step[0268]420) Does RA contain data block i or blk3?
(Step[0269]422) RA does not contain blk3. Write blk3 into position [1, 4] of the SM and the RA. RA now has blk4, blk0, blk5, blk2, blk1, and blk3.
(Step[0270]424) Add 1 to i (i=4) to derive value for position [2, 4]. Go back toStep414.
(Step[0271]414) Compare i to x.
(Step[0272]418) i is less than x (4<6). Read matrix positions of column [2] in the SM and write to RA. Position [2, 0] contains blk2 and position [2, 2] contains blk0. All other positions are empty. RA already contains blk2 and blk0; do not write a duplicate copy.
(Step[0273]420) Does RA contain data block i or blk4?
(Step[0274]424) RA does contain blk4. Thus, nothing is written into position [2, 4]. Add 1 to i (i=5) to derive value for position [3, 4]. Go back toStep414.
(Step[0275]414) Compare i to x.
(Step[0276]418) i is less than x (5<6). Read matrix positions of column [3] in the SM and write to RA. Position [3, 0] contains blk3, position [3, 2] contains blk1, and position [3, 3] contains blk0. All other positions are empty. RA already contains blk3, blk1, and blk0; do not write a duplicate copy.
(Step[0277]420) Does RA contain data block i or blk5?
(Step[0278]424) RA does contain blk5. Thus, nothing is written into position [3, 4]. Add 1 to i (i=6). Go back toStep414.
(Step[0279]414) Compare i to x.
(Step[0280]416) i is equal to x (6=6). Increment j by 1 (j=5). Go to Step406.
(Step[0281]406) Clear a Reference Array (RA)
(Step[0282]408) Compare j to x.
(Step[0283]412)j is less than x (5<6), let i=0.
(Step[0284]414) Compare i to x.
(Step[0285]418) i is less than x (0<6). Read matrix positions of column [5] in the SM and write to RA. Position [5, 0] contains blk5, position [5, 3] contains blk2, and position [5, 4] contains blk1. Blk5, blk2, and blk1 are written into RA. All other positions are empty.
(Step[0286]420) Does RA contain data block i or blk0?
(Step[0287]422) RA does not contain blk0. Write blk0 into position [5, 5] in the SM and the RA. RA now has blk5, blk2, blk1, and blk0.
(Step[0288]424) Add 1 to i (i=1) to derive value for position [0, 5]. Go back toStep414.
(Step[0289]414) Compare i to x.
(Step[0290]418) i is less than x (1<6). Read matrix positions of column [0] in the SM and write to RA. Position [0, 0] contains blk0 and all other positions are empty. RA now has blk5, blk2, blk1, and blk0.
(Step[0291]420) Does RA contain data block i or blk1?
(Step[0292]424) RA does contain blk1. Add 1 to i (i=2) to derive value for position [1, 5]. Go back toStep414.
(Step[0293]414) Compare i to x.
(Step[0294]418) i is less than x (2<6). Read matrix positions of column [1] in the SM and write to RA. Position [1, 0] containsblk 1, position [1, 1] contains blk0, and position [1, 4] contains blk3. All other positions are empty. RA already contains blk0 and blk1; thus, do not write a duplicate copy. Write blk3 into RA. RA now has blk5, blk2, blk2, blk1, blk0, and blk3.
(Step[0295]420) Does RA contain data block i or blk2?
(Step[0296]424) RA does contain blk2. Add 1 to i (i=3) to derive value for position [2, 5]. Go back toStep414.
(Step[0297]414) Compare i to x.
(Step[0298]418) i is less than x (3<6). Read matrix positions of column [2] in the SM and write to RA. Position [2, 0] contains blk2 and position [2, 2] contains blk0. All other positions are empty. RA already contains blk2 and blk0; do not write a duplicate copy.
(Step[0299]420) Does RA contain data block i or blk3?
(Step[0300]424) RA does contain blk3. Add 1 to i (i=4) to derive value for position [3, 5]. Go back toStep414.
(Step[0301]414) Compare i to x.
(Step[0302]418) i is less than x (4<6). Read matrix positions column [3] in the SM and write to RA. Position [3, 0] contains blk3, position [3, 2] contains blk1, position [3, 3] contains blk0. All other positions are empty. RA already contains blk3, blk1, and blk0; do not write a duplicate copy.
(Step[0303]420) Does RA contain data block i or blk4?
(Step[0304]422) RA does not contain blk4. Write blk4 into position [3, 5] of the SM and the RA. The RA now has blk5, blk2, blk1, blk0, blk3, and blk4.
(Step[0305]424) Add 1 to i (i=5) to derive value for position [4, 5]. Go back toStep414.
(Step[0306]414) Compare i to x.
(Step[0307]418) i is less than x (5<6). Read matrix positions of column [4] in the SM and write to RA. Position [4, 0] contains blk4 and position [4, 4] contains blk0. All other positions are empty. RA already contains blk4 and blk0; do not write a duplicate copy.
(Step[0308]420) Does RA contain data block i or blk5?
(Step[0309]424) RA does contain blk5. Thus, nothing is written into position [3, 4].
(Step[0310]424) Add 1 to i (i=6). Go back toStep414.
(Step[0311]414) Compare i to x.
(Step[0312]416) i is equal to x (6=6). Increment j by 1 (j=5). Go to Step406.
(Step[0313]406) Clear a Reference Array (RA)
(Step[0314]408) Compare j to x.
(Step[0315]410) j is equal to x (6=6); END.