Compare commits
90 Commits
044d8fa46d
...
mk/add-err
| Author | SHA1 | Date | |
|---|---|---|---|
| 5350c46e0a | |||
| 1f5c5774e1 | |||
| 3b29502e7e | |||
| abc7e9fd05 | |||
| dd5ce77102 | |||
| dabaa3d1e1 | |||
| a6604a3a6d | |||
| 09a3e0e294 | |||
| f20ca53a2a | |||
| a2b912500c | |||
| 7de3d196ba | |||
| 6d5669aaf8 | |||
| 2c583509a2 | |||
| 3480637600 | |||
| f4665f51b1 | |||
| 810212dc12 | |||
| c3210df517 | |||
| 9f5c354433 | |||
| 23d9fef2b1 | |||
| df3087de7d | |||
| 5dd8318dab | |||
| 56c8bcce20 | |||
| 1c4961db5b | |||
| 5e0d01ea5b | |||
| e8938621fc | |||
| 8c8dcdd8e1 | |||
| 5085c9af90 | |||
| 85bc743c8e | |||
| b8efa644e3 | |||
| c18628a4ca | |||
| 535e24c9c2 | |||
| 04308b1003 | |||
| 43c626141e | |||
| c49266e4c1 | |||
| 6677b9232f | |||
| 76e792be88 | |||
| 5eac3d9d40 | |||
| 64593f09b7 | |||
| e20b68799f | |||
| 378878967a | |||
| 251ebe7056 | |||
| 615e4d5467 | |||
| a4f602d651 | |||
| c48512fc45 | |||
| d75822c465 | |||
| 4feeba5150 | |||
| e1237363f0 | |||
| b1550b31c5 | |||
| 81b9fd9f12 | |||
| d3559ede21 | |||
| ef6ccca3f9 | |||
| f781e9648f | |||
| 18d2eea029 | |||
| a95bdab8bf | |||
| eaeb1ed0ea | |||
| f9d6377fe4 | |||
| 30cf72de78 | |||
| fd49dec34c | |||
| cdd1cdd526 | |||
| bce363e8ff | |||
| 80f609b8a2 | |||
| 6205e9a353 | |||
| 12f7e1f115 | |||
| 296ad969f4 | |||
| d25c08447e | |||
| 7502a75753 | |||
| 1a14db1a17 | |||
| 67d8bcac21 | |||
| 4ca27317b4 | |||
| dc214e878f | |||
| d669dba320 | |||
| 235f4a58e9 | |||
| 03c1d08d8c | |||
| cc36a8b51d | |||
| d743ad83e3 | |||
| 194c258dcd | |||
| e0e1ae1108 | |||
| ee73443374 | |||
| 88801f9186 | |||
| 524d469a0d | |||
| c7b225ff00 | |||
| ba84f6d9c0 | |||
| 6a72f9f43f | |||
| efc0b2d858 | |||
| f140807886 | |||
| 37a13f1418 | |||
| 1cc0660a93 | |||
| 14da2ae388 | |||
| 9ee4d43c89 | |||
| fcac551806 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -3,3 +3,4 @@ dist
|
||||
.direnv
|
||||
/after.txt
|
||||
/before.txt
|
||||
**/__pycache__/**
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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: ...
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
1908
src/index.tsx
1908
src/index.tsx
File diff suppressed because it is too large
Load Diff
@@ -4,5 +4,6 @@ query getDeployedConfig {
|
||||
devMode
|
||||
environment
|
||||
firebase
|
||||
minimumAllowedAppVersion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ query GetFeed(
|
||||
stream {
|
||||
isCompleted
|
||||
}
|
||||
tableSize
|
||||
tags {
|
||||
tagClasses {
|
||||
name
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
query GetShots(
|
||||
$filterInput: FilterInput!
|
||||
$shotsPagination: GetShotsPagination
|
||||
$limit: Int
|
||||
$includeCreatedAt: Boolean! = false
|
||||
$includeUpdatedAt: Boolean! = false
|
||||
$includeCueObjectFeatures: Boolean! = false
|
||||
@@ -12,7 +14,11 @@ query GetShots(
|
||||
$includeMake: Boolean! = false
|
||||
$includeIntendedPocketType: Boolean! = false
|
||||
) {
|
||||
getShots(filterInput: $filterInput) {
|
||||
getShots(
|
||||
filterInput: $filterInput
|
||||
shotsPagination: $shotsPagination
|
||||
limit: $limit
|
||||
) {
|
||||
id
|
||||
videoId
|
||||
startFrame
|
||||
@@ -20,6 +26,7 @@ query GetShots(
|
||||
user {
|
||||
id
|
||||
}
|
||||
falsePositiveScore
|
||||
createdAt @include(if: $includeCreatedAt)
|
||||
updatedAt @include(if: $includeUpdatedAt)
|
||||
cueObjectFeatures @include(if: $includeCueObjectFeatures) {
|
||||
@@ -36,3 +43,10 @@ query GetShots(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
query GetShotAnnotationTypes {
|
||||
getShotAnnotationTypes {
|
||||
id
|
||||
name
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,20 @@
|
||||
mutation getProfileImageUploadLink($fileExt: String = ".png") {
|
||||
getProfileImageUploadLink(fileExt: $fileExt) {
|
||||
uploadUrl
|
||||
headers {
|
||||
key
|
||||
value
|
||||
value {
|
||||
... on UploadLink {
|
||||
uploadUrl
|
||||
headers {
|
||||
key
|
||||
value
|
||||
}
|
||||
}
|
||||
... on GetUploadLinkErrors {
|
||||
error {
|
||||
... on TooManyProfileImageUploadsErr {
|
||||
linksRequested
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -24,6 +35,7 @@ query getLoggedInUser {
|
||||
id
|
||||
firebaseUid
|
||||
username
|
||||
isAdmin
|
||||
profileImageUri
|
||||
activeVideoId
|
||||
createdAt
|
||||
@@ -36,3 +48,11 @@ query GetUserPlayTime($userId: Int!) {
|
||||
totalSeconds
|
||||
}
|
||||
}
|
||||
|
||||
query getUsernames(
|
||||
$matchString: String!
|
||||
$limit: Int = null
|
||||
$after: String = null
|
||||
) {
|
||||
getUsernames(matchString: $matchString, limit: $limit, after: $after)
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
query GetStreamMonitoringDetails($videoId: Int!) {
|
||||
getVideo(videoId: $videoId) {
|
||||
query GetStreamMonitoringDetails($videoId: Int!, $debuggingJson: JSON) {
|
||||
getVideo(videoId: $videoId, debuggingJson: $debuggingJson) {
|
||||
id
|
||||
totalShots
|
||||
makePercentage
|
||||
@@ -51,6 +51,7 @@ query GetStreamMonitoringDetails($videoId: Int!) {
|
||||
isCompleted
|
||||
uploadCompletionCursor
|
||||
lastIntendedSegmentBound
|
||||
initPlaylistUploadStatus
|
||||
}
|
||||
currentProcessing {
|
||||
errors {
|
||||
@@ -69,6 +70,7 @@ query GetVideoUpdatePageDetails($videoId: Int!) {
|
||||
totalShots
|
||||
makePercentage
|
||||
elapsedTime
|
||||
tableSize
|
||||
tags {
|
||||
tagClasses {
|
||||
name
|
||||
@@ -91,14 +93,13 @@ query GetVideoDetails($videoId: Int!) {
|
||||
elapsedTime
|
||||
endTime
|
||||
makePercentage
|
||||
makePercentage
|
||||
medianRun
|
||||
startTime
|
||||
totalShots
|
||||
totalShots
|
||||
totalShotsMade
|
||||
createdAt
|
||||
updatedAt
|
||||
tableSize
|
||||
owner {
|
||||
id
|
||||
firebaseUid
|
||||
@@ -139,12 +140,98 @@ query GetVideo($videoId: Int!) {
|
||||
playlist {
|
||||
segmentDurations
|
||||
}
|
||||
homographyHistory {
|
||||
frameIndex
|
||||
crop {
|
||||
left
|
||||
top
|
||||
width
|
||||
height
|
||||
}
|
||||
pockets {
|
||||
left
|
||||
top
|
||||
width
|
||||
height
|
||||
}
|
||||
sourcePoints {
|
||||
topLeft {
|
||||
x
|
||||
y
|
||||
}
|
||||
topSide {
|
||||
x
|
||||
y
|
||||
}
|
||||
topRight {
|
||||
x
|
||||
y
|
||||
}
|
||||
bottomLeft {
|
||||
x
|
||||
y
|
||||
}
|
||||
bottomSide {
|
||||
x
|
||||
y
|
||||
}
|
||||
bottomRight {
|
||||
x
|
||||
y
|
||||
}
|
||||
}
|
||||
}
|
||||
stream {
|
||||
streamSegmentType
|
||||
segments {
|
||||
segmentIndex
|
||||
endFrameIndex
|
||||
framesPerSecond
|
||||
}
|
||||
resolution {
|
||||
width
|
||||
height
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
query GetVideoForClipTimes($videoId: Int!) {
|
||||
getVideo(videoId: $videoId) {
|
||||
id
|
||||
framesPerSecond
|
||||
playlist {
|
||||
segmentDurations
|
||||
}
|
||||
stream {
|
||||
id
|
||||
streamSegmentType
|
||||
segments {
|
||||
uploaded
|
||||
valid
|
||||
segmentIndex
|
||||
endFrameIndex
|
||||
framesPerSecond
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,14 +6,73 @@ mutation CreateUploadStream($videoMetadataInput: VideoMetadataInput!) {
|
||||
|
||||
mutation GetUploadLink($videoId: Int!, $segmentIndex: Int!) {
|
||||
getUploadLink(videoId: $videoId, segmentIndex: $segmentIndex) {
|
||||
uploadUrl
|
||||
headers {
|
||||
key
|
||||
value
|
||||
value {
|
||||
... on UploadLink {
|
||||
uploadUrl
|
||||
headers {
|
||||
key
|
||||
value
|
||||
}
|
||||
}
|
||||
... on GetUploadLinkErrors {
|
||||
error {
|
||||
... on MustHaveSetForUploadLinkErr {
|
||||
resolution
|
||||
framesPerSecond
|
||||
}
|
||||
... on SegmentAlreadyUploadedErr {
|
||||
segmentId
|
||||
}
|
||||
... on ProcessingFailedErr {
|
||||
processing {
|
||||
status
|
||||
errors {
|
||||
message
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stream {
|
||||
uploadCompletionCursor
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mutation GetHlsInitUploadLink($videoId: Int!) {
|
||||
getHlsInitUploadLink(videoId: $videoId) {
|
||||
value {
|
||||
... on UploadLink {
|
||||
uploadUrl
|
||||
headers {
|
||||
key
|
||||
value
|
||||
}
|
||||
}
|
||||
... on GetUploadLinkErrors {
|
||||
error {
|
||||
... on NoInitForChunkedUploadErr {
|
||||
segmentType
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mutation SetSegmentDuration(
|
||||
$videoId: Int!
|
||||
$segmentIndex: Int!
|
||||
$duration: Float!
|
||||
) {
|
||||
setSegmentDuration(
|
||||
videoId: $videoId
|
||||
segmentIndex: $segmentIndex
|
||||
duration: $duration
|
||||
)
|
||||
}
|
||||
|
||||
mutation EditUploadStream(
|
||||
$videoId: Int!
|
||||
$videoMetadataInput: VideoMetadataInput!
|
||||
@@ -50,6 +109,7 @@ query GetUploadStreamsWithDetails(
|
||||
isCompleted
|
||||
lastIntendedSegmentBound
|
||||
uploadCompletionCursor
|
||||
uploadsCompleted
|
||||
}
|
||||
}
|
||||
pageInfo {
|
||||
|
||||
193
src/schema.gql
193
src/schema.gql
@@ -4,13 +4,24 @@ type Query {
|
||||
): [AggregateResultGQL!]!
|
||||
getBucketSet(keyName: String!): BucketSetGQL
|
||||
getDeployedConfig: DeployedConfigGQL!
|
||||
waitFor(duration: Float!): Float!
|
||||
getVideoMakePercentageIntervals(
|
||||
videoId: ID!
|
||||
intervalDuration: Int! = 300
|
||||
): [MakePercentageIntervalGQL!]!
|
||||
getShots(filterInput: FilterInput!): [ShotGQL!]!
|
||||
getShots(
|
||||
filterInput: FilterInput!
|
||||
shotsPagination: GetShotsPagination = null
|
||||
limit: Int! = 500
|
||||
): [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
|
||||
@@ -18,7 +29,8 @@ type Query {
|
||||
after: String = null
|
||||
filters: VideoFilterInput = null
|
||||
): VideoHistoryGQL!
|
||||
getVideo(videoId: Int!): VideoGQL!
|
||||
getUserTags: [TagGQL!]!
|
||||
getVideo(videoId: Int!, debuggingJson: JSON = null): VideoGQL!
|
||||
getVideos(videoIds: [Int!]!): [VideoGQL!]!
|
||||
}
|
||||
|
||||
@@ -65,6 +77,7 @@ input EnumAggregation {
|
||||
input FilterInput @oneOf {
|
||||
andFilters: [FilterInput!]
|
||||
orFilters: [FilterInput!]
|
||||
notFilter: FilterInput
|
||||
cueObjectDistance: RangeFilter
|
||||
targetPocketDistance: RangeFilter
|
||||
cueObjectAngle: RangeFilter
|
||||
@@ -76,11 +89,31 @@ input FilterInput @oneOf {
|
||||
userId: [Int!]
|
||||
make: [Boolean!]
|
||||
tags: [VideoTagInput!]
|
||||
annotations: [ShotAnnotationInput!]
|
||||
isStraight: [Boolean!]
|
||||
isRight: [Boolean!]
|
||||
isLeft: [Boolean!]
|
||||
isLeftMiss: [Boolean!]
|
||||
isRightMiss: [Boolean!]
|
||||
isDirect: [Boolean!]
|
||||
tableSize: RangeFilter
|
||||
bankAngle: RangeFilter
|
||||
bankDistance: RangeFilter
|
||||
kickAngle: RangeFilter
|
||||
kickDistance: RangeFilter
|
||||
cueAngleAfterObject: RangeFilter
|
||||
cueSpeedAfterObject: RangeFilter
|
||||
spinType: [String!]
|
||||
falsePositiveScore: RangeFilter
|
||||
}
|
||||
|
||||
input RangeFilter {
|
||||
lessThan: Float = null
|
||||
greaterThanEqualTo: Float = null
|
||||
greaterThan: Float = null
|
||||
includeOnNone: Boolean! = false
|
||||
lessThanInclusive: Boolean! = false
|
||||
greaterThanInclusive: Boolean! = true
|
||||
}
|
||||
|
||||
enum PocketEnum {
|
||||
@@ -103,6 +136,10 @@ input VideoTagClassInput {
|
||||
name: String!
|
||||
}
|
||||
|
||||
input ShotAnnotationInput {
|
||||
name: String!
|
||||
}
|
||||
|
||||
type BucketSetGQL {
|
||||
keyName: String!
|
||||
feature: String!
|
||||
@@ -119,6 +156,7 @@ type DeployedConfigGQL {
|
||||
firebase: Boolean!
|
||||
devMode: Boolean!
|
||||
environment: String!
|
||||
minimumAllowedAppVersion: String!
|
||||
}
|
||||
|
||||
type MakePercentageIntervalGQL {
|
||||
@@ -138,6 +176,9 @@ type ShotGQL {
|
||||
bankFeatures: BankFeaturesGQL
|
||||
serializedShotPaths: SerializedShotPathsGQL
|
||||
user: UserGQL
|
||||
annotations: [ShotAnnotationGQL!]!
|
||||
falsePositiveScore: Float
|
||||
video: VideoGQL
|
||||
}
|
||||
|
||||
"""
|
||||
@@ -178,19 +219,25 @@ type UserGQL {
|
||||
id: Int!
|
||||
firebaseUid: String!
|
||||
username: String!
|
||||
isAdmin: Boolean!
|
||||
activeVideoId: Int
|
||||
profileImageUri: String
|
||||
createdAt: DateTime
|
||||
updatedAt: DateTime
|
||||
}
|
||||
|
||||
type UserPlayTimeGQL {
|
||||
totalSeconds: Float!
|
||||
type ShotAnnotationGQL {
|
||||
shotId: Int!
|
||||
type: ShotAnnotationTypeGQL!
|
||||
creator: UserGQL!
|
||||
notes: String!
|
||||
createdAt: DateTime
|
||||
updatedAt: DateTime
|
||||
}
|
||||
|
||||
type VideoHistoryGQL {
|
||||
videos: [VideoGQL!]!
|
||||
pageInfo: PageInfoGQL!
|
||||
type ShotAnnotationTypeGQL {
|
||||
id: Int!
|
||||
name: String!
|
||||
}
|
||||
|
||||
type VideoGQL {
|
||||
@@ -210,6 +257,7 @@ type VideoGQL {
|
||||
endTime: DateTime
|
||||
elapsedTime: Float
|
||||
framesPerSecond: Float!
|
||||
tableSize: Float!
|
||||
stream: UploadStreamGQL
|
||||
playlist: HLSPlaylistGQL
|
||||
tags: [VideoTag!]!
|
||||
@@ -224,12 +272,21 @@ type UploadStreamGQL {
|
||||
segmentProcessingCursor: Int!
|
||||
lastIntendedSegmentBound: Int
|
||||
isCompleted: Boolean!
|
||||
initPlaylistUploadStatus: InitPlaylistUploadStatusEnum
|
||||
lowestUnuploadedSegmentIndex: Int!
|
||||
uploadCompletionCursor: Int!
|
||||
errors: [StreamErrorGQL!]!
|
||||
createdAt: DateTime!
|
||||
updatedAt: DateTime!
|
||||
segments: [UploadSegmentGQL!]!
|
||||
resolution: VideoResolutionGQL!
|
||||
streamSegmentType: StreamSegmentTypeEnum!
|
||||
}
|
||||
|
||||
enum InitPlaylistUploadStatusEnum {
|
||||
NOT_APPLICABLE
|
||||
NOT_UPLOADED
|
||||
UPLOADED
|
||||
}
|
||||
|
||||
type StreamErrorGQL {
|
||||
@@ -242,10 +299,20 @@ type UploadSegmentGQL {
|
||||
valid: Boolean!
|
||||
endFrameIndex: Int
|
||||
framesPerSecond: Float
|
||||
durationsInSeconds: Float
|
||||
durationInSeconds: Float
|
||||
linksRequested: Int!
|
||||
}
|
||||
|
||||
type VideoResolutionGQL {
|
||||
width: Int
|
||||
height: Int
|
||||
}
|
||||
|
||||
enum StreamSegmentTypeEnum {
|
||||
FRAGMENTED_MP4
|
||||
RB_CHUNKED_MP4
|
||||
}
|
||||
|
||||
type HLSPlaylistGQL {
|
||||
videoId: Int!
|
||||
m3u8Text: String!
|
||||
@@ -292,6 +359,8 @@ type IntPoint2D {
|
||||
|
||||
type VideoProcessingGQL {
|
||||
errors: [VideoProcessingErrorGQL!]!
|
||||
status: ProcessingStatusEnum!
|
||||
statuses: [VideoProcessingStatusGQL!]!
|
||||
}
|
||||
|
||||
type VideoProcessingErrorGQL {
|
||||
@@ -300,6 +369,44 @@ type VideoProcessingErrorGQL {
|
||||
endSegmentIndex: Int
|
||||
}
|
||||
|
||||
enum ProcessingStatusEnum {
|
||||
STARTED
|
||||
FAILED
|
||||
SUCCEEDED
|
||||
SUSPENDED
|
||||
CREATED
|
||||
QUEUED
|
||||
RUNNING
|
||||
REEXTRACTING_FEATURES
|
||||
}
|
||||
|
||||
type VideoProcessingStatusGQL {
|
||||
status: ProcessingStatusEnum!
|
||||
appVersion: String!
|
||||
sequenceId: Int!
|
||||
createdAt: DateTime
|
||||
updatedAt: DateTime
|
||||
}
|
||||
|
||||
input GetShotsPagination {
|
||||
createdAfter: CreatedAfter!
|
||||
startFrameAfter: Int!
|
||||
}
|
||||
|
||||
input CreatedAfter @oneOf {
|
||||
videoId: Int
|
||||
createdAt: DateTime
|
||||
}
|
||||
|
||||
type UserPlayTimeGQL {
|
||||
totalSeconds: Float!
|
||||
}
|
||||
|
||||
type VideoHistoryGQL {
|
||||
videos: [VideoGQL!]!
|
||||
pageInfo: PageInfoGQL!
|
||||
}
|
||||
|
||||
type PageInfoGQL {
|
||||
hasNextPage: Boolean!
|
||||
endCursor: String
|
||||
@@ -310,15 +417,36 @@ input VideoFilterInput {
|
||||
requireCursorCompletion: Boolean! = true
|
||||
}
|
||||
|
||||
type TagGQL {
|
||||
name: String!
|
||||
id: Int!
|
||||
group: String
|
||||
}
|
||||
|
||||
"""
|
||||
The `JSON` scalar type represents JSON values as specified by [ECMA-404](https://ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf).
|
||||
"""
|
||||
scalar JSON
|
||||
@specifiedBy(
|
||||
url: "https://ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf"
|
||||
)
|
||||
|
||||
type Mutation {
|
||||
createBucketSet(params: CreateBucketSetInput!): BucketSetGQL!
|
||||
setLoggerLevel(path: String!, level: String!): Boolean!
|
||||
addAnnotationToShot(shotId: Int!, annotationName: String!): Boolean!
|
||||
getProfileImageUploadLink(fileExt: String = ".png"): GetUploadLinkReturn!
|
||||
editProfileImageUri(profileImageUri: String!): UserGQL!
|
||||
createUploadStream(
|
||||
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!
|
||||
}
|
||||
@@ -330,6 +458,13 @@ input CreateBucketSetInput {
|
||||
}
|
||||
|
||||
type GetUploadLinkReturn {
|
||||
value: UploadLinkGetUploadLinkErrors!
|
||||
stream: UploadStreamGQL
|
||||
}
|
||||
|
||||
union UploadLinkGetUploadLinkErrors = UploadLink | GetUploadLinkErrors
|
||||
|
||||
type UploadLink {
|
||||
uploadUrl: String!
|
||||
headers: [Header]!
|
||||
}
|
||||
@@ -339,6 +474,38 @@ type Header {
|
||||
value: String!
|
||||
}
|
||||
|
||||
type GetUploadLinkErrors {
|
||||
error: MustHaveSetForUploadLinkErrSegmentAlreadyUploadedErrProcessingFailedErrNoInitForChunkedUploadErrTooManyProfileImageUploadsErr!
|
||||
}
|
||||
|
||||
union MustHaveSetForUploadLinkErrSegmentAlreadyUploadedErrProcessingFailedErrNoInitForChunkedUploadErrTooManyProfileImageUploadsErr =
|
||||
MustHaveSetForUploadLinkErr
|
||||
| SegmentAlreadyUploadedErr
|
||||
| ProcessingFailedErr
|
||||
| NoInitForChunkedUploadErr
|
||||
| TooManyProfileImageUploadsErr
|
||||
|
||||
type MustHaveSetForUploadLinkErr {
|
||||
resolution: Boolean
|
||||
framesPerSecond: Boolean
|
||||
}
|
||||
|
||||
type SegmentAlreadyUploadedErr {
|
||||
segmentId: Int!
|
||||
}
|
||||
|
||||
type ProcessingFailedErr {
|
||||
processing: VideoProcessingGQL!
|
||||
}
|
||||
|
||||
type NoInitForChunkedUploadErr {
|
||||
segmentType: StreamSegmentTypeEnum!
|
||||
}
|
||||
|
||||
type TooManyProfileImageUploadsErr {
|
||||
linksRequested: Int!
|
||||
}
|
||||
|
||||
type CreateUploadStreamReturn {
|
||||
videoId: Int!
|
||||
}
|
||||
@@ -348,10 +515,13 @@ input VideoMetadataInput {
|
||||
startTime: DateTime = null
|
||||
endTime: DateTime = null
|
||||
gameType: String = null
|
||||
tableSize: String = null
|
||||
tableSize: Float = null
|
||||
uploadStreamMetadataInput: UploadStreamMetadataInput = null
|
||||
lastIntendedSegmentBound: Int = null
|
||||
streamSegmentType: StreamSegmentTypeEnum = null
|
||||
endStream: Boolean! = false
|
||||
resolution: VideoResolution = null
|
||||
framesPerSecond: Float = null
|
||||
}
|
||||
|
||||
input UploadStreamMetadataInput {
|
||||
@@ -371,3 +541,8 @@ enum DeviceTypeEnum {
|
||||
ANDROID
|
||||
BROWSER
|
||||
}
|
||||
|
||||
input VideoResolution {
|
||||
width: Int!
|
||||
height: Int!
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user