Codec
AssigneeBlackbird PLC
InventorStephen Streater
Life of this patent
Estimating the term…
Abstract
As may be implemented with one or many embodiments, a video stream is divided into a key frame and subsequent chunks of frames including a key frame and Delta (Dx) frames constructed from adjacent frames by dividing the frame into Motion Regions representing groups of pixels, determining a pixel group in an Earlier and later frame that is a best match for a pixel group in a Motion Region of a Current frame, and determining motion vectors for best matches for the Motion Regions and/or by intra-frame compression. A bitstream may be built such that as x increases, motion vector and other data relating to a combination of Dx frames is represented by data that is less than all the data in the combination of Dx frames and increases at a lower rate than the quantity of frames in Dx compared to the quantity of frames in Dx 1.
Claims22
A computer-implemented method for encoding a video stream comprising:
- dividing the video stream into:
- a first Key frame, and
- subsequent chunks each comprising 2n frames, where n is an integer greater than one each chunk including a Key frame and 2n-1 Delta (Dx) frames, where x is a positive integer from 1 to n, and denotes the level of the Delta frame, and where 2x-1 denotes the number of Delta frames at level x in the chunk;
- the method including the step of constructing Dx level frames from adjacent Earlier and Later Dy frames, where y<x and y is an integer from 0 to x-1, where for y=0, Dy is a Key frame, for all frames in a chunk where x >0,
- wherein the constructing step includes:
- dividing the frame into Motion Regions representing groups of pixels;
- determining a pixel group in an Earlier (E) Dy frame and in a later (L) Dy frame that is a best match for a pixel group in a Motion Region of a Current (C)Dx frame;
- and
- determining motion vectors for the best matches for the Motion Regions,
- the method including building a bitstream, wherein motion vector data is represented by a quantity of data in the bitstream, the bitstream further including data identifying which pixels include an error, and the respective errors, wherein for neighboring Motion Regions that touch each other at touching edges, the neighboring Motion Regions having differing motion vectors, the maximum allowable error values for pixels on sides of the Motion Regions that touch, is reduced for the half of each Motion Region at the touching edges.
A non-transitory machine-readable medium having instructions that, when executed, cause a method for encoding a video stream to be performed, the method comprising:
- dividing the video stream into:
- a first Key frame, and
- subsequent chunks each comprising 2n frames, where n is an integer greater than one, each chunk including a Key frame and 2n-1 Delta (Dx) frames, where x is a positive integer from 1 to n, and denotes the level of the Delta frame, and where 2x-1 denotes the number of Delta frames at level x in the chunk;
- constructing Dx level frames from adjacent Earlier and Later DY frames, where y<x and y is an integer from 0 to x-1, and where for y=0, DY is a Key frame, for all frames in a chunk where x >0;
- wherein the constructing includes:
- dividing the frame into Motion Regions representing groups of pixels;
- determining a pixel group in an Earlier (E) DY frame and in a later (L) DY frame that is a best match for a pixel group in a Motion Region of a Current (C) Dx frame;
- determining motion vectors for the best matches for the Motion Regions;
- and
- building a bitstream wherein motion vector data is represented by a quantity of data in the bitstream, the bitstream further including data identifying which pixels include an error, and the respective errors, wherein for neighboring Motion Regions that touch each other at touching edges, the neighboring Motion Regions having differing motion vectors, the maximum allowable error values for pixels on sides of the Motion Regions that touch, is reduced for the half of each Motion Region at the touching edges.
A device including a camera, a processor and a non-transitory machine-readable medium having instructions that, when executed by the processor, encode a video stream captured by the camera, wherein the video stream is divided into:
- a first Key frame, and
- subsequent chunks each comprising 2n frames, where n is an integer greater than one, each chunk including a Key frame and 2n-1 Delta (Dx) frames, where x is a positive integer from 1 to n, and denotes the level of the Delta frame, and where 2x-1 denotes the number of Delta frames at level x in the chunk;
- the instructions, when executed by the processor, constructing Dx level frames from adjacent Earlier and Later DY frames, where y<x and y is an integer from 0 to x-1, and where for y=0, DY is a Key frame, for all frames in a chunk where x >0;
- wherein the constructing includes:
- dividing the frame into Motion Regions representing groups of pixels;
- determining a pixel group in an Earlier (E) DY frame and in a later (L) DY frame that is a best match for a pixel group in a Motion Region of a Current (C) Dx frame;
- determining motion vectors for the best matches for the Motion Regions;
- and
- building a bitstream, wherein motion vector data is represented by a quantity of data in the bitstream, the bitstream further including data identifying which pixels include an error, and the respective errors, wherein for neighboring Motion Regions that touch each other at touching edges, the neighboring Motion Regions having differing motion vectors, the maximum allowable error values for pixels on sides of the Motion Regions that touch, is reduced for the half of each Motion Region at the touching edges.
Dependencies are inferred from the claim text.