IP Library Granted Patent US 10,593,299
Granted Patent B2
US 10,593,299 · App. 16/303,180 · Granted Mar 17, 2020

Computer-implemented method for reducing video latency of a computer video processing system and computer program product thereto

Inventor: Samuli Valo (Kaustinen, FI)
Assignee: Picturall Oy
G09G5/363G06T1/20G09G5/393G09G5/395G09G5/42
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 10,593,299
App. No.
16/303,180
Granted
Mar 17, 2020
Kind
B2
Abstract

The invention relates to a computer-implemented method for reducing video latency and computer program product thereto for a computer video processing system. Two separate threads, an input thread and an output thread, are created and configured to run simultaneously and independently from each other. The input thread is configured to process video input frames that may be split into a plurality of input slices. The output thread is configured to process video output frames. The video output frames may also be split into a plurality of output slices.

Claims (52)

1. A computer-implemented method for reducing video latency of a computer video processing system comprising at least one video input source, at least one processor, at least one memory including a computer program code, at least one video input card, at least one graphics processing unit known as GPU and at least one video output display, the method comprising:

creating an input thread and an output thread by the at least one processor;

configuring the input thread and the output thread to run simultaneously and independently from each other by the at least one processor;

choosing a manner of splitting at least one video input frame received from the at least one video input source via the at least one video input card into a plurality of input slices from S i1 to S in where a single input slice is known as S ix by the at least one processor on the input thread; and

choosing a manner of splitting at least one video output frame into a plurality of output slices from S O1 to S On where a single output slice is known as S ox via the at least one GPU by the at least one processor on the output thread,

wherein the method further comprises

on the input thread

calculating a start time and an end time for each single input slice S ix of the input slices S i1 to S in of the at least one input frame received from the at least one video input card by the at least one processor,

locating vertical blanking interval for the at least one video input card by the at least one processor,

receiving at least one single input slice S ix of the plurality of input slices from S i1 to S in from the at least one video input source via the at least one video input card by the at least one processor until all input slices from S i1 to S in have been received, and

sending the received at least one single input slice S ix to the output thread by the at least one processor until all input slices from S i1 to S in have been sent to the output thread; and

simultaneously on the output thread

calculating a start time and an end time for each output slice S ox of S O1 to S On for the at least one GPU by the at least one processor,

configuring the at least one GPU to draw directly to a front buffer by the at least one processor,

calculating a required latency on the basis of positioning the at least one video input frame within the at least one video output frame by the at least one processor,

locating vertical blanking interval for the at least GPU by the at least one processor,

receiving the at least one single input slice S ix of the input slices S i1 to S in sent from the input thread by the at least one processor,

calculating a required at least one input slice S iy , wherein y is from 1 to n, comprising at least one of the input slices from S i1 to S in for drawing output slices S O1 to S On for the at least one GPU by the at least one processor on the basis of positioning of the at least one video input frame within the at least one video output frame,

waiting until the input thread has received all the plurality of input slices from S i1 to S in from the at least one video input card by the at least one processor; and

drawing by the at least one processor the required input slices S i1 to S in for the output slices S O1 to S On for the at least one GPU where a single output slice S o(x+1) consisting of the required input slices from S i1 to S in is drawn before the at least one GPU completes sending a single output slice S ox of output slices from S O1 to S On corresponding to the required at least one input slice S iy to the at least one video output display until the last output slice S on corresponding to the required at least one input slice S iy is sent by the at least one GPU to the at least one video output display.

2. The method according to claim 1 , wherein the method further comprises calculating on the input thread the start time and the end time for each input slice from S i1 to S in of the at least one input frame received from the least one video input source via the at least one video input card by the at least one processor within a period of the at least one video input frame.

3. The method according to claim 2 , wherein the method further comprises calculating on the output thread the start time and an end time for each output slice from S o1 to S on of the at least one output frame by the at least one processor for the at least one GPU within a period of the at least one video output frame.

4. The method according to claim 1 , wherein the method further comprises calculating on the input thread the start time and an end time for each input slice from S i1 to S in of the at least one input frame received from the at least one video input source via the at least one video input card by the at least one processor on the basis of information obtained from the at least one video input card.

5. The method according to claim 4 , wherein the method further comprises calculating on the output thread the start time and an end time for each output slice from S o1 to S on of the at least one output frame by the at least one processor for the at least one GPU on the basis of information obtained from the at least one GPU.

6. The method according to claim 1 , wherein the method further comprises on the output thread drawing a background content for each output slice S O1 to S On by the at least one processor on the front buffer via the at least one GPU.

7. The method according to claim 6 , wherein the method further comprises on the output thread drawing a foreground content for each output slice S O1 to S On by the at least one processor on the front buffer via the at least one GPU.

8. The method according to claim 6 , wherein the method further comprises on the output thread verifying that drawing is finished within an allowable time limit by the at least one processor wherein the allowable time limit is defined so that if the at least one GPU starts sending the single output slice S ox of the output slices from S o1 to S on to the at least one video output display before drawing the background content, the foreground content and/or the required at least one input slice S iy of the plurality of input slices from S i1 to S in corresponding to the single output S ox of the output slices from S o1 to S on then is completed the allowable time limit has been exceeded.

9. A computer program product on a non-transitory media for reducing video latency of a computer video processing system comprising at least one video input source, at least one processor, at least one memory including a computer program code, at least one video input card, at least one graphics processing unit known as GPU and at least one video output display, the computer program product comprising:

