dynamic duration buffer adjustment

This commit is contained in:
Chuck
2025-09-12 17:57:06 -04:00
parent 12b99024a4
commit 4aa307c8dd
4 changed files with 19 additions and 21 deletions

View File

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

View File

@@ -145,7 +145,7 @@
"update_interval": 3600, "update_interval": 3600,
"scroll_speed": 1, "scroll_speed": 1,
"scroll_delay": 0.01, "scroll_delay": 0.01,
"loop": true, "loop": false,
"future_fetch_days": 50, "future_fetch_days": 50,
"show_channel_logos": true, "show_channel_logos": true,
"dynamic_duration": true, "dynamic_duration": true,
@@ -188,10 +188,10 @@
"display_duration": 60, "display_duration": 60,
"loop": false, "loop": false,
"request_timeout": 30, "request_timeout": 30,
"dynamic_duration": false, "dynamic_duration": true,
"min_duration": 45, "min_duration": 45,
"max_duration": 600, "max_duration": 600,
"duration_buffer": 0.3 "duration_buffer": 0.1
}, },
"calendar": { "calendar": {
"enabled": false, "enabled": false,

View File

@@ -1002,19 +1002,18 @@ class LeaderboardManager:
# Add buffer time for smooth cycling (configurable %) # Add buffer time for smooth cycling (configurable %)
buffer_time = total_time * self.duration_buffer buffer_time = total_time * self.duration_buffer
# If looping is enabled, ensure we complete at least one full cycle # Calculate duration for single complete pass
# and add extra time to ensure we don't cut off mid-scroll
if self.loop: if self.loop:
# Add extra buffer for looping to ensure smooth transition # For looping: add buffer to ensure smooth transition
# Use a more generous buffer to ensure complete content display loop_buffer = total_time * 0.05 # 5% extra for looping
loop_buffer = total_time * 0.2 # 20% extra for looping (increased from 15%)
calculated_duration = int(total_time + buffer_time + loop_buffer) calculated_duration = int(total_time + buffer_time + loop_buffer)
logger.debug(f"Looping enabled, added {loop_buffer:.2f}s loop buffer") logger.debug(f"Looping enabled, added {loop_buffer:.2f}s loop buffer")
else: else:
# Even without looping, add extra buffer to ensure complete display # For single pass: precise calculation to show content exactly once
extra_buffer = total_time * 0.15 # 15% extra to ensure complete content display (increased from 10%) # Add minimal buffer only to prevent cutting off the last content
calculated_duration = int(total_time + buffer_time + extra_buffer) completion_buffer = total_time * 0.02 # 2% extra to ensure complete display
logger.debug(f"No looping, added {extra_buffer:.2f}s extra buffer for complete display") calculated_duration = int(total_time + buffer_time + completion_buffer)
logger.debug(f"Single pass mode, added {completion_buffer:.2f}s completion buffer for precise timing")
# Apply configured min/max limits # Apply configured min/max limits
if calculated_duration < self.min_duration: if calculated_duration < self.min_duration:

View File

@@ -1377,19 +1377,18 @@ class OddsTickerManager:
# Add buffer time for smooth cycling (configurable %) # Add buffer time for smooth cycling (configurable %)
buffer_time = total_time * self.duration_buffer buffer_time = total_time * self.duration_buffer
# If looping is enabled, ensure we complete at least one full cycle # Calculate duration for single complete pass
# and add extra time to ensure we don't cut off mid-scroll
if self.loop: if self.loop:
# Add minimal buffer for looping to ensure smooth transition # For looping: add minimal buffer to ensure smooth transition
# Reduced buffer to prevent excessive duration while maintaining smoothness loop_buffer = total_time * 0.05 # 5% extra for looping
loop_buffer = total_time * 0.05 # 5% extra for looping (reduced from 20%)
calculated_duration = int(total_time + buffer_time + loop_buffer) calculated_duration = int(total_time + buffer_time + loop_buffer)
logger.debug(f"Looping enabled, added {loop_buffer:.2f}s loop buffer") logger.debug(f"Looping enabled, added {loop_buffer:.2f}s loop buffer")
else: else:
# Even without looping, add minimal buffer to ensure complete display # For single pass: precise calculation to show content exactly once
extra_buffer = total_time * 0.05 # 5% extra to ensure complete content display (reduced from 15%) # Add minimal buffer only to prevent cutting off the last content
calculated_duration = int(total_time + buffer_time + extra_buffer) completion_buffer = total_time * 0.02 # 2% extra to ensure complete display
logger.debug(f"No looping, added {extra_buffer:.2f}s extra buffer for complete display") calculated_duration = int(total_time + buffer_time + completion_buffer)
logger.debug(f"Single pass mode, added {completion_buffer:.2f}s completion buffer for precise timing")
# Apply configured min/max limits # Apply configured min/max limits
if calculated_duration < self.min_duration: if calculated_duration < self.min_duration: