Parallel video decoding
AssigneeRealNetworks, Inc.
InventorKarl O. Lillevold
Life of this patent
Estimating the term…
Abstract
A video receiver/renderer is provided with a decoder equipped with hardware and/or software components adapted to decode at least two slices of a video in parallel, in part. In various embodiments, the decoder is constituted with multiple decoding units or decoding instructions that can be executed in multiple threads. A decoding unit/thread is advantageously equipped to determine whether a slice has decoding dependency, if so, whether the portion(s) of the video on which a slice's decoding is dependent has/have been decoded. If the result of the latter determination is negative, the decoding unit suspends itself until the determination result is affirmative. If the slice has no decoding dependency or the determination result is affirmative, the decoding unit proceeds to decode the slice.
Claims17
A computer-implemented method comprising:
- decoding, by the computer, a first slice of a first frame of a video by performing a submethod comprising:
- determining, in accordance with a slice header of the first slice, that the first slice has a decoding dependency on a second slice of a second frame of the video;
- determining that said second slice has not been decoded;
- suspending decoding the first slice for a first predetermined amount of time;
- then
- determining after said first predetermined amount of time that said second slice has not been decoded;
- then
- suspending decoding the first slice at least one subsequent time, wherein the length of each subsequent suspension of time is reduced by another predetermined amount;
- then
- determining that said second slice has been decoded;
- and
- transforming said first slice from an encoded state to a decoded state;
- and
- decoding, by the computer, said second slice;
- wherein said first and second slices each comprise a plurality of macroblocks that are respectively selected from said first and second frames of the video.
A computer readable storage medium containing computer executable instructions that when executed by a processor, perform a method comprising:
- decode a first slice of a first frame of a video by performing a submethod comprising:
- determining, in accordance with a slice header of the first slice, that the first slice has a decoding dependency on a second slice;
- determining that said second slice has not been decoded;
- suspending decoding the first slice for a first predetermined amount of time;
- then
- determining after said first predetermined amount of time that said second slice has not been decoded;
- then
- suspending decoding the first slice at least one subsequent time, wherein the length of each subsequent suspension of time is reduced by another predetermined amount;
- then
- determining that said second slice has been decoded;
- and
- transforming said first slice from an encoded state to a decoded state;
- decode a second slice of a second frame of the video;
- and
- render said decoded first and second slices;
- wherein said first and second slices each comprise a plurality of macroblocks that are respectively selected from said first and second frames of the video.
An apparatus comprising:
- a buffer to store frames of a video;
- a first decoding unit coupled to the buffer to decode a first slice of a first frame of the video by performing a method comprising:
- determining, in accordance with a slice header of the first slice, that the first slice has a decoding dependency on a second slice;
- determining that said second slice has not been decoded;
- suspending decoding the first slice for a first predetermined amount of time;
- then
- determining after said first predetermined amount of time that said second slice has not been decoded;
- then
- suspending decoding the first slice at least one subsequent time, wherein the length of each subsequent suspension of time is reduced by another predetermined amount;
- then
- determining that said second slice has been decoded;
- and
- transforming said first slice from an encoded state to a decoded state;
- and
- a second decoding unit to decode a second slice of a second frame of the video;
- wherein said first and second slices each comprise a plurality of macroblocks that are respectively selected from said first and second frames of the video.
A system comprising:
- a video provider to provide an encoded video;
- and
- a video renderer coupled to the video provider to receive the encoded video, decode the received video, and render the decoded video, including
- a first decoding unit to decode a first slice of a first frame of the video by performing a method comprising:
- determining, in accordance with a slice header of the first slice, that the first slice has a decoding dependency on a second slice;
- determining that said second slice has not been decoded;
- suspending decoding the first slice for a first predetermined amount of time;
- then
- determining after said first predetermined amount of time that said second slice has not been decoded;
- then
- suspending decoding the first slice at least one subsequent time, wherein the length of each subsequent suspension of time is reduced by another predetermined amount;
- then
- determining that said second slice has been decoded;
- and
- transforming said first slice from an encoded state to a decoded state, and
- a second decoding to decode a second slice of a second frame of the video;
- wherein said first and second slices each comprise a plurality of macroblocks that are respectively selected from said first and second frames of the video.
Dependencies are inferred from the claim text.