| 58 | MODE_Output = 1<<0 |
| 59 | |
| 60 | class VideoServer: |
| 61 | def __init__(self, address, authkey): |
| 62 | # Server commands |
| 63 | self.SET_FILENAME = 1 |
| 64 | self.STREAM_CONFIGURE = 2 |
| 65 | self.STREAM_ENABLE = 3 |
| 66 | self.STREAM_DISABLE = 4 |
| 67 | self.FRAME_READ = 5 |
| 68 | self.FRAME_WRITE = 6 |
| 69 | self.CLOSE_SERVER = 7 |
| 70 | # Color space |
| 71 | self.GRAYSCALE8 = 1 |
| 72 | self.RGB888 = 2 |
| 73 | self.BGR565 = 3 |
| 74 | self.YUV420 = 4 |
| 75 | self.NV12 = 5 |
| 76 | self.NV21 = 6 |
| 77 | # Variables |
| 78 | self.listener = Listener(address, authkey=authkey.encode('utf-8')) |
| 79 | self.filename = "" |
| 80 | self.mode = None |
| 81 | self.active = False |
| 82 | self.video = True |
| 83 | self.stream = None |
| 84 | self.frame_ratio = 0 |
| 85 | self.frame_drop = 0 |
| 86 | self.frame_index = 0 |
| 87 | self.eos = False |
| 88 | # Stream configuration |
| 89 | self.resolution = (None, None) |
| 90 | self.color_format = None |
| 91 | self.frame_rate = None |
| 92 | |
| 93 | # Set filename |
| 94 | def _setFilename(self, base_dir, filename, mode): |
| 95 | filename_valid = False |
| 96 | |
| 97 | if self.active: |
| 98 | return filename_valid |
| 99 | |
| 100 | self.filename = "" |
| 101 | self.frame_index = 0 |
| 102 | |
| 103 | file_extension = str(filename).split('.')[-1].lower() |
| 104 | |
| 105 | if file_extension in video_file_extensions: |
| 106 | self.video = True |
| 107 | else: |
| 108 | self.video = False |
| 109 | |
| 110 | file_path = os.path.join(base_dir, filename) |
| 111 | logger.debug(f"File path: {file_path}") |
| 112 | |
| 113 | if (mode & MODE_IO_Msk) == MODE_Input: |
| 114 | self.mode = MODE_Input |
| 115 | if os.path.isfile(file_path): |
| 116 | if file_extension in (video_file_extensions + image_file_extensions): |
| 117 | self.filename = file_path |