@@ -230,7 +230,9 @@ protected void init()
230230 commandData .getItem (VideoCamHelper .TASKING_PTZ_POS ).removeComponent (VideoCamHelper .TASKING_ZOOM );
231231 log .debug ("Removed absolute z" );
232232 }
233- if (devicePtzConfig .getDefaultRelativePanTiltTranslationSpace () == null ) {
233+ if (devicePtzConfig .getDefaultRelativePanTiltTranslationSpace () == null
234+ // If absolute PTZ available, we can use simple logic to simulate relative PTZ
235+ && devicePtzConfig .getDefaultAbsolutePantTiltPositionSpace () == null ) {
234236 // Remove relative PT
235237 commandData .removeComponent (VideoCamHelper .TASKING_RPAN );
236238 commandData .removeComponent (VideoCamHelper .TASKING_RTILT );
@@ -306,29 +308,12 @@ protected boolean execCommand(DataBlock command) throws CommandException
306308 // ABSOLUTE PAN
307309 if (itemID .equals (VideoCamHelper .TASKING_PAN ))
308310 {
309- float pan = parent .degtoGeneric (data .getFloatValue (), 0 );
310- Vector2D targetPanTilt = new Vector2D ();
311-
312- targetPanTilt .setSpace (config .getDefaultAbsolutePantTiltPositionSpace ());
313- targetPanTilt .setX (pan );
314- targetPanTilt .setY (position .getPanTilt ().getY ());
315- position .setPanTilt (targetPanTilt );
316-
317- ptz .absoluteMove (ptzProfile .getToken (), position , speed );
318-
311+ parent .absolutePan (data .getFloatValue ());
319312 }
320313 // ABSOLUTE TILT
321314 else if (itemID .equals (VideoCamHelper .TASKING_TILT ))
322315 {
323- float tilt = parent .degtoGeneric (data .getFloatValue (), 1 );
324- Vector2D targetPanTilt = new Vector2D ();
325-
326- targetPanTilt .setSpace (config .getDefaultAbsolutePantTiltPositionSpace ());
327- targetPanTilt .setX (position .getPanTilt ().getX ());
328- targetPanTilt .setY (tilt );
329- position .setPanTilt (targetPanTilt );
330-
331- camera .getPtz ().absoluteMove (ptzProfile .getToken (), position , speed );
316+ parent .absoluteTilt (data .getFloatValue ());
332317 }
333318 // ABSOLUTE ZOOM
334319 else if (itemID .equals (VideoCamHelper .TASKING_ZOOM ))
@@ -345,28 +330,42 @@ else if (itemID.equals(VideoCamHelper.TASKING_ZOOM))
345330 // RELATIVE PAN
346331 else if (itemID .equals (VideoCamHelper .TASKING_RPAN ))
347332 {
348- float rpan = data .getFloatValue () / (parent .panMax - parent .panMin ) * 2 ;
349- Vector2D targetPanTilt = new Vector2D ();
333+ float rpan = data .getFloatValue ();
334+ try {
335+ Vector2D targetPanTilt = new Vector2D ();
350336
351- targetPanTilt .setX (rpan );
352- targetPanTilt .setY (0.0f );
353- targetPanTilt .setSpace (config .getDefaultRelativePanTiltTranslationSpace ());
354- position .setPanTilt (targetPanTilt );
337+ targetPanTilt .setX (rpan );
338+ targetPanTilt .setY (0.0f );
339+ targetPanTilt .setSpace (config .getDefaultRelativePanTiltTranslationSpace ());
340+ position .setPanTilt (targetPanTilt );
355341
356- camera .getPtz ().relativeMove (ptzProfile .getToken (), position , speed );
342+ camera .getPtz ().relativeMove (ptzProfile .getToken (), position , speed );
343+ } catch (Exception e ) {
344+ if (devicePtzConfig .getDefaultAbsolutePantTiltPositionSpace () != null ) {
345+ float pan = parent .ptzPosOutput .getLatestRecord ().getFloatValue (1 ) + rpan ;
346+ parent .absolutePan (pan );
347+ }
348+ }
357349 }
358350 // RELATIVE TILT
359351 else if (itemID .equals (VideoCamHelper .TASKING_RTILT ))
360352 {
361- float rtilt = data .getFloatValue () / (parent .tiltMax - parent .tiltMin ) * 2 ;
362- Vector2D targetPanTilt = new Vector2D ();
353+ float rtilt = data .getFloatValue ();
354+ try {
355+ Vector2D targetPanTilt = new Vector2D ();
363356
364- targetPanTilt .setX (0.0f );
365- targetPanTilt .setY (rtilt );
366- targetPanTilt .setSpace (config .getDefaultRelativePanTiltTranslationSpace ());
367- position .setPanTilt (targetPanTilt );
357+ targetPanTilt .setX (0.0f );
358+ targetPanTilt .setY (rtilt );
359+ targetPanTilt .setSpace (config .getDefaultRelativePanTiltTranslationSpace ());
360+ position .setPanTilt (targetPanTilt );
368361
369- camera .getPtz ().relativeMove (ptzProfile .getToken (), position , speed );
362+ camera .getPtz ().relativeMove (ptzProfile .getToken (), position , speed );
363+ } catch (Exception e ) {
364+ if (devicePtzConfig .getDefaultAbsolutePantTiltPositionSpace () != null ) {
365+ float tilt = parent .ptzPosOutput .getLatestRecord ().getFloatValue (2 ) + rtilt ;
366+ parent .absoluteTilt (tilt );
367+ }
368+ }
370369 }
371370 // RELATIVE ZOOM
372371 else if (itemID .equals (VideoCamHelper .TASKING_RZOOM ))
0 commit comments