Compare commits

..

42 Commits

Author SHA1 Message Date
0999c88797 added resolution
All checks were successful
Tests / Tests (pull_request) Successful in 15s
2024-07-18 20:10:23 -07:00
d3559ede21 Merge pull request 'Add frames_per_second' (#21) from loewy/add-fps into master
Reviewed-on: #21
Reviewed-by: countablecloud <countablecloud@gmail.com>
2024-07-18 17:51:30 -06:00
ef6ccca3f9 fix black issue
All checks were successful
Tests / Tests (pull_request) Successful in 14s
2024-07-18 16:46:27 -07:00
f781e9648f add pycache to gitignore
Some checks failed
Tests / Tests (pull_request) Failing after 15s
2024-07-18 16:37:59 -07:00
18d2eea029 add shot_pb2 2024-07-18 16:34:22 -07:00
a95bdab8bf ad frames per second to schema 2024-07-18 16:14:28 -07:00
eaeb1ed0ea Add resolution 2024-07-18 01:14:18 -06:00
f9d6377fe4 Update durations in seconds 2024-07-16 21:48:15 -06:00
30cf72de78 Merge pull request 'Add initPlaylistUploadStatus' (#20) from loewy/update-video-gql-operations into master
Reviewed-on: #20
2024-07-16 20:24:58 -06:00
fd49dec34c add initPlaylistUploadStatus
All checks were successful
Tests / Tests (pull_request) Successful in 8s
2024-07-16 19:23:54 -07:00
cdd1cdd526 Fix segment parameter again 2024-07-16 20:22:16 -06:00
bce363e8ff Parameter to setSegmentDuration should be segmentIndex 2024-07-16 20:20:37 -06:00
80f609b8a2 Merge pull request 'Add operation for set segment duration' (#19) from loewy/set-segment-duration-operation into master
Reviewed-on: #19
Reviewed-by: Ivan Malison <ivanmalison@gmail.com>
2024-07-16 17:54:19 -06:00
6205e9a353 add operation for set segment duration
All checks were successful
Tests / Tests (pull_request) Successful in 15s
2024-07-16 16:33:22 -07:00
12f7e1f115 Merge pull request 'Add operation getHlsInitUploadLink' (#18) from loewy/operation-get-hls-init-upload-link into master
Reviewed-on: #18
2024-07-16 15:28:43 -06:00
296ad969f4 Merge branch 'master' into loewy/operation-get-hls-init-upload-link
All checks were successful
Tests / Tests (pull_request) Successful in 9s
2024-07-16 15:27:37 -06:00
d25c08447e Merge pull request 'Adds init playlist status' (#17) from mk/add-init-file-uploaded-marking into master
Reviewed-on: #17
Reviewed-by: Ivan Malison <ivanmalison@gmail.com>
2024-07-16 15:26:27 -06:00
7502a75753 Merge remote-tracking branch 'origin' into mk/add-init-file-uploaded-marking
All checks were successful
Tests / Tests (pull_request) Successful in 7s
2024-07-16 14:23:32 -07:00
1a14db1a17 Adds init playlist status
All checks were successful
Tests / Tests (pull_request) Successful in 14s
2024-07-16 14:21:45 -07:00
67d8bcac21 add operation for hls init link
All checks were successful
Tests / Tests (pull_request) Successful in 14s
2024-07-15 17:29:55 -07:00
4ca27317b4 Add operation for shot annotation types 2024-07-15 15:37:43 -06:00
dc214e878f Add annotations to shot gql 2024-07-15 15:32:21 -06:00
d669dba320 Add getUsernames operation 2024-07-14 00:16:02 -06:00
235f4a58e9 Add getUsernames 2024-07-13 23:43:18 -06:00
03c1d08d8c Request isAdmin in getLoggedInUser 2024-07-13 17:47:41 -06:00
cc36a8b51d Add isAdmin 2024-07-13 17:40:30 -06:00
d743ad83e3 Merge pull request 'Expand GQL Interfaces To Accomodate Multiple Stream Types' (#16) from mk/extend-to-additional-stream-types into master
Reviewed-on: #16
2024-07-12 22:08:57 -06:00
194c258dcd Expand GQL Interfaces To Accomodate Multiple Stream Types
All checks were successful
Tests / Tests (pull_request) Successful in 15s
2024-07-12 18:50:50 -06:00
e0e1ae1108 Merge pull request 'Add new filters' (#15) from dean/add-new-filters into master
Reviewed-on: #15
2024-07-12 17:54:42 -06:00
ee73443374 Add new filters
All checks were successful
Tests / Tests (pull_request) Successful in 15s
2024-07-12 23:52:06 +00:00
88801f9186 Add not support to filter input gql 2024-07-10 16:17:32 -06:00
524d469a0d Merge pull request 'Add get shot annotations query' (#14) from ivan/add-get-shot-annotations-query into master
Reviewed-on: #14
2024-07-08 14:49:05 -06:00
c7b225ff00 Add get shot annotations query
All checks were successful
Tests / Tests (pull_request) Successful in 8s
2024-07-08 13:26:03 -06:00
ba84f6d9c0 Merge pull request 'Create shot annotations gql' (#13) from kat/shot-annotations into master
Reviewed-on: #13
Reviewed-by: Ivan Malison <ivanmalison@gmail.com>
2024-07-08 11:03:47 -06:00
6a72f9f43f Create shot annotations gql
All checks were successful
Tests / Tests (pull_request) Successful in 8s
2024-07-08 10:56:05 -06:00
efc0b2d858 Add column property query builder filters 2024-07-02 16:55:30 -06:00
f140807886 Merge pull request 'Add id's to new getMetricForVideo queries to prevent cache merge issues' (#12) from loewy/add-ids-to-get-video-calls into master
Reviewed-on: #12
Reviewed-by: Ivan Malison <ivanmalison@gmail.com>
2024-06-05 13:34:41 -06:00
37a13f1418 add id's to new getVideo w/ metric queries to prevent cache merge issues
All checks were successful
Tests / Tests (pull_request) Successful in 12s
2024-06-05 11:51:15 -07:00
1cc0660a93 Merge pull request 'Add operations to get trimmed getVideo queries for metrics' (#11) from loewy/add-get-metrics-for-video-queries into master
Reviewed-on: #11
Reviewed-by: Ivan Malison <ivanmalison@gmail.com>
2024-06-05 01:28:16 -06:00
14da2ae388 add averageTimePerShot, elapsedTime and MedianRun forVideo queries
All checks were successful
Tests / Tests (pull_request) Successful in 8s
2024-06-04 23:20:47 -07:00
9ee4d43c89 Merge pull request 'Restructure protobuf/add annotations' (#10) from ivan/restructure-protobuf-types-and-add-annotations into master
Reviewed-on: #10
2024-05-24 20:26:00 -06:00
fcac551806 Restructure protobuf/add annotations
All checks were successful
Tests / Tests (pull_request) Successful in 14s
2024-05-24 20:24:24 -06:00
11 changed files with 1806 additions and 130 deletions

1
.gitignore vendored
View File

@@ -3,3 +3,4 @@ dist
.direnv
/after.txt
/before.txt
**/__pycache__/**

View File

@@ -13,19 +13,29 @@ _sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\nshot.proto\x12\x0fserialized_shot\",\n\x05Point\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\x12\r\n\x05\x63ount\x18\x03 \x01(\x05\"i\n\x04Path\x12\x13\n\x0bstart_frame\x18\x01 \x01(\x05\x12\x11\n\tend_frame\x18\x02 \x01(\x05\x12\x11\n\tis_static\x18\x03 \x01(\x08\x12&\n\x06points\x18\x04 \x03(\x0b\x32\x16.serialized_shot.Point\"J\n\tBallPaths\x12\x17\n\x0f\x62\x61ll_identifier\x18\x01 \x01(\x05\x12$\n\x05paths\x18\x02 \x03(\x0b\x32\x15.serialized_shot.Path\"^\n\x04Shot\x12\x13\n\x0bstart_frame\x18\x01 \x01(\x05\x12\x11\n\tend_frame\x18\x02 \x01(\x05\x12.\n\nball_paths\x18\x03 \x03(\x0b\x32\x1a.serialized_shot.BallPathsb\x06proto3')
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\nshot.proto\x12\x0fserialized_shot\"?\n\x03\x42ox\x12\x0c\n\x04left\x18\x01 \x01(\x02\x12\x0b\n\x03top\x18\x02 \x01(\x02\x12\r\n\x05width\x18\x03 \x01(\x02\x12\x0e\n\x06height\x18\x04 \x01(\x02\"\x1d\n\x05Point\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\"\x7f\n\rBallDetection\x12.\n\x0eplane_position\x18\x01 \x01(\x0b\x32\x16.serialized_shot.Point\x12(\n\nannotation\x18\x02 \x01(\x0b\x32\x14.serialized_shot.Box\x12\x14\n\x0cinterpolated\x18\x03 \x01(\x08\"T\n\x10RLEBallDetection\x12\x31\n\tdetection\x18\x01 \x01(\x0b\x32\x1e.serialized_shot.BallDetection\x12\r\n\x05\x63ount\x18\x02 \x01(\r\"L\n\x13RLEDetectionHistory\x12\x35\n\ndetections\x18\x01 \x03(\x0b\x32!.serialized_shot.RLEBallDetection\"F\n\x10\x44\x65tectionHistory\x12\x32\n\ndetections\x18\x01 \x03(\x0b\x32\x1e.serialized_shot.BallDetection\"\xe6\x01\n\x04Path\x12\x13\n\x0bstart_frame\x18\x01 \x01(\r\x12\x11\n\tend_frame\x18\x02 \x01(\r\x12\x37\n\ndetections\x18\x03 \x01(\x0b\x32!.serialized_shot.DetectionHistoryH\x00\x12>\n\x0erle_detections\x18\x04 \x01(\x0b\x32$.serialized_shot.RLEDetectionHistoryH\x00\x12\x15\n\x0bnot_present\x18\x05 \x01(\x08H\x00\x12\x11\n\tis_static\x18\x06 \x01(\x08\x42\x13\n\x11\x64\x65tection_history\"R\n\x11IdentifierHistory\x12\x17\n\x0f\x62\x61ll_identifier\x18\x01 \x01(\r\x12$\n\x05paths\x18\x02 \x03(\x0b\x32\x15.serialized_shot.Path\"H\n\x04Shot\x12@\n\x14identifier_histories\x18\x03 \x03(\x0b\x32\".serialized_shot.IdentifierHistoryb\x06proto3')
_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'shot_pb2', _globals)
if _descriptor._USE_C_DESCRIPTORS == False:
DESCRIPTOR._options = None
_globals['_POINT']._serialized_start=31
_globals['_POINT']._serialized_end=75
_globals['_PATH']._serialized_start=77
_globals['_PATH']._serialized_end=182
_globals['_BALLPATHS']._serialized_start=184
_globals['_BALLPATHS']._serialized_end=258
_globals['_SHOT']._serialized_start=260
_globals['_SHOT']._serialized_end=354
_globals['_BOX']._serialized_start=31
_globals['_BOX']._serialized_end=94
_globals['_POINT']._serialized_start=96
_globals['_POINT']._serialized_end=125
_globals['_BALLDETECTION']._serialized_start=127
_globals['_BALLDETECTION']._serialized_end=254
_globals['_RLEBALLDETECTION']._serialized_start=256
_globals['_RLEBALLDETECTION']._serialized_end=340
_globals['_RLEDETECTIONHISTORY']._serialized_start=342
_globals['_RLEDETECTIONHISTORY']._serialized_end=418
_globals['_DETECTIONHISTORY']._serialized_start=420
_globals['_DETECTIONHISTORY']._serialized_end=490
_globals['_PATH']._serialized_start=493
_globals['_PATH']._serialized_end=723
_globals['_IDENTIFIERHISTORY']._serialized_start=725
_globals['_IDENTIFIERHISTORY']._serialized_end=807
_globals['_SHOT']._serialized_start=809
_globals['_SHOT']._serialized_end=881
# @@protoc_insertion_point(module_scope)

View File

@@ -5,29 +5,73 @@ from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Map
DESCRIPTOR: _descriptor.FileDescriptor
class Box(_message.Message):
__slots__ = ["left", "top", "width", "height"]
LEFT_FIELD_NUMBER: _ClassVar[int]
TOP_FIELD_NUMBER: _ClassVar[int]
WIDTH_FIELD_NUMBER: _ClassVar[int]
HEIGHT_FIELD_NUMBER: _ClassVar[int]
left: float
top: float
width: float
height: float
def __init__(self, left: _Optional[float] = ..., top: _Optional[float] = ..., width: _Optional[float] = ..., height: _Optional[float] = ...) -> None: ...
class Point(_message.Message):
__slots__ = ["x", "y", "count"]
__slots__ = ["x", "y"]
X_FIELD_NUMBER: _ClassVar[int]
Y_FIELD_NUMBER: _ClassVar[int]
COUNT_FIELD_NUMBER: _ClassVar[int]
x: float
y: float
def __init__(self, x: _Optional[float] = ..., y: _Optional[float] = ...) -> None: ...
class BallDetection(_message.Message):
__slots__ = ["plane_position", "annotation", "interpolated"]
PLANE_POSITION_FIELD_NUMBER: _ClassVar[int]
ANNOTATION_FIELD_NUMBER: _ClassVar[int]
INTERPOLATED_FIELD_NUMBER: _ClassVar[int]
plane_position: Point
annotation: Box
interpolated: bool
def __init__(self, plane_position: _Optional[_Union[Point, _Mapping]] = ..., annotation: _Optional[_Union[Box, _Mapping]] = ..., interpolated: bool = ...) -> None: ...
class RLEBallDetection(_message.Message):
__slots__ = ["detection", "count"]
DETECTION_FIELD_NUMBER: _ClassVar[int]
COUNT_FIELD_NUMBER: _ClassVar[int]
detection: BallDetection
count: int
def __init__(self, x: _Optional[float] = ..., y: _Optional[float] = ..., count: _Optional[int] = ...) -> None: ...
def __init__(self, detection: _Optional[_Union[BallDetection, _Mapping]] = ..., count: _Optional[int] = ...) -> None: ...
class RLEDetectionHistory(_message.Message):
__slots__ = ["detections"]
DETECTIONS_FIELD_NUMBER: _ClassVar[int]
detections: _containers.RepeatedCompositeFieldContainer[RLEBallDetection]
def __init__(self, detections: _Optional[_Iterable[_Union[RLEBallDetection, _Mapping]]] = ...) -> None: ...
class DetectionHistory(_message.Message):
__slots__ = ["detections"]
DETECTIONS_FIELD_NUMBER: _ClassVar[int]
detections: _containers.RepeatedCompositeFieldContainer[BallDetection]
def __init__(self, detections: _Optional[_Iterable[_Union[BallDetection, _Mapping]]] = ...) -> None: ...
class Path(_message.Message):
__slots__ = ["start_frame", "end_frame", "is_static", "points"]
__slots__ = ["start_frame", "end_frame", "detections", "rle_detections", "not_present", "is_static"]
START_FRAME_FIELD_NUMBER: _ClassVar[int]
END_FRAME_FIELD_NUMBER: _ClassVar[int]
DETECTIONS_FIELD_NUMBER: _ClassVar[int]
RLE_DETECTIONS_FIELD_NUMBER: _ClassVar[int]
NOT_PRESENT_FIELD_NUMBER: _ClassVar[int]
IS_STATIC_FIELD_NUMBER: _ClassVar[int]
POINTS_FIELD_NUMBER: _ClassVar[int]
start_frame: int
end_frame: int
detections: DetectionHistory
rle_detections: RLEDetectionHistory
not_present: bool
is_static: bool
points: _containers.RepeatedCompositeFieldContainer[Point]
def __init__(self, start_frame: _Optional[int] = ..., end_frame: _Optional[int] = ..., is_static: bool = ..., points: _Optional[_Iterable[_Union[Point, _Mapping]]] = ...) -> None: ...
def __init__(self, start_frame: _Optional[int] = ..., end_frame: _Optional[int] = ..., detections: _Optional[_Union[DetectionHistory, _Mapping]] = ..., rle_detections: _Optional[_Union[RLEDetectionHistory, _Mapping]] = ..., not_present: bool = ..., is_static: bool = ...) -> None: ...
class BallPaths(_message.Message):
class IdentifierHistory(_message.Message):
__slots__ = ["ball_identifier", "paths"]
BALL_IDENTIFIER_FIELD_NUMBER: _ClassVar[int]
PATHS_FIELD_NUMBER: _ClassVar[int]
@@ -36,11 +80,7 @@ class BallPaths(_message.Message):
def __init__(self, ball_identifier: _Optional[int] = ..., paths: _Optional[_Iterable[_Union[Path, _Mapping]]] = ...) -> None: ...
class Shot(_message.Message):
__slots__ = ["start_frame", "end_frame", "ball_paths"]
START_FRAME_FIELD_NUMBER: _ClassVar[int]
END_FRAME_FIELD_NUMBER: _ClassVar[int]
BALL_PATHS_FIELD_NUMBER: _ClassVar[int]
start_frame: int
end_frame: int
ball_paths: _containers.RepeatedCompositeFieldContainer[BallPaths]
def __init__(self, start_frame: _Optional[int] = ..., end_frame: _Optional[int] = ..., ball_paths: _Optional[_Iterable[_Union[BallPaths, _Mapping]]] = ...) -> None: ...
__slots__ = ["identifier_histories"]
IDENTIFIER_HISTORIES_FIELD_NUMBER: _ClassVar[int]
identifier_histories: _containers.RepeatedCompositeFieldContainer[IdentifierHistory]
def __init__(self, identifier_histories: _Optional[_Iterable[_Union[IdentifierHistory, _Mapping]]] = ...) -> None: ...

View File

@@ -2,26 +2,53 @@ syntax = "proto3";
package serialized_shot;
message Box {
float left = 1;
float top = 2;
float width = 3;
float height = 4;
}
message Point {
float x = 1;
float y = 2;
int32 count = 3;
}
message BallDetection {
Point plane_position = 1;
Box annotation = 2;
bool interpolated = 3;
}
message RLEBallDetection {
BallDetection detection = 1;
uint32 count = 2;
}
message RLEDetectionHistory {
repeated RLEBallDetection detections = 1;
}
message DetectionHistory {
repeated BallDetection detections = 1;
}
message Path {
int32 start_frame = 1;
int32 end_frame = 2;
bool is_static = 3;
repeated Point points = 4;
uint32 start_frame = 1;
uint32 end_frame = 2;
oneof detection_history {
DetectionHistory detections = 3;
RLEDetectionHistory rle_detections = 4;
bool not_present = 5;
}
bool is_static = 6;
}
message BallPaths {
int32 ball_identifier = 1;
message IdentifierHistory {
uint32 ball_identifier = 1;
repeated Path paths = 2;
}
message Shot {
int32 start_frame = 1;
int32 end_frame = 2;
repeated BallPaths ball_paths = 3;
}
repeated IdentifierHistory identifier_histories = 3;
}

View File

@@ -1,7 +1,95 @@
export interface Box {
left?: number;
top?: number;
width?: number;
height?: number;
}
export function encodeBox(message: Box): Uint8Array {
let bb = popByteBuffer();
_encodeBox(message, bb);
return toUint8Array(bb);
}
function _encodeBox(message: Box, bb: ByteBuffer): void {
// optional float left = 1;
let $left = message.left;
if ($left !== undefined) {
writeVarint32(bb, 13);
writeFloat(bb, $left);
}
// optional float top = 2;
let $top = message.top;
if ($top !== undefined) {
writeVarint32(bb, 21);
writeFloat(bb, $top);
}
// optional float width = 3;
let $width = message.width;
if ($width !== undefined) {
writeVarint32(bb, 29);
writeFloat(bb, $width);
}
// optional float height = 4;
let $height = message.height;
if ($height !== undefined) {
writeVarint32(bb, 37);
writeFloat(bb, $height);
}
}
export function decodeBox(binary: Uint8Array): Box {
return _decodeBox(wrapByteBuffer(binary));
}
function _decodeBox(bb: ByteBuffer): Box {
let message: Box = {} as any;
end_of_message: while (!isAtEnd(bb)) {
let tag = readVarint32(bb);
switch (tag >>> 3) {
case 0:
break end_of_message;
// optional float left = 1;
case 1: {
message.left = readFloat(bb);
break;
}
// optional float top = 2;
case 2: {
message.top = readFloat(bb);
break;
}
// optional float width = 3;
case 3: {
message.width = readFloat(bb);
break;
}
// optional float height = 4;
case 4: {
message.height = readFloat(bb);
break;
}
default:
skipUnknownField(bb, tag & 7);
}
}
return message;
}
export interface Point {
x?: number;
y?: number;
count?: number;
}
export function encodePoint(message: Point): Uint8Array {
@@ -24,13 +112,6 @@ function _encodePoint(message: Point, bb: ByteBuffer): void {
writeVarint32(bb, 21);
writeFloat(bb, $y);
}
// optional int32 count = 3;
let $count = message.count;
if ($count !== undefined) {
writeVarint32(bb, 24);
writeVarint64(bb, intToLong($count));
}
}
export function decodePoint(binary: Uint8Array): Point {
@@ -59,9 +140,282 @@ function _decodePoint(bb: ByteBuffer): Point {
break;
}
// optional int32 count = 3;
default:
skipUnknownField(bb, tag & 7);
}
}
return message;
}
export interface BallDetection {
plane_position?: Point;
annotation?: Box;
interpolated?: boolean;
}
export function encodeBallDetection(message: BallDetection): Uint8Array {
let bb = popByteBuffer();
_encodeBallDetection(message, bb);
return toUint8Array(bb);
}
function _encodeBallDetection(message: BallDetection, bb: ByteBuffer): void {
// optional Point plane_position = 1;
let $plane_position = message.plane_position;
if ($plane_position !== undefined) {
writeVarint32(bb, 10);
let nested = popByteBuffer();
_encodePoint($plane_position, nested);
writeVarint32(bb, nested.limit);
writeByteBuffer(bb, nested);
pushByteBuffer(nested);
}
// optional Box annotation = 2;
let $annotation = message.annotation;
if ($annotation !== undefined) {
writeVarint32(bb, 18);
let nested = popByteBuffer();
_encodeBox($annotation, nested);
writeVarint32(bb, nested.limit);
writeByteBuffer(bb, nested);
pushByteBuffer(nested);
}
// optional bool interpolated = 3;
let $interpolated = message.interpolated;
if ($interpolated !== undefined) {
writeVarint32(bb, 24);
writeByte(bb, $interpolated ? 1 : 0);
}
}
export function decodeBallDetection(binary: Uint8Array): BallDetection {
return _decodeBallDetection(wrapByteBuffer(binary));
}
function _decodeBallDetection(bb: ByteBuffer): BallDetection {
let message: BallDetection = {} as any;
end_of_message: while (!isAtEnd(bb)) {
let tag = readVarint32(bb);
switch (tag >>> 3) {
case 0:
break end_of_message;
// optional Point plane_position = 1;
case 1: {
let limit = pushTemporaryLength(bb);
message.plane_position = _decodePoint(bb);
bb.limit = limit;
break;
}
// optional Box annotation = 2;
case 2: {
let limit = pushTemporaryLength(bb);
message.annotation = _decodeBox(bb);
bb.limit = limit;
break;
}
// optional bool interpolated = 3;
case 3: {
message.count = readVarint32(bb);
message.interpolated = !!readByte(bb);
break;
}
default:
skipUnknownField(bb, tag & 7);
}
}
return message;
}
export interface RLEBallDetection {
detection?: BallDetection;
count?: number;
}
export function encodeRLEBallDetection(message: RLEBallDetection): Uint8Array {
let bb = popByteBuffer();
_encodeRLEBallDetection(message, bb);
return toUint8Array(bb);
}
function _encodeRLEBallDetection(
message: RLEBallDetection,
bb: ByteBuffer,
): void {
// optional BallDetection detection = 1;
let $detection = message.detection;
if ($detection !== undefined) {
writeVarint32(bb, 10);
let nested = popByteBuffer();
_encodeBallDetection($detection, nested);
writeVarint32(bb, nested.limit);
writeByteBuffer(bb, nested);
pushByteBuffer(nested);
}
// optional uint32 count = 2;
let $count = message.count;
if ($count !== undefined) {
writeVarint32(bb, 16);
writeVarint32(bb, $count);
}
}
export function decodeRLEBallDetection(binary: Uint8Array): RLEBallDetection {
return _decodeRLEBallDetection(wrapByteBuffer(binary));
}
function _decodeRLEBallDetection(bb: ByteBuffer): RLEBallDetection {
let message: RLEBallDetection = {} as any;
end_of_message: while (!isAtEnd(bb)) {
let tag = readVarint32(bb);
switch (tag >>> 3) {
case 0:
break end_of_message;
// optional BallDetection detection = 1;
case 1: {
let limit = pushTemporaryLength(bb);
message.detection = _decodeBallDetection(bb);
bb.limit = limit;
break;
}
// optional uint32 count = 2;
case 2: {
message.count = readVarint32(bb) >>> 0;
break;
}
default:
skipUnknownField(bb, tag & 7);
}
}
return message;
}
export interface RLEDetectionHistory {
detections?: RLEBallDetection[];
}
export function encodeRLEDetectionHistory(
message: RLEDetectionHistory,
): Uint8Array {
let bb = popByteBuffer();
_encodeRLEDetectionHistory(message, bb);
return toUint8Array(bb);
}
function _encodeRLEDetectionHistory(
message: RLEDetectionHistory,
bb: ByteBuffer,
): void {
// repeated RLEBallDetection detections = 1;
let array$detections = message.detections;
if (array$detections !== undefined) {
for (let value of array$detections) {
writeVarint32(bb, 10);
let nested = popByteBuffer();
_encodeRLEBallDetection(value, nested);
writeVarint32(bb, nested.limit);
writeByteBuffer(bb, nested);
pushByteBuffer(nested);
}
}
}
export function decodeRLEDetectionHistory(
binary: Uint8Array,
): RLEDetectionHistory {
return _decodeRLEDetectionHistory(wrapByteBuffer(binary));
}
function _decodeRLEDetectionHistory(bb: ByteBuffer): RLEDetectionHistory {
let message: RLEDetectionHistory = {} as any;
end_of_message: while (!isAtEnd(bb)) {
let tag = readVarint32(bb);
switch (tag >>> 3) {
case 0:
break end_of_message;
// repeated RLEBallDetection detections = 1;
case 1: {
let limit = pushTemporaryLength(bb);
let values = message.detections || (message.detections = []);
values.push(_decodeRLEBallDetection(bb));
bb.limit = limit;
break;
}
default:
skipUnknownField(bb, tag & 7);
}
}
return message;
}
export interface DetectionHistory {
detections?: BallDetection[];
}
export function encodeDetectionHistory(message: DetectionHistory): Uint8Array {
let bb = popByteBuffer();
_encodeDetectionHistory(message, bb);
return toUint8Array(bb);
}
function _encodeDetectionHistory(
message: DetectionHistory,
bb: ByteBuffer,
): void {
// repeated BallDetection detections = 1;
let array$detections = message.detections;
if (array$detections !== undefined) {
for (let value of array$detections) {
writeVarint32(bb, 10);
let nested = popByteBuffer();
_encodeBallDetection(value, nested);
writeVarint32(bb, nested.limit);
writeByteBuffer(bb, nested);
pushByteBuffer(nested);
}
}
}
export function decodeDetectionHistory(binary: Uint8Array): DetectionHistory {
return _decodeDetectionHistory(wrapByteBuffer(binary));
}
function _decodeDetectionHistory(bb: ByteBuffer): DetectionHistory {
let message: DetectionHistory = {} as any;
end_of_message: while (!isAtEnd(bb)) {
let tag = readVarint32(bb);
switch (tag >>> 3) {
case 0:
break end_of_message;
// repeated BallDetection detections = 1;
case 1: {
let limit = pushTemporaryLength(bb);
let values = message.detections || (message.detections = []);
values.push(_decodeBallDetection(bb));
bb.limit = limit;
break;
}
@@ -76,8 +430,10 @@ function _decodePoint(bb: ByteBuffer): Point {
export interface Path {
start_frame?: number;
end_frame?: number;
detections?: DetectionHistory;
rle_detections?: RLEDetectionHistory;
not_present?: boolean;
is_static?: boolean;
points?: Point[];
}
export function encodePath(message: Path): Uint8Array {
@@ -87,39 +443,55 @@ export function encodePath(message: Path): Uint8Array {
}
function _encodePath(message: Path, bb: ByteBuffer): void {
// optional int32 start_frame = 1;
// optional uint32 start_frame = 1;
let $start_frame = message.start_frame;
if ($start_frame !== undefined) {
writeVarint32(bb, 8);
writeVarint64(bb, intToLong($start_frame));
writeVarint32(bb, $start_frame);
}
// optional int32 end_frame = 2;
// optional uint32 end_frame = 2;
let $end_frame = message.end_frame;
if ($end_frame !== undefined) {
writeVarint32(bb, 16);
writeVarint64(bb, intToLong($end_frame));
writeVarint32(bb, $end_frame);
}
// optional bool is_static = 3;
// optional DetectionHistory detections = 3;
let $detections = message.detections;
if ($detections !== undefined) {
writeVarint32(bb, 26);
let nested = popByteBuffer();
_encodeDetectionHistory($detections, nested);
writeVarint32(bb, nested.limit);
writeByteBuffer(bb, nested);
pushByteBuffer(nested);
}
// optional RLEDetectionHistory rle_detections = 4;
let $rle_detections = message.rle_detections;
if ($rle_detections !== undefined) {
writeVarint32(bb, 34);
let nested = popByteBuffer();
_encodeRLEDetectionHistory($rle_detections, nested);
writeVarint32(bb, nested.limit);
writeByteBuffer(bb, nested);
pushByteBuffer(nested);
}
// optional bool not_present = 5;
let $not_present = message.not_present;
if ($not_present !== undefined) {
writeVarint32(bb, 40);
writeByte(bb, $not_present ? 1 : 0);
}
// optional bool is_static = 6;
let $is_static = message.is_static;
if ($is_static !== undefined) {
writeVarint32(bb, 24);
writeVarint32(bb, 48);
writeByte(bb, $is_static ? 1 : 0);
}
// repeated Point points = 4;
let array$points = message.points;
if (array$points !== undefined) {
for (let value of array$points) {
writeVarint32(bb, 34);
let nested = popByteBuffer();
_encodePoint(value, nested);
writeVarint32(bb, nested.limit);
writeByteBuffer(bb, nested);
pushByteBuffer(nested);
}
}
}
export function decodePath(binary: Uint8Array): Path {
@@ -136,33 +508,46 @@ function _decodePath(bb: ByteBuffer): Path {
case 0:
break end_of_message;
// optional int32 start_frame = 1;
// optional uint32 start_frame = 1;
case 1: {
message.start_frame = readVarint32(bb);
message.start_frame = readVarint32(bb) >>> 0;
break;
}
// optional int32 end_frame = 2;
// optional uint32 end_frame = 2;
case 2: {
message.end_frame = readVarint32(bb);
message.end_frame = readVarint32(bb) >>> 0;
break;
}
// optional bool is_static = 3;
// optional DetectionHistory detections = 3;
case 3: {
message.is_static = !!readByte(bb);
let limit = pushTemporaryLength(bb);
message.detections = _decodeDetectionHistory(bb);
bb.limit = limit;
break;
}
// repeated Point points = 4;
// optional RLEDetectionHistory rle_detections = 4;
case 4: {
let limit = pushTemporaryLength(bb);
let values = message.points || (message.points = []);
values.push(_decodePoint(bb));
message.rle_detections = _decodeRLEDetectionHistory(bb);
bb.limit = limit;
break;
}
// optional bool not_present = 5;
case 5: {
message.not_present = !!readByte(bb);
break;
}
// optional bool is_static = 6;
case 6: {
message.is_static = !!readByte(bb);
break;
}
default:
skipUnknownField(bb, tag & 7);
}
@@ -171,23 +556,28 @@ function _decodePath(bb: ByteBuffer): Path {
return message;
}
export interface BallPaths {
export interface IdentifierHistory {
ball_identifier?: number;
paths?: Path[];
}
export function encodeBallPaths(message: BallPaths): Uint8Array {
export function encodeIdentifierHistory(
message: IdentifierHistory,
): Uint8Array {
let bb = popByteBuffer();
_encodeBallPaths(message, bb);
_encodeIdentifierHistory(message, bb);
return toUint8Array(bb);
}
function _encodeBallPaths(message: BallPaths, bb: ByteBuffer): void {
// optional int32 ball_identifier = 1;
function _encodeIdentifierHistory(
message: IdentifierHistory,
bb: ByteBuffer,
): void {
// optional uint32 ball_identifier = 1;
let $ball_identifier = message.ball_identifier;
if ($ball_identifier !== undefined) {
writeVarint32(bb, 8);
writeVarint64(bb, intToLong($ball_identifier));
writeVarint32(bb, $ball_identifier);
}
// repeated Path paths = 2;
@@ -204,12 +594,12 @@ function _encodeBallPaths(message: BallPaths, bb: ByteBuffer): void {
}
}
export function decodeBallPaths(binary: Uint8Array): BallPaths {
return _decodeBallPaths(wrapByteBuffer(binary));
export function decodeIdentifierHistory(binary: Uint8Array): IdentifierHistory {
return _decodeIdentifierHistory(wrapByteBuffer(binary));
}
function _decodeBallPaths(bb: ByteBuffer): BallPaths {
let message: BallPaths = {} as any;
function _decodeIdentifierHistory(bb: ByteBuffer): IdentifierHistory {
let message: IdentifierHistory = {} as any;
end_of_message: while (!isAtEnd(bb)) {
let tag = readVarint32(bb);
@@ -218,9 +608,9 @@ function _decodeBallPaths(bb: ByteBuffer): BallPaths {
case 0:
break end_of_message;
// optional int32 ball_identifier = 1;
// optional uint32 ball_identifier = 1;
case 1: {
message.ball_identifier = readVarint32(bb);
message.ball_identifier = readVarint32(bb) >>> 0;
break;
}
@@ -242,9 +632,7 @@ function _decodeBallPaths(bb: ByteBuffer): BallPaths {
}
export interface Shot {
start_frame?: number;
end_frame?: number;
ball_paths?: BallPaths[];
identifier_histories?: IdentifierHistory[];
}
export function encodeShot(message: Shot): Uint8Array {
@@ -254,27 +642,13 @@ export function encodeShot(message: Shot): Uint8Array {
}
function _encodeShot(message: Shot, bb: ByteBuffer): void {
// optional int32 start_frame = 1;
let $start_frame = message.start_frame;
if ($start_frame !== undefined) {
writeVarint32(bb, 8);
writeVarint64(bb, intToLong($start_frame));
}
// optional int32 end_frame = 2;
let $end_frame = message.end_frame;
if ($end_frame !== undefined) {
writeVarint32(bb, 16);
writeVarint64(bb, intToLong($end_frame));
}
// repeated BallPaths ball_paths = 3;
let array$ball_paths = message.ball_paths;
if (array$ball_paths !== undefined) {
for (let value of array$ball_paths) {
// repeated IdentifierHistory identifier_histories = 3;
let array$identifier_histories = message.identifier_histories;
if (array$identifier_histories !== undefined) {
for (let value of array$identifier_histories) {
writeVarint32(bb, 26);
let nested = popByteBuffer();
_encodeBallPaths(value, nested);
_encodeIdentifierHistory(value, nested);
writeVarint32(bb, nested.limit);
writeByteBuffer(bb, nested);
pushByteBuffer(nested);
@@ -296,23 +670,12 @@ function _decodeShot(bb: ByteBuffer): Shot {
case 0:
break end_of_message;
// optional int32 start_frame = 1;
case 1: {
message.start_frame = readVarint32(bb);
break;
}
// optional int32 end_frame = 2;
case 2: {
message.end_frame = readVarint32(bb);
break;
}
// repeated BallPaths ball_paths = 3;
// repeated IdentifierHistory identifier_histories = 3;
case 3: {
let limit = pushTemporaryLength(bb);
let values = message.ball_paths || (message.ball_paths = []);
values.push(_decodeBallPaths(bb));
let values =
message.identifier_histories || (message.identifier_histories = []);
values.push(_decodeIdentifierHistory(bb));
bb.limit = limit;
break;
}

File diff suppressed because it is too large Load Diff

View File

@@ -36,3 +36,10 @@ query GetShots(
}
}
}
query GetShotAnnotationTypes {
getShotAnnotationTypes {
id
name
}
}

View File

@@ -24,6 +24,7 @@ query getLoggedInUser {
id
firebaseUid
username
isAdmin
profileImageUri
activeVideoId
createdAt
@@ -36,3 +37,11 @@ query GetUserPlayTime($userId: Int!) {
totalSeconds
}
}
query getUsernames(
$matchString: String!
$limit: Int = null
$after: String = null
) {
getUsernames(matchString: $matchString, limit: $limit, after: $after)
}

View File

@@ -51,6 +51,7 @@ query GetStreamMonitoringDetails($videoId: Int!) {
isCompleted
uploadCompletionCursor
lastIntendedSegmentBound
initPlaylistUploadStatus
}
currentProcessing {
errors {
@@ -91,11 +92,9 @@ query GetVideoDetails($videoId: Int!) {
elapsedTime
endTime
makePercentage
makePercentage
medianRun
startTime
totalShots
totalShots
totalShotsMade
createdAt
updatedAt
@@ -148,3 +147,22 @@ query GetVideo($videoId: Int!) {
}
}
}
query GetAverageTimePerShotForVideo($videoId: Int!) {
getVideo(videoId: $videoId) {
id
averageTimeBetweenShots
}
}
query GetElapsedTimeForVideo($videoId: Int!) {
getVideo(videoId: $videoId) {
id
elapsedTime
}
}
query GetMedianRunForVideo($videoId: Int!) {
getVideo(videoId: $videoId) {
id
medianRun
}
}

View File

@@ -14,6 +14,28 @@ mutation GetUploadLink($videoId: Int!, $segmentIndex: Int!) {
}
}
mutation GetHlsInitUploadLink($videoId: Int!) {
getHlsInitUploadLink(videoId: $videoId) {
uploadUrl
headers {
key
value
}
}
}
mutation SetSegmentDuration(
$videoId: Int!
$segmentIndex: Int!
$duration: Float!
) {
setSegmentDuration(
videoId: $videoId
segmentIndex: $segmentIndex
duration: $duration
)
}
mutation EditUploadStream(
$videoId: Int!
$videoMetadataInput: VideoMetadataInput!

View File

@@ -9,8 +9,14 @@ type Query {
intervalDuration: Int! = 300
): [MakePercentageIntervalGQL!]!
getShots(filterInput: FilterInput!): [ShotGQL!]!
getShotAnnotationTypes: [ShotAnnotationTypeGQL!]!
getUser(userId: Int!): UserGQL
getLoggedInUser: UserGQL
getUsernames(
matchString: String = null
limit: Int = null
after: String = null
): [String!]!
getPlayTime(userId: Int!): UserPlayTimeGQL!
getUserVideos(
userId: Int = null
@@ -65,6 +71,7 @@ input EnumAggregation {
input FilterInput @oneOf {
andFilters: [FilterInput!]
orFilters: [FilterInput!]
notFilter: FilterInput
cueObjectDistance: RangeFilter
targetPocketDistance: RangeFilter
cueObjectAngle: RangeFilter
@@ -76,6 +83,17 @@ input FilterInput @oneOf {
userId: [Int!]
make: [Boolean!]
tags: [VideoTagInput!]
annotations: [ShotAnnotationInput!]
isStraight: [Boolean!]
isRight: [Boolean!]
isLeft: [Boolean!]
isLeftMiss: [Boolean!]
isRightMiss: [Boolean!]
isDirect: [Boolean!]
bankAngle: RangeFilter
bankDistance: RangeFilter
kickAngle: RangeFilter
kickDistance: RangeFilter
}
input RangeFilter {
@@ -103,6 +121,10 @@ input VideoTagClassInput {
name: String!
}
input ShotAnnotationInput {
name: String!
}
type BucketSetGQL {
keyName: String!
feature: String!
@@ -138,6 +160,7 @@ type ShotGQL {
bankFeatures: BankFeaturesGQL
serializedShotPaths: SerializedShotPathsGQL
user: UserGQL
annotations: [ShotAnnotationGQL!]!
}
"""
@@ -178,12 +201,27 @@ type UserGQL {
id: Int!
firebaseUid: String!
username: String!
isAdmin: Boolean!
activeVideoId: Int
profileImageUri: String
createdAt: DateTime
updatedAt: DateTime
}
type ShotAnnotationGQL {
shotId: Int!
type: ShotAnnotationTypeGQL!
creator: UserGQL!
notes: String!
createdAt: DateTime
updatedAt: DateTime
}
type ShotAnnotationTypeGQL {
id: Int!
name: String!
}
type UserPlayTimeGQL {
totalSeconds: Float!
}
@@ -224,6 +262,7 @@ type UploadStreamGQL {
segmentProcessingCursor: Int!
lastIntendedSegmentBound: Int
isCompleted: Boolean!
initPlaylistUploadStatus: InitPlaylistUploadStatusEnum
lowestUnuploadedSegmentIndex: Int!
uploadCompletionCursor: Int!
errors: [StreamErrorGQL!]!
@@ -232,6 +271,12 @@ type UploadStreamGQL {
segments: [UploadSegmentGQL!]!
}
enum InitPlaylistUploadStatusEnum {
NOT_APPLICABLE
NOT_UPLOADED
UPLOADED
}
type StreamErrorGQL {
message: String!
}
@@ -242,7 +287,7 @@ type UploadSegmentGQL {
valid: Boolean!
endFrameIndex: Int
framesPerSecond: Float
durationsInSeconds: Float
durationInSeconds: Float
linksRequested: Int!
}
@@ -319,6 +364,12 @@ type Mutation {
videoMetadata: VideoMetadataInput!
): CreateUploadStreamReturn!
getUploadLink(videoId: Int!, segmentIndex: Int!): GetUploadLinkReturn!
getHlsInitUploadLink(videoId: Int!): GetUploadLinkReturn!
setSegmentDuration(
videoId: Int!
segmentIndex: Int!
duration: Float!
): Boolean!
editUploadStream(videoId: Int!, videoMetadata: VideoMetadataInput!): Boolean!
deleteVideo(videoId: Int!): Boolean!
}
@@ -344,6 +395,7 @@ type CreateUploadStreamReturn {
}
input VideoMetadataInput {
resolution: VideoResolution!
videoName: String = null
startTime: DateTime = null
endTime: DateTime = null
@@ -351,7 +403,14 @@ input VideoMetadataInput {
tableSize: String = null
uploadStreamMetadataInput: UploadStreamMetadataInput = null
lastIntendedSegmentBound: Int = null
streamSegmentType: StreamSegmentTypeEnum = null
endStream: Boolean! = false
framesPerSecond: Float = null
}
input VideoResolution {
width: Int!
height: Int!
}
input UploadStreamMetadataInput {
@@ -371,3 +430,8 @@ enum DeviceTypeEnum {
ANDROID
BROWSER
}
enum StreamSegmentTypeEnum {
FRAGMENTED_MP4
RB_CHUNKED_MP4
}