a computer readable code for creating an input thread and an output thread by the at least one processor;

a computer readable code for configuring the input thread and the output thread to run simultaneously and independently from each other by the at least one processor;

a computer readable code for choosing a manner of splitting at least one video input frame received from the at least one video input source via the at least one video input card into a plurality of input slices from S i1 to S in where a single input slice is known as S ix by the at least one processor on the input thread; and

a computer readable code for choosing a manner of splitting at least one video output frame into a plurality of output slices from S O1 to S On where a single output slice is known as S ox via the at least one GPU by the at least one processor on the output thread,

 wherein the computer program product further comprises

a computer readable code for calculating a start time and an end time for each single input slice S ix of the input slices S i1 to S in of the at least one input frame received from the at least one video input card by the at least one processor on the input thread,

a computer readable code for locating vertical blanking interval for the at least one video input card by the at least one processor on the input thread,

a computer readable code for receiving at least one single input slice S ix of the plurality of input slices from S i1 to S in from the at least one video input source via the at least one video input card by the at least one processor until all input slices from S i1 to S in have been received on the input thread,

a computer readable code for sending the received at least one single input slice S ix to the output thread by the at least one processor until all input slices from S i1 to S in have been sent to the output thread on the input thread,

a computer readable code for calculating a start time and an end time for each output slice S ox of S O1 to S On for the at least one GPU by the at least one processor on the output thread,

a computer readable code for configuring the at least one GPU to draw directly to a front buffer by the at least one processor on the output thread,

a computer readable code for calculating a required latency on the basis of positioning the at least one video input frame within the at least one video output frame by the at least one processor on the output thread,

a computer readable code for locating vertical blanking interval for the at least GPU by the at least one processor on the output thread,

a computer readable code for receiving the at least one single input slice S ix of the input slices S i1 to S in sent from the input thread by the at least one processor on the output thread,

a computer readable code for calculating a required at least one input slice S iy , wherein y is from 1 to n, comprising at least one of the input slices from S i1 to S in for drawing output slices S O1 to S On for the at least one GPU by the at least one processor on the basis of positioning of the at least one video input frame within the at least one video output frame on the output thread,

a computer readable code for waiting until the input thread has received all the plurality of input slices from S i1 to S in from the at least one video input card by the at least one processor on the output thread, and

a computer readable code for drawing by the at least one processor the required input slices S i1 to S in for the output slices Soi to S on for the at least one GPU where a single output slice S o(x+1) consisting of the required input slices from S i1 to S in is drawn before the at least one GPU completes sending a single output slice S ox of output slices from S O1 to S On corresponding to the required at least one input slice S iy to the at least one video output display until the last output slice S on corresponding to the required at least one input slice S iy is sent by the at least one GPU to the at least one video output display on the output thread.

10. The computer program product on a non-transitory media according to claim 9 , wherein the computer program product further comprises a computer readable code for calculating on the input thread the start time and the end time for each input slice from S i1 to S in of the at least one input frame received from the least one video input source via the at least one video input card by the at least one processor within a period of the at least one video input frame.

11. The computer program product on a non-transitory media according to claim 10 , wherein the computer program product further comprises a computer readable code for calculating on the output thread the start time and an end time for each output slice from S o1 to S on of the at least one output frame by the at least one processor for the at least one GPU within a period of the at least one video output frame.

12. The computer program product on a non-transitory media according to claim 9 , wherein the computer program product further comprises a computer readable code for calculating on the input thread the start time and an end time for each input slice from S i1 to S in of the at least one input frame received from the least one video input source via the at least one video input cardby the at least one processor on the basis of information obtained from the at least one video input card.

13. The computer program product on a non-transitory media according to claim 12 , wherein the computer program product further comprises a computer readable code for calculating on the output thread the start time and an end time for each output slice from S o1 to S on of the at least one output frame by the at least one processor for the at least one GPU on the basis of information obtained from the at the at least one GPU.

14. The computer program product on a non-transitory media according to claim 9 , wherein the computer program product further comprises a computer readable code for drawing on the output thread a background content for each output slice S O1 to S On by the at least one processor on the front buffer via the at least one GPU.

15. The computer program product on a non-transitory media according to claim 14 , wherein the computer program product further comprises a computer readable code for drawing on the output thread a foreground content for each output slice S O1 to S On by the at least one processor on the front buffer via the at least one GPU.

16. The computer program product on a non-transitory media according to claim 14 , wherein the computer program product further comprises a computer readable code for verifying on the output thread that drawing is finished within an allowable time limit by the at least one processor wherein the allowable time limit is defined so that if the at least one GPU starts sending the single output slice S ox of the output slices from S o1 to S on to the at least one video output display before drawing the background content, the foreground content and/or the required at least one input slice S iy of the plurality of input slices from S i1 to S in corresponding the single output S ox of the output slices from S o1 to S on is completed, then the allowable time limit has been exceeded.

Assignments (3)
NUNC PRO TUNC ASSIGNMENT Recorded Sep 7, 2022
From: ANALOG WAY FINLAND OY
To: ANALOG WAY S.A.S.
Reel/Frame 061018/0755 →
CHANGE OF NAME Recorded Sep 7, 2022
From: PICTURALL OY
To: ANALOG WAY FINLAND OY
Reel/Frame 061390/0846 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Nov 21, 2018
From: VALO, SAMULI
To: PICTURALL OY
Reel/Frame 047616/0578 →
Continuity (1)
Related Publication 20190189085A1 · Jun 20, 2019