From 02b983788853822ef4fd3e5059ba2d290cfd722a Mon Sep 17 00:00:00 2001 From: Karl Moos Date: Fri, 30 Oct 2020 05:39:34 -0500 Subject: [PATCH 1/4] Add Recording Encode setter --- README.md | 2 +- api/APIHandler.py | 4 ++-- api/recording.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f91b5ee..fcf2dae 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ GET: SET: - [X] Display -> OSD -- [ ] Recording -> Encode (Clear and Fluent Stream) +- [X] Recording -> Encode (Clear and Fluent Stream) - [ ] Recording -> Advance (Scheduling) - [X] Network -> General - [X] Network -> Advanced diff --git a/api/APIHandler.py b/api/APIHandler.py index a62846a..59df805 100644 --- a/api/APIHandler.py +++ b/api/APIHandler.py @@ -80,8 +80,8 @@ class APIHandler(SystemAPIMixin, """ try: data = [{"cmd": "Logout", "action": 0}] - ret = self._execute_command('Logout', data) - print(ret) + self._execute_command('Logout', data) + # print(ret) return True except Exception as e: print("Error Logout\n", e) diff --git a/api/recording.py b/api/recording.py index d221fa5..259e56a 100644 --- a/api/recording.py +++ b/api/recording.py @@ -27,6 +27,48 @@ class RecordingAPIMixin: body = [{"cmd": "GetRec", "action": 1, "param": {"channel": 0}}] return self._execute_command('GetRec', body) + def set_recording_encoding(self, + audio=0, + main_bit_rate=8192, + main_frame_rate=8, + main_profile='High', + main_size="2560*1440", + sub_bit_rate=160, + sub_frame_rate=7, + sub_profile='High', + sub_size='640*480') -> object: + """ + Sets the current camera encoding settings for "Clear" and "Fluent" profiles. + :param audio: int Audio on or off + :param main_bit_rate: int Clear Bit Rate + :param main_frame_rate: int Clear Frame Rate + :param main_profile: string Clear Profile + :param main_size: string Clear Size + :param sub_bit_rate: int Fluent Bit Rate + :param sub_frame_rate: int Fluent Frame Rate + :param sub_profile: string Fluent Profile + :param sub_size: string Fluent Size + :return: response + """ + body = [{"cmd": "SetEnc", + "action": 0, + "param": + {"Enc": + {"audio": audio, + "channel": 0, + "mainStream": { + "bitRate": main_bit_rate, + "frameRate": main_frame_rate, + "profile": main_profile, + "size": main_size}, + "subStream": { + "bitRate": sub_bit_rate, + "frameRate": sub_frame_rate, + "profile": sub_profile, + "size": sub_size}} + }}] + return self._execute_command('SetEnc', body) + ########### # RTSP Stream ########### From dd86eaca2e3851de08b1a267cc79ebdb1832e280 Mon Sep 17 00:00:00 2001 From: Karl Moos Date: Fri, 30 Oct 2020 06:00:03 -0500 Subject: [PATCH 2/4] Add Advanced Image settings --- README.md | 2 +- api/recording.py | 62 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index fcf2dae..594eb07 100644 --- a/README.md +++ b/README.md @@ -84,4 +84,4 @@ SET: - [x] Zoom - [x] Focus - [ ] Image (Brightness, Contrast, Saturation, Hue, Sharp, Mirror, Rotate) -- [ ] Advanced Image (Anti-flicker, Exposure, White Balance, DayNight, Backlight, LED light, 3D-NR) +- [X] Advanced Image (Anti-flicker, Exposure, White Balance, DayNight, Backlight, LED light, 3D-NR) diff --git a/api/recording.py b/api/recording.py index 259e56a..5d1d7d6 100644 --- a/api/recording.py +++ b/api/recording.py @@ -69,6 +69,68 @@ class RecordingAPIMixin: }}] return self._execute_command('SetEnc', body) + def set_advanced_imaging(self, + anti_flicker='Outdoor', + exposure='Auto', + gain_min=1, + gain_max=62, + shutter_min=1, + shutter_max=125, + blue_gain=128, + red_gain=128, + white_balance='Auto', + day_night='Auto', + back_light='DynamicRangeControl', + blc=128, + drc=128, + rotation=0, + mirroring=0, + nr3d=1) -> object: + """ + Sets the advanced camera settings. + :param anti_flicker: string + :param exposure: string + :param gain_min: int + :param gain_max: string + :param shutter_min: int + :param shutter_max: int + :param blue_gain: int + :param red_gain: int + :param white_balance: string + :param day_night: string + :param back_light: string + :param blc: int + :param drc: int + :param rotation: int + :param mirroring: int + :param nr3d: int + :return: response + """ + body = [{ + "cmd": "SetIsp", + "action": 0, + "param": { + "Isp": { + "channel": 0, + "antiFlicker": anti_flicker, + "exposure": exposure, + "gain": {"min": gain_min, "max": gain_max}, + "shutter": {"min": shutter_min, "max": shutter_max}, + "blueGain": blue_gain, + "redGain": red_gain, + "whiteBalance": white_balance, + "dayNight": day_night, + "backLight": back_light, + "blc": blc, + "drc": drc, + "rotation": rotation, + "mirroring": mirroring, + "nr3d": nr3d + } + } + }] + return self._execute_command('SetIsp', body) + ########### # RTSP Stream ########### From e1eabf535dc0a56b67a675b497595c4dbad851cb Mon Sep 17 00:00:00 2001 From: Karl Moos Date: Fri, 30 Oct 2020 06:06:25 -0500 Subject: [PATCH 3/4] Refactor image settings from recording to new mixin --- api/APIHandler.py | 4 ++- api/image.py | 65 +++++++++++++++++++++++++++++++++++++++++++++++ api/recording.py | 62 -------------------------------------------- setup.py | 3 ++- 4 files changed, 70 insertions(+), 64 deletions(-) create mode 100644 api/image.py diff --git a/api/APIHandler.py b/api/APIHandler.py index 59df805..a4a6f07 100644 --- a/api/APIHandler.py +++ b/api/APIHandler.py @@ -7,6 +7,7 @@ from .system import SystemAPIMixin from .user import UserAPIMixin from .ptz import PtzAPIMixin from .alarm import AlarmAPIMixin +from .image import ImageAPIMixin from resthandle import Request @@ -18,7 +19,8 @@ class APIHandler(SystemAPIMixin, RecordingAPIMixin, ZoomAPIMixin, PtzAPIMixin, - AlarmAPIMixin): + AlarmAPIMixin, + ImageAPIMixin): """ The APIHandler class is the backend part of the API, the actual API calls are implemented in Mixins. diff --git a/api/image.py b/api/image.py new file mode 100644 index 0000000..4bcfcca --- /dev/null +++ b/api/image.py @@ -0,0 +1,65 @@ + +class ImageAPIMixin: + """API calls for image settings.""" + + def set_advanced_imaging(self, + anti_flicker='Outdoor', + exposure='Auto', + gain_min=1, + gain_max=62, + shutter_min=1, + shutter_max=125, + blue_gain=128, + red_gain=128, + white_balance='Auto', + day_night='Auto', + back_light='DynamicRangeControl', + blc=128, + drc=128, + rotation=0, + mirroring=0, + nr3d=1) -> object: + """ + Sets the advanced camera settings. + :param anti_flicker: string + :param exposure: string + :param gain_min: int + :param gain_max: string + :param shutter_min: int + :param shutter_max: int + :param blue_gain: int + :param red_gain: int + :param white_balance: string + :param day_night: string + :param back_light: string + :param blc: int + :param drc: int + :param rotation: int + :param mirroring: int + :param nr3d: int + :return: response + """ + body = [{ + "cmd": "SetIsp", + "action": 0, + "param": { + "Isp": { + "channel": 0, + "antiFlicker": anti_flicker, + "exposure": exposure, + "gain": {"min": gain_min, "max": gain_max}, + "shutter": {"min": shutter_min, "max": shutter_max}, + "blueGain": blue_gain, + "redGain": red_gain, + "whiteBalance": white_balance, + "dayNight": day_night, + "backLight": back_light, + "blc": blc, + "drc": drc, + "rotation": rotation, + "mirroring": mirroring, + "nr3d": nr3d + } + } + }] + return self._execute_command('SetIsp', body) diff --git a/api/recording.py b/api/recording.py index 5d1d7d6..259e56a 100644 --- a/api/recording.py +++ b/api/recording.py @@ -69,68 +69,6 @@ class RecordingAPIMixin: }}] return self._execute_command('SetEnc', body) - def set_advanced_imaging(self, - anti_flicker='Outdoor', - exposure='Auto', - gain_min=1, - gain_max=62, - shutter_min=1, - shutter_max=125, - blue_gain=128, - red_gain=128, - white_balance='Auto', - day_night='Auto', - back_light='DynamicRangeControl', - blc=128, - drc=128, - rotation=0, - mirroring=0, - nr3d=1) -> object: - """ - Sets the advanced camera settings. - :param anti_flicker: string - :param exposure: string - :param gain_min: int - :param gain_max: string - :param shutter_min: int - :param shutter_max: int - :param blue_gain: int - :param red_gain: int - :param white_balance: string - :param day_night: string - :param back_light: string - :param blc: int - :param drc: int - :param rotation: int - :param mirroring: int - :param nr3d: int - :return: response - """ - body = [{ - "cmd": "SetIsp", - "action": 0, - "param": { - "Isp": { - "channel": 0, - "antiFlicker": anti_flicker, - "exposure": exposure, - "gain": {"min": gain_min, "max": gain_max}, - "shutter": {"min": shutter_min, "max": shutter_max}, - "blueGain": blue_gain, - "redGain": red_gain, - "whiteBalance": white_balance, - "dayNight": day_night, - "backLight": back_light, - "blc": blc, - "drc": drc, - "rotation": rotation, - "mirroring": mirroring, - "nr3d": nr3d - } - } - }] - return self._execute_command('SetIsp', body) - ########### # RTSP Stream ########### diff --git a/setup.py b/setup.py index 70c8068..98eba70 100644 --- a/setup.py +++ b/setup.py @@ -66,6 +66,7 @@ setup(name=NAME, 'api.system', 'api.user', 'api.zoom', - 'api.alarm' + 'api.alarm', + 'api.image' ] ) From 0c3475aa00a096fa93bcbb53895128be47c1a61b Mon Sep 17 00:00:00 2001 From: Karl Moos Date: Fri, 30 Oct 2020 07:27:33 -0500 Subject: [PATCH 4/4] Add Image settings setter --- README.md | 2 +- api/image.py | 70 +++++++++++++++++++++++++++++++++++++++------------- 2 files changed, 54 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 594eb07..8cca35b 100644 --- a/README.md +++ b/README.md @@ -83,5 +83,5 @@ SET: - [x] PTZ - [x] Zoom - [x] Focus -- [ ] Image (Brightness, Contrast, Saturation, Hue, Sharp, Mirror, Rotate) +- [X] Image (Brightness, Contrast, Saturation, Hue, Sharp, Mirror, Rotate) - [X] Advanced Image (Anti-flicker, Exposure, White Balance, DayNight, Backlight, LED light, 3D-NR) diff --git a/api/image.py b/api/image.py index 4bcfcca..6cdb823 100644 --- a/api/image.py +++ b/api/image.py @@ -2,25 +2,26 @@ class ImageAPIMixin: """API calls for image settings.""" - def set_advanced_imaging(self, - anti_flicker='Outdoor', - exposure='Auto', - gain_min=1, - gain_max=62, - shutter_min=1, - shutter_max=125, - blue_gain=128, - red_gain=128, - white_balance='Auto', - day_night='Auto', - back_light='DynamicRangeControl', - blc=128, - drc=128, - rotation=0, - mirroring=0, - nr3d=1) -> object: + def set_adv_image_settings(self, + anti_flicker='Outdoor', + exposure='Auto', + gain_min=1, + gain_max=62, + shutter_min=1, + shutter_max=125, + blue_gain=128, + red_gain=128, + white_balance='Auto', + day_night='Auto', + back_light='DynamicRangeControl', + blc=128, + drc=128, + rotation=0, + mirroring=0, + nr3d=1) -> object: """ Sets the advanced camera settings. + :param anti_flicker: string :param exposure: string :param gain_min: int @@ -63,3 +64,38 @@ class ImageAPIMixin: } }] return self._execute_command('SetIsp', body) + + def set_image_settings(self, + brightness=128, + contrast=62, + hue=1, + saturation=125, + sharpness=128) -> object: + """ + Sets the camera image settings. + + :param brightness: int + :param contrast: string + :param hue: int + :param saturation: int + :param sharpness: int + :return: response + """ + body = [ + { + "cmd": "SetImage", + "action": 0, + "param": { + "Image": { + "bright": brightness, + "channel": 0, + "contrast": contrast, + "hue": hue, + "saturation": saturation, + "sharpen": sharpness + } + } + } + ] + + return self._execute_command('SetImage', body)