The present disclosure relates generally to the field of video encoding and in particular to video encoding using a discrete wavelet transform.
Cloud-based gaming platforms involve executing portions of or entire videogame applications on remote servers to facilitate playing the video game application on a local client device. The remote servers provide audio and video rendered from executing video game applications as encoded audio and video streams over a network to the local client device. As such, the local client device only needs a screen and a device capable of playing a video stream in order to effectively run high-end, resource-intensive videogames. For the client device to display the high-quality graphics during gameplay, the remote servers transmit high-resolution high-frame-rate video requiring a large amount of network bandwidth, requiring the remote servers to encode and compress the video streams to reduce bandwidth without sacrificing video quality. One current approach to this requirement is to use a strict low-latency constant bitrate control scheme (“CBR”), which often results in a bitstream unnecessarily undershooting its target bitrate, under-utilizing the available bandwidth.
Techniques and systems described herein address the demands of providing bandwidth-efficient video streams from one or more servers to a client device while maintaining video quality. The proposed solution may, in particular, be implemented (without being limited to such an example implementation) in a cloud-based gaming system. A cloud-based gaming system includes a cloud-based or other remote server rendering a set of gaming frames that represents the visual content of a video game instance being executed at that server or a related server. The server encodes each gaming frame of the set of gaming frames using an encoding process described herein to generate a bitstream representing a stream of encoded rendered game frames for transmission to one or more client devices via one or more networks. In particular, such techniques and systems described herein allow for encoding frames at a server using an encoding operation that decomposes a frame into a base layer and enhancement layer. The operation also includes encoding the resulting base layer to produce an encoded base layer and generating a progressive stream from the resulting enhancement layer. For example, generating a progressive stream from the enhancement layer results from performing a zeroblock-based encoding on the enhancement layer to produce a progressive stream that represents one or more refinements to the resulting base layer. To limit the bandwidth of a resulting stream, the operation includes combining the encoded base layer and encoded enhancement layer so that the combined sum of respective sizes of the two layers is below a threshold size. By using this, for example wavelet-driven, encoding operation, the server may reduce the bandwidth needed to transmit any resulting stream while maintaining visually important directional edge info to optimize perceived video quality.
According to one example embodiment, a method can include decomposing a first frame into a base layer of the first frame and an enhancement layer of the first frame. The method can also include encoding the base layer at a target base layer bitrate based on a target bitrate to produce an encoded base layer and generating a progressive stream from the enhancement layer. Additionally, the method further includes truncating the progressive stream based on the target bitrate to produce a truncated progressive stream and combining the encoded base layer with the truncated progressive stream to produce an encoded first frame.
Truncating the progressive stream can include determining a sum of a size of the encoded base layer and a size of the progressive stream and comparing the sum to a ratio of the target bitrate to a frame rate of the first frame. Additionally, the method can include truncating the progressive stream in response to the sum being greater than the ratio. In an example embodiment, a multiplexer may truncate the encoded enhancement layer to decrease the size of the resulting encoded first frame. In doing so, the amount of bandwidth needed to transmit an encoded set of frames to a client system may be reduced while maintaining visually important details from the enhancement layer.
For example, a proposed encoding operation may be implemented to encode one or more gaming frames into a gaming stream. The encoding operation may then include decomposing a current frame into the base layer and the enhancement layer. The resulting base layer and enhancement layer are then each encoded to produce an encoded base layer and an encoded enhancement layer. The encoded enhancement layer is truncated, for example, according to a comparison of the sum of the size of the encoded base layer and the size of the encoded enhancement layer to a threshold value. In an example embodiment, a multiplexer combines the encoded base layer and truncated enhancement layer to produce the encoded first frame. The encoded first frame may then be transmitted as part of a stream to a client device.
Generally, generating the progressive stream can include encoding the enhancement layer by a zeroblock-based encoder. Additionally, in general, decomposing the first frame into the base layer and the enhancement layer can include applying a discrete wavelet transform to the first frame. Applying the wavelet transform can include decomposing the image into a plurality of sub-bands, wherein a first subset of the plurality of sub-bands forms the base layer of the first frame and a second subset of the plurality of sub-bands forms the enhancement layer of the first frame. A first subset of the plurality of sub-bands can include at least one sub-band defined by a first lower boundary and second upper boundary. The second subset of the plurality of sub-bands can include two or more partial sub-bands of different levels, for example in each case differing from and being higher than the boundaries of the first sub-band. In an example embodiment, the boundaries of the at least two or more partial sub-bands of the second subset may relate to consecutive parts of the second sub-band so that for example a first partial sub-band covers a first range and at least one second partial sub-band covers a second range higher than the first range (e.g., resulting from passing a frame through different low-pass and high-pass filters). In an example embodiment, at least three partial sub-bands relating to a least three different ranges, such as at least a (partial) low-high sub-band, (partial) high-low sub-band, and (partial) high-high sub-band. This may include a first subset of the plurality of sub-bands including at least a low-low sub-band and the second subset of the plurality of sub-bands includes at least a low-high sub-band, high-low sub-band, and high-high sub-band.
In another example embodiment, a method includes receiving a first frame of a set of frames and decomposing the first frame into a plurality of sub-bands. The plurality of sub-bands can include a base layer and an enhancement layer. The method can additionally include encoding the base layer at a base layer target bitrate based on a target bitrate so as to produce an encoded base layer and encoding the enhancement layer so as to produce an encoded enhancement layer. The method can also include comparing a sum of the encoded base layer and the encoded enhancement layer to a ratio of a target bitrate to a framerate of the set of frames and truncating the encoded enhancement layer as a function of comparing the sum to the ratio so as to produce a truncated enhancement layer. The method may also further include combining the encoded base layer with the truncated enhancement layer so as to produce an encoded first frame.
In general, the enhancement layer may be encoded by a zeroblock-based encoder. Further, generally, the plurality of sub-bands can include at least a low-low sub-band, low-high sub-band, high-low sub-band, and high-high sub-band with the low-low sub-band can forming the base layer and the low-high, high-low, and high-high sub-bands forming the enhancement layer. Additionally, in general, decomposing the first frame includes applying a discrete wavelet transform to the first frame.
Generally, methods herein can include converting the first frame from a first color space to a second color space. The first color space can comprise RBG and the second color space can comprise YUV. Methods herein may also include determining the target bitrate according to a variable-bitrate-control scheme or determining the target bitrate according to a constant-bitrate-control scheme. Methods herein additionally can include transmitting a stream to a client device, the stream including the encoded first frame. Methods can also include decoding the encoded first frame.
In general, the enhancement layer may include data relating to one or more of horizontal edges, vertical edges, or diagonal edges of the frame.
According to another example embodiment, a method includes receiving a bitstream and separating an encoded base layer and an encoded enhancement layer from the bitstream. The method can also include decoding the encoded base layer so as to produce a decoded base layer and decoding the encoded enhancement layer according to a zeroblock-based decoder so as to produce a decoded enhancement layer. Additionally, the method can include reconstructing an image as a function of the decoded base layer and the decoded enhancement layer.
The image can include a YUV colorspace scheme.
Additionally, the method may include converting the image from the YUV colorspace scheme to an RGB colorspace scheme; and displaying the image in the RGB colorspace scheme.
According to example embodiments, a system can include one or more processors and a memory coupled to the one or more processors and storing executable instructions configured to manipulate the one or more processors to perform the methods disclosed herein.
According to additional example embodiments, a system can include a network interface couplable to a network and an encoder coupled to the network interface, the system configured to perform the methods disclosed herein.
The present disclosure may be better understood, and its numerous features and advantages made apparent to those skilled in the art by referencing the accompanying drawings. The use of the same reference symbols in different drawings indicates similar or identical items.
To facilitate understanding, the techniques of the present disclosure are described in the example context of a cloud-based gaming system in which a cloud-based or other remote server renderings a stream of video frames representing the visual content of a video game instance being executed at that server or a related server, and then encodes each frame using a wavelet-driven encoding process described herein to generate a bitstream representing a stream of encoded rendered game frames for transmission to one or more client devices via one or more networks. However, it will be appreciated that the systems and techniques described herein are not limited to this example context, but instead may be implemented in any of a variety of video stream encoding/decoding systems using the guidelines provided herein.
In the depicted embodiment, each server 102 includes a computing device such as, for example, a cloud server, virtual server, or any combination is configured to support one or more client gaming sessions executed on one or more client systems 112. A “client gaming session”, as used herein, includes a gaming application being played, partially simulated, or fully simulated on client system 112. Each server 102 is configured to support this client gaming session by executing a corresponding game platform instance 104 that facilitates the execution of at least a portion of the gaming application being played, partially simulated, or fully simulated on the client system 112. Such facilitation can include performing one or more operations related to the gaming application, such as, for example, rendering one or more frames related to the gaming application, performing calculations related to the gaming application (e.g., lighting calculations, artificial intelligence calculation, physics calculations, shading calculations, input calculations, and the like), providing access to files, or any combination thereof, to name a few. The game platform instance 104 provides various software and hardware resources to achieve such facilitation, such as communication/network management, resource management, media rendering encoding, and the like. In this way, game platform instance 104 simulates the execution of one or more operations of gaming application for a corresponding player as though that gaming application was being played on a local gaming device, such as a personal computer (“PC”), game console, smartphone, tablet computer, automotive entertainment system, and the like.
Each client system 112 represents the hardware and software resources utilized to receive player input through manipulation of one or more input/output devices for at least one player, as well as to present the video and audio content representing the visual and auditory content, respectively, of the gameplay for the at least one player. Examples of a client system 112 include one or more desktop computers, notebook computers, tablet computers, virtual-reality systems, augmented reality systems, a compute-enabled cellular phone (i.e., a “smartphone”), a compute-enabled television (i.e., a “smart TV”), or any combination thereof, to name a few. As illustrated with reference to client system 112-1, each client system 112 includes one or more client devices 116. In the illustrated embodiment, client system 112-1 comprises a first client device 116-1, which is communicatively coupled to, or otherwise associated with, display 118, at least one input device 120 (e.g. a gamepad, joystick, keyboard, mouse, touchscreen), one or more network interfaces configured to couple to the network connecting the client system 112 to a corresponding server 102, one or more processors, memory, storage, speakers, and other computing resources to render, process, and display scenes of a virtual environment. As illustrated with reference to client system 112-1, each client system 112 can include a decoder 114 configured to decode one or more frames related to a virtual environment. Decoder 114 can include hardware and software configured to decode one or more encoding streams (e.g., game streams 108) received from servers 102 so as to produce a decoded set of frames or decoded stream. In embodiments, client system 112-1 further comprises a smartphone client device 116-2, and a wearable virtual reality client device 116-3, each of which may operate as an integrated mobile computing device having input facilities, output facilities, display facilities, and communication facilities analogous to those noted above with respect to client device 116-1. In certain embodiments, client devices 116-1, 116-2, and 116-3 may include one or more facilities such as accelerometers, Global Positioning System (GPS) devices, and the like that are used to acquire motion data representing movement of the client device, as well as a rate or acceleration of such movement.
While certain aspects described herein will be discussed with specific reference to cloud gaming scenarios, it will be appreciated that in certain embodiments the described techniques may be utilized in various non-gaming scenarios, such as if one or more of servers 102 and client systems 112 operate to render, process, and display other types of informational, educational, recreational and/or artistic content. It will therefore be further appreciated that while techniques are discussed herein with respect to the rendering of content that may utilize particular examples relevant to cloud gaming and gaming content, such discussions and techniques may be applied to such non-gaming scenarios. Examples provided herein may refer to scenarios involving the rendering, processing, and display of gaming content due to particular bandwidth and network latency issues relevant to such content and should not be construed to indicate that the techniques described are limited to those scenarios.
During operation, each server 102 executes a gaming platform instance 104 for one or more client gaming sessions. Executing game platform instance 104 includes rendering a set of frames that includes one or more gaming frames associated with the gaming application being executed on one or more respective client systems 112. Each rendered gaming frame depicts at least a portion of a virtual environment used in the gaming application executed on the client system 112. For example, each rendered gaming frame can depict at least a portion of a virtual environment displayed on a display 118 of a client device 116 during the client gaming session.
Each server 102 is configured to encode each rendered gaming frame via encoder 106 so as to generate a respective encoded set of frames (also referred to herein as “game stream” 108). Each server 102 is configured to encode a game stream 108 through, for example, compression, reorganization, and manipulation of each frame rendered by gaming platform instance 104. In embodiments, each encoder 106 of a server 102 implements one or more codecs so as to encode one or more rendered frames according to the one or more codecs. Such codecs can include, H. 264, H. 265, VP9, AV1, or any combination thereof, to name a few. According to embodiments, each server 102 is configured to encode a set of frames to produce a game stream 108 using a wavelet-driven encoding process, such as by decomposing one or more frames of a set of frames into a respective base layer and enhancement later, encoding the resulting base layer and enhancement layer, and combining the encoded base layer and enhancement layer according to a threshold value. Each resulting game stream 108 corresponds to a gaming application being executed on one or more client systems 112 and is provided to these corresponding client systems via network 110. The corresponding client systems 112 are each configured to decode a received game stream 108 via a decoder 114 and display the resulting decoded set of frames 122 on, for example, a display 118. Each client system 112 is configured to decode a respective game stream 108 by compression, reorganization, and manipulation of the frames within the encoded stream according to one or more various video codecs including lossless and lossy codecs. According to embodiments, each client system 112 includes a decoder that implements one or more codecs so as to decode a received game stream 108 according to the one or more codecs. Such codecs can include, H. 264, H. 265, VP9, AV1, or any combination thereof, to name a few. Though three game streams 108-1, 108-2, 108-3 are depicted in the illustrated embodiment, in other embodiments, servers 102 can generate any number of game streams 108 each corresponding to one or more client gaming sessions.
Referring now to
According to embodiments, processor 236 includes one or more computer processing units (“CPUs”), microprocessors, field-programmable gate arrays (“FPGAs”), graphics processing units (“GPUs”), application-specific integrated circuits (“ASICs”), or any combination thereof and is configured to render and encode gaming frames for use in a client gaming session on cloud-based gaming system 100. Processor 236 operates to execute a game platform instance 204, the same or similar as game platform instance 104, associated with a current client gaming session and configured to support a gaming application executed on one or more client systems. Game platform instance 204 includes graphics hardware and software (not shown for clarity) to render a set of game frames 250 associated with a virtual environment of the gaming application executed on the one or more client systems. Such graphics hardware and software include, for example, graphics cores, processing cores, pixel shaders, video random access memory (VRAM), GPUS, physics engines, lighting engines, tessellation engines, and the like. Each rendered game frame of the set of game frames 250 represents at least a portion of a virtual environment associated with the gaming application executed on the client system.
Portions of the virtual environment include, for example, interactive and noninteractive assets such as backgrounds, environments, characters, textures, items, heads-up displays (“HUDs”), animations, and the like. For example, if the gaming application is a racing game, each game frame of the set of game frames 250 represents at least a portion of a racetrack, car, or surrounding area.
According to embodiments, each rendered game frame of the set of game frames 250 has a first color space, or color model, such as, for example, RGB, BGR, GBR, YCbCr, YUV, HSV, HSL, LCh, and CMYK, to name a few. In embodiments, each rendered frame of the set of game frames 250 is provided to color space converter 224 which includes hardware and software configured to convert the color space, or color model, of the rendered frame from a first color space to a second, different color space. As an example, color space converter 224 is configured to convert a current game frame from an RGB color space to a YUV color space. Color space converter 224 includes such hardware and software as, for example, FPGAs, microcontrollers, ASICs, GPUs, and the like.
Processor 236 also includes a wavelet transformer 226 including hardware and software configured to decompose a current frame into a plurality of sub-bands with each sub-band of the plurality of sub-bands representing one or more frequency bands associated with the frame. According to embodiments, wavelet transformer 226 is configured to perform a discrete wavelet transform on a game frame 305 which includes passing the game frame 305 through a series of one or more low pass filters and one or more high-pass filters to generate one or more sub-bands. Referring now to
Wavelet transformer 226 is further configured to decompose a game frame into a base layer and an enhancement layer at multiple levels.
Referring again to
wherein TBcurrent represents the target bitrate for the current base layer (also referred to herein as a “target base layer bitrate”), TBstream represents the predetermined target bitrate for game stream 108, and a represents a constant corresponding to the number of levels at which the current frame was decomposed to result in the current base layer. For example, if a current frame was decomposed at one level, α is be set at 0.8 and if a current frame was decomposed at two levels, α is set at 0.6.
Processor 236 likewise includes enhancement layer encoder 232 including hardware and software configured to encode an enhancement layer decomposed from the current frame to produce an encoded enhancement layer. According to embodiments, enhancement layer encoder 232 is distinct from base layer encoder 228 and operates concurrently with base layer encoder 228. In embodiments, enhancement layer encoder 232 includes a progressive zeroblock-based encoder configured to compress a decomposed enhancement layer to produce an encoded enhancement layer or progressive stream. That is to say, the progressive zeroblock-based encoder encodes the enhancement layer into an encoded bitstream representing one or more refinements to the base layer decomposed from the current frame (i.e., a “progressive stream”.) The progressive zeroblock-based encoder is configured to determine if one or more blocks of an enhancement layer are “zero blocks”. That is to say, the progressive zeroblock-based encoder is configured to determine if one or more blocks of an enhancement layer are substantially similar to respective, adjacent blocks of the enhancement layer. According to embodiments, the progressive zeroblock-based encoder is configured to determine one or more zero blocks by sorting the coefficients of the enhancement layer by significance such as into sets of a first type of coefficients, e.g., “significant” coefficients, and a second type of coefficients, e.g., “insignificant” coefficients, and flagging blocks with coefficients of the second type (i.e., insignificant coefficients) as zero blocks. The progressive zeroblock-based encoder is configured to compress the identified zero blocks so that the quantized coefficients of the encoded zero blocks are all zero. In this way, the progressive zeroblock-based encoder encodes an encoded layer that includes one or more successive refinements to the detail of a base layer into a progressive stream (i.e., an encoded bitstream representing one or more refinements to the base layer decomposed from the current frame).
In embodiments, processor 236 includes multiplexer 234 configured to combine an encoded base layer and an encoded enhancement layer, or progressive stream, to generate an encoded game frame. According to embodiments, multiplexer 234 is configured to truncate an encoded enhancement layer, or progressive stream, based on a target bitrate for the game stream 108. Truncating the encoded enhancement layer can include determining the size of a sum of the encoded base layer and the encoded enhancement layer and comparing this sum to a threshold value. In embodiments, this threshold value can include a ratio of the target bitrate for the game stream 108 to the frame rate associated with the current frame. Based on this comparison, the encoded enhancement layer can be truncated so that the sum of the size of a sum of the encoded base layer and the encoded enhancement layer does not exceed the threshold value. In this way, the bandwidth of the resulting game stream 108 may be reduced while preserving visually important (i.e., significant) details of the frame, such as directional edge info.
Referring now to
In operation 400, a first frame 410 of the set of frames 405 includes a first color space, such as, for example, RGB. The encoding operation 400 includes color space converter 224 performing a color space conversion 415 on the first frame 410. The color space conversion 415 includes converting, or changing, the color space of the first frame 410 from a first color space to a second, different color space. In other words, the color space conversion 415 includes converting the first frame 410 having a first color space to generate a converted frame 420 having a second, different color space. For example, the color space conversion 415 includes converting the first frame 410 having an RGB color space to generate a converted frame 420 having YUV color space.
According to embodiments, the encoding operation 400 further includes wavelet transformer 226 performing a discrete wavelet transform 425, similar or the same as discrete wavelet transform 310, on the converted frame 420. The discrete wavelet transform 425 includes decomposing converted frame 420 into a resulting base layer 430 and resulting enhancement layer 435. The discrete wavelet transform 425 includes decomposing a frame at one or more levels into a plurality of sub-bands that form a base layer 430 and an enhancement layer 435. The resulting base layer 430 provides one or more coefficients representing a basic quality level of the converted frame 420 at a low bit rate and the resulting enhancement layer 435 provides successive refinement to the detail of the base layer 430. For example, enhancement layer 435 includes data representing, for example, horizontal edges, vertical edges, or diagonal edges of the converted frame 420.
In embodiments, the encoding operation 400 includes base layer encoder 228 performing a base layer encoding 440 on the resulting base layer 430 to produce an encoded base layer. The base layer encoding 430 includes compressing and encoding base layer 430 according to one or more encoding processes and codecs. In embodiments, base layer encoder 228 performs base layer encoding 430 according to a variable bitrate provided by, for example, a rate controller 230 configured to perform a bitrate calculation 450. The bitrate calculation 450 includes determining a bitrate at which to encode a resulting base layer 430 based upon the number of levels used in discrete wavelet transform 425 to decompose the converted frame 420 into base layer 430. For example, the bitrate calculation 450 includes determining a first bitrate to encode the base layer 430 in response to the converted frame 420 being decomposed at one level to produce base layer 430 and a second bitrate to encode the base layer 430 in response to the converted frame 420 being decomposed at two levels to produce base layer 430. According to embodiments, bitrate calculation 450 includes determining a target bitrate (TBcurrent) the same or similar as the process used by rate controller 230 discussed above with reference to
Encoding operation 400 also includes enhancement layer encoder 232 performing an enhancement layer encoding 445 on the resulting enhancement layer 435 to produce an encoded enhancement layer, or progressive stream. In embodiments, encoding operation 400 includes base layer encoder 228 performing base layer encoding 440 on resulting base layer 430 and enhancement layer encoder 232 performing enhancement layer encoding 445 on resulting enhancement layer 435 concurrently. Enhancement layer encoding 445 includes identifying zero blocks in the resulting enhancement layer 445 by sorting the coefficients of the enhancement layer 445 into “significant bits” and “insignificant bits”. According to embodiments, enhancement layer encoding 445 includes initializing a list of insignificant sets and a list of significant pixels. Initializing these lists includes populating the list of insignificant sets with the coefficients of the one or more LH, HL, and HH sub-bands that make up the enhancement layer 435 and emptying the list of significant pixels. In embodiments, each of the one or more LH, HL, and HH sub-bands represent a block, or a group of one or more pixels, of the enhancement layer 435. Enhancement layer encoding 445 further includes performing a sorting pass for each element within the list of insignificant sets. The sorting pass includes performing a significance test on each element within the list of insignificant sets, that is to say, the sorting pass includes performing a significance test on each sub-band that forms the enhancement layer 435. A significance test, as used herein, is one or more functions configured to determine the significance of one or more pixels of an enhancement layer by comparing the coefficients of the enhancement layer to a predetermined threshold value. For example, a significance test may be represented by the following function:
wherein Ci,j represents the magnitude of the wavelet coefficient located at (i,j), T represents a set, or sub-band, in the list of insignificant sets, and Γn(T)=1 indicates that a set (T) is significant. According to embodiments, in response to a set being determined as significant, enhancement layer encoding 445 includes determining if the set represents a pixel or a block. In response to the set representing a pixel, the set is removed from the list of insignificant sets and is added to the list of significant pixels. In response to the set not representing a pixel, the set is then partitioned into one or more subsets and the significance test is then performed on the partitioned one or more subsets. In embodiments, pixels deemed to be insignificant (i.e., not significant) are compressed so that their quantized coefficients are all zero. In this way, enhancement layer encoding 435 produces an encoded enhancement layer. That is to say, enhancement layer encoding 435 produces an encoded bitstream representing one or more refinements to the resulting base layer 430 (i.e., progressive stream) from the resulting enhancement layer 435.
The encoding operation 400 further includes multiplexer 234 performing a multiplexing operation 455 which includes combining the encoded base layer and the encoded enhancement layer or progressive stream to produce an encoded frame 460. Multiplexing operating 455 includes truncating the encoded enhancement layer or progressive stream according to a target bitrate for a resulting game stream 108. In embodiments, rate controller 230 performs bitrate calculation 450 to determine the target bitrate. Rate controller 230 determines the target bitrate based on, for example, one or more predetermined values, codecs implemented by base layer encoder 228 and enhancement layer encoder 232, one or more other frames of set of frames 405, available bandwidth, or any combination thereof. In embodiments, multiplexing operation 455 includes determining a size, in bits, of the sum of the encoded base layer and the encoded enhancement layer, or progressive stream. Multiplexing operation 455 further includes comparing this sum to a ratio of the target bitrate for the stream to a frame rate associated with the set of frames 405. The frame rate associated with the set of frames 405 includes, for example, the rate at which the set of frames 405 was rendered, the rate at which the set of frames 405 are to be played back, the rate at which the set of frames 405 are to be streamed, or any combination thereof. In response to the sum being greater than the ratio of the target bitrate for the stream to a frame rate associated with the set of frames 405, the encoded enhancement layer is truncated such that the sum is equal to the ratio.
According to embodiment, processor 236 performs encoding operation 400 for each frame of the set of frames 405 resulting in a plurality of encoded frames. These encoded frames form a game stream 108 that is provided to one or more client systems over a network.
Referring now to
At block 530, multiplexer 234 determines a size of the sum of the encoded base layer and encoded enhancement layer. Multiplexer 234 compares this determined size to a ratio of a target bitrate for a resulting game stream 108 and a frame rate associated with the first frame. In response to the size being greater than the ratio, the system moves to block 535 and in response to the size not greater than the ratio, the system moves to block 540. At block 535, multiplexer 234 truncates the encoded enhancement layer, or progressive stream, so that the sum of the encoded base layer and the encoded enhancement layer is equal to the ratio of a target bitrate for a resulting game stream and a frame rate associated with the first frame. At block 540, multiplexer 234 combines the encoded base layer and encoded enhancement layer, or truncated enhancement layer, to produce an encoded frame. In embodiments, processor 236 is configured to perform method 500 for each frame of a set of frames producing a stream of frames, or game stream, that is provided to one or more client systems associated with the gaming session.
Referring now to
According to embodiments, processor 644, modem 648, and memory 650 are internally in electronic communication via one or more interfaces (e.g., a bus 652). According to embodiments, processor 644 includes one or more CPUs, microprocessors, FPGAs, GPUs, processing cores, or any combination thereof and is configured to decode and display gaming frames for use in a gaming application 664 associated with a client gaming session on cloud-based gaming system 100. In embodiments, processor 644 includes a decoder 614 capable of decoding one or more game frames from a game stream 108 encoded according to any of the processes and methods discussed above with reference to
According to embodiments, a base layer decoder 656 includes one or more hardware and software decoders configured to decode and decompress an encoded base layer to produce a decoded base layer. The base layer decoder 656 is configured to decode an encoded base layer according to one or more intraframe and interframe techniques and one or more codecs. As discussed above in
According to embodiments, the wavelet constructor 660 includes hardware and software configured to perform an inverse discrete waveform transform on the decoded base layer and decoded enhancement layer to produce a converted frame. According to embodiments, the wavelet constructor 660 is configured to perform an inverse discrete waveform transform that is the inverse function to the discrete waveform transform discussed above with reference to
Referring now to
The decoding operation 700 includes demultiplexer 654 performing a demultiplexing operation 710 on each received encoded frame 705. The demultiplexing procedure includes separating the encoded base layer and the encoded enhancement layer from the encoded frame. The encoded base layer represents a basic quality level of the encoded frame 705 at a low bit rate and the encoded enhancement layer provides successive refinement to the detail of the encoded base layer. Also in the operation 700, the base layer decoder 656 performs a base layer decoding 715 on the resulting encoded base layer and the enhancement layer decoder 658 performs an enhancement layer decoding 720 on the resulting encoded enhancement layer. In embodiments, the decoding operation 700 includes the base layer decoder 656 executing the base layer decoding 715 and the enhancement layer decoder 658 executing the enhancement layer decoding 720 concurrently.
Base layer decoding 715 includes decoding a resulting encoded base layer according to one or more decompression techniques and one or more codecs to produce a decoded base layer. The decoded base layer includes one or more coefficients representing the brightness of one or more areas of the encoded frame. Likewise, enhancement layer decoding 720 includes decoding a resulting encoded enhancement layer according to one or more decompression techniques and one or more codecs to produce a decoded enhancement layer or decoded progressive stream. According to embodiments, enhancement layer decoding 720 includes a progressive zeroblock decoding operation. The progressive zeroblock decoding operation includes initializing a list of insignificant sets and a list of significant pixels. Initializing these sets includes populating the list of insignificant sets with the sub-bands forming the encoded enhancement layer such as, for example, one or more LH, HL, and HH sub-bands and emptying the list of significant pixels. The progressive zeroblock decoding operation further includes a significance load function on each set in the list of insignificant sets. The significance load function compares each set to a threshold value to determine if that set is significant. When a set is determined to be significant, it is then determined if that set represents a pixel of the encoded frame 705 or a block (i.e., one or more pixels) of the encoded frame 705. In response to the set representing a pixel, that set is added to the list of significant pixels. In response to the set representing a block, the set is partitioned into one or more subsets and each of the one or more subsets is then compared to the threshold value to determine significance. After each set has been sorted by significance, the progressive zeroblock decoding operation includes decompressing the data in the list of significant pixels. By only decoding the sets in the list of significant pixels, the decoding time for the encoded frame is reduced.
The decoding operation 700 further includes wavelet constructor 660 performing an inverse discrete wavelet transform 730 on the resulting decoded base layer and enhancement layers. According to embodiments, the inverse discrete wavelet transform 730 is the inverse function for any discrete wavelet transform discussed above with reference to
Referring now to
In some embodiments, certain aspects of the techniques described above may be implemented by one or more processors of a processing system executing software. The software comprises one or more sets of executable instructions stored or otherwise tangibly embodied on a non-transitory computer-readable storage medium. The software can include the instructions and certain data that, when executed by the one or more processors, manipulate the one or more processors to perform one or more aspects of the techniques described above. The non-transitory computer-readable storage medium can include, for example, a magnetic or optical disk storage device, solid-state storage devices such as Flash memory, a cache, random access memory (RAM), or other non-volatile memory device or devices, and the like. The executable instructions stored on the non-transitory computer-readable storage medium may be in source code, assembly language code, object code, or other instruction format that is interpreted or otherwise executable by one or more processors.
A computer-readable storage medium may include any storage medium, or combination of storage media, accessible by a computer system during use to provide instructions and/or data to the computer system. Such storage media can include, but is not limited to, optical media (e.g., compact disc (CD), digital versatile disc (DVD), Blu-ray disc), magnetic media (e.g., floppy disc, magnetic tape, or magnetic hard drive), volatile memory (e.g., random access memory (RAM) or cache), non-volatile memory (e.g., read-only memory (ROM) or Flash memory), or microelectromechanical systems (MEMS)-based storage media. The computer-readable storage medium may be embedded in the computing system (e.g., system RAM or ROM), fixedly attached to the computing system (e.g., a magnetic hard drive), removably attached to the computing system (e.g., an optical disc or Universal Serial Bus (USB)-based Flash memory), or coupled to the computer system via a wired or wireless network (e.g., network accessible storage (NAS)).
Note that not all of the activities or elements described above in the general description are required, that a portion of a specific activity or device may not be required, and that one or more further activities may be performed, or elements included, in addition to those described. Still further, the order in which activities are listed is not necessarily the order in which they are performed. Also, the concepts have been described with reference to specific embodiments. However, one of ordinary skill in the art appreciates that various modifications and changes can be made without departing from the scope of the present disclosure as set forth in the claims below. Accordingly, the specification and figures are to be regarded in an illustrative rather than a restrictive sense, and all such modifications are intended to be included within the scope of the present disclosure.
The preposition “or” as used in the context of “at least one of A, B, or C”, is herein used to signify an “inclusive or.” That is to say, in the above and similar contexts, or is used to signify “at least one of or any combination thereof.” For example, “at least one of A, B, and C” is used to signify “at least one of A, B, C, or any combination thereof.”
Benefits, other advantages, and solutions to problems have been described above with regard to specific embodiments. However, the benefits, advantages, solutions to problems and any feature(s) that may cause any benefit, advantage, or solution to occur or become more pronounced are not to be construed as a critical, required, or essential feature of any or all the claims. Moreover, the particular embodiments disclosed above are illustrative only, as the disclosed subject matter may be modified and practiced in different but equivalent manners apparent to those skilled in the art having the benefit of the teachings herein. No limitations are intended to the details of construction or design herein shown, other than as described in the claims below. It is therefore evident that the particular embodiments disclosed above may be altered or modified and all such variations are considered within the scope of the disclosed subject matter. Accordingly, the protection sought herein is as set forth in the claims below.
Filing Document | Filing Date | Country | Kind |
---|---|---|---|
PCT/US2021/046498 | 8/18/2021 | WO |