Why Is AFR Disabled by Default in SmartTube? Hardware Compatibility and Stability Trade-offs
SmartTube ships with Auto-Frame-Rate (AFR) disabled by default because the feature is hardware-dependent, frequently causes instability on devices like the NVIDIA Shield, and provides only modest perceptible benefits for most users.
SmartTube, the open-source Android TV YouTube client maintained by yuliskov, includes sophisticated display synchronization capabilities through its Auto-Frame-Rate (AFR) feature. However, unlike standard playback settings, AFR remains turned off in the default configuration to ensure reliable performance across the fragmented Android TV hardware ecosystem.
Hardware-Dependent Limitations
According to the official README documentation in the SmartTube repository, AFR "does not work well on every hardware" and the developers explicitly state that if you don't know what it does and don't want to test it yourself, you can safely keep it off. This warning reflects the reality that frame-rate switching requires specific HDMI handshake support and display controller capabilities that vary dramatically between TV models and set-top boxes.
Stability Risks on Premium Hardware
Enabling AFR can introduce severe playback instability rather than improvement on certain high-end devices. The NVIDIA Shield, for example, lacks proper HDR/AFR support in its firmware implementation, frequently causing graphical glitches, audio-video desynchronization, or complete playback failures when the feature is active. The AutoFrameRateController.java file attempts to manage these transitions, but it cannot circumvent fundamental hardware or driver limitations present in specific chipsets.
Minimal Perceptible Benefit
The visual improvement offered by matching video frame rates to display refresh rates is marginal for most viewing scenarios. While theoretically eliminating 3:2 pulldown judder on 24fps cinematic content, modern TVs typically compensate through advanced motion processing, making the difference barely noticeable to average viewers. Given the substantial risk of compatibility issues against minor smoothness gains, the developers prioritized a stable out-of-the-box experience.
How to Enable AFR Manually
For users with compatible hardware, AFR can be activated through the settings UI or programmatically. The feature availability is controlled by the PLAYER_BUTTON_AFR flag defined in common/src/main/java/com/liskovsoft/smartyoutubetv2/common/prefs/PlayerTweaksData.java.
In PlayerSettingsPresenter.java, the user-facing toggle is implemented as a TwoStatePreferenceItem:
// In PlayerSettingsPresenter the AFR toggle is added:
new TwoStatePreferenceItem(
context,
R.string.auto_frame_rate,
PlayerTweaksData.PLAYER_BUTTON_AFR);
Programmatic control is exposed through the TvQuickActions utility class:
// Turn AFR on for a specific video format
TvQuickActions.sendStartAFR(context, videoFormat);
// Turn AFR off
TvQuickActions.sendStopAFR(context);
When enabled via PlayerTweaksData, the AFR action button appears in the playback controls through VideoPlayerGlue.java:
// VideoPlayerGlue adds the AFR action to the playback controls
if (mPlayerTweaksData.isPlayerButtonEnabled(PlayerTweaksData.PLAYER_BUTTON_AFR)) {
putAction(new AFRAction(context));
}
The AFRAction.java class handles the UI button behavior, while AutoFrameRateController.java contains the core logic that applies frame rate changes and manages the associated edge cases.
Summary
- Hardware variability: AFR requires specific display controller and HDMI handshake support that is not universal across Android TV devices.
- Stability concerns: Devices such as the NVIDIA Shield experience HDR and AFR conflicts, causing crashes or playback failures.
- Marginal benefit: The smoothness improvement is minimal for most content and viewing scenarios.
- Opt-in design: SmartTube maintains AFR as an optional feature in
PlayerTweaksDatarather than enabling it by default, ensuring reliable performance for the majority of users.
Frequently Asked Questions
What is AFR in SmartTube?
Auto-Frame-Rate (AFR) is a playback feature that dynamically switches your display's refresh rate to match the video's native frame rate, such as 24Hz for film content. According to the SmartTube source code, this is implemented in AutoFrameRateController.java but defaults to off to prevent hardware compatibility issues.
Can enabling AFR damage my TV or Android TV device?
No, enabling AFR cannot physically damage your hardware, but it can trigger software instability, HDMI handshake failures, or playback stuttering on incompatible devices. The SmartTube README explicitly recommends keeping AFR disabled unless you are willing to test compatibility with your specific hardware.
How do I enable AFR if I want to test it on my device?
Navigate to the player settings and toggle the AFR option, which is controlled by PlayerTweaksData.PLAYER_BUTTON_AFR in PlayerSettingsPresenter.java. If your device supports it properly, the AFRAction button will appear in the playback controls, allowing you to activate frame-rate switching for supported video formats.
Does AFR improve video quality significantly compared to standard playback?
For most users, the improvement is subtle. While AFR theoretically eliminates judder by avoiding 3:2 pulldown on 24p content, modern televisions often handle frame conversion smoothly enough that the difference is barely perceptible, which is why SmartTube prioritizes stability over defaulting AFR on.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →