Raspberry pi3 sends 50FPS, my TV gets 29Hz

Just a question for better understanding FPS vs. Hz.

To start - playback of 50FPS streams from German public network is working fine with the new bullseye release. I’ve selected their 50Hz streams, and Kodi reports 50Hz when pressing the O for detailed information. But my TV set from Hisense reports 29Hz. And I trust a little bit my TV, because my Denon AVR in between cannot display its infoscreen being an overlay. I know that my Denon AVR is limited to some standard resolutions to display its overlays, and 29Hz is not on its list.

BTW, I observe a similar discrepancy between FPS selected for the GUI (I’ve tried 50Hz and 60Hz) and reported by TV (29Hz resp. 35Hz).

Thus I’d conclude that my pi3 reports 50FPS when asked, but is only capable to send with up to 30Hz!?

And I only want to understand this discrepancy - keep in mind everything is working fine (except the overlay from my AVR).

Regards, Michael

In the meantime I’ve tried to get some status information from the OS itself w.r.t. edid. Finally I’ve discovered

/sys/devices/platform/soc/soc:gpu/drm/card0/card0-HDMI-A-1

containing e.g. the (empty) file edid. I assume that this folder might store the HDMI capabilities.
I’ve also tried some tools to get HDMI informations but without success

  1. tvservice -s
    tvservice is not supported when using the vc4-kms-v3d driver.
    Similar features are available with standard linux tools
    such as modetest from libdrm-tests.
  2. modetest
    not available
  3. xrandr
    not available, and proboabely only for X11
  4. fbset -i

mode “1920x1080”
geometry 1920 1080 1920 1080 16
timings 0 0 0 0 0 0 0
accel true
rgba 5/11,6/5,5/0,0/0
endmode

Frame buffer device information:
Name : vc4drmfb
Address : 0
Size : 4147200
Type : PACKED PIXELS
Visual : TRUECOLOR
XPanStep : 1
YPanStep : 1
YWrapStep : 0
LineLength : 3840
Accelerator : No

What is the OS command within OSMC to read HDMI informations? I know there are some similar questions herein… but I think that it also touches my topic.

In the meantime I might answer myself: OSMC does not use the X window system, instead it fills the data within framebuffer. And framebuffer settings can be checked by fbset (as far as I know till now:-).

Regards, Michael

edid-decode /sys/devices/platform/soc/soc:gpu/drm/card0/card0-HDMI-A-1/edid

Thanks fot that command, but the file edid over there sadly is empty.

Regards, Michael

It is a handle, did you try edid-decode on it?

Thanks for that additional hint - now I see correctly all the HDMI data as provided by my Denon AVR.

Great! This edid to my understanding delivers the capabilities of myHDMI sink. But where to get the currently selected one?

Regards, Michael

Have you tried connecting the Pi directly to the television, without the AVR in between? One obvious possibility here is that the Pi is correctly outputting 50Hz but the AVR is messing up the signal before it reaches the TV.

That’s a good suggestion. I, too had this idea, but I tried it only after your post. From my perspective, luckily, I see the same discrepancy - Kodi reports 50FPS,while my TV reports 29Hz even for direct HDMI connection without AVR.

BTW, I use my chance to report that I use the 3 addons InputStream adaptive, Inputstrem FFmpeg Direct, and RTMP Input (as recommended here in another thread). But as far as I know these addons support in the selection of the “correct” stream. And I get the intended one with 50FPS. And of course I’ve also tried to deactivate them without change regarding FPS/Hz.

Did anybody else try to validate FPS rate reported by kodi with info reported by TV? If I do it for my enigma2 SAT receiver, information is consistent at 50Hz.

Regards, Michael

Heureka! Now I’m back to my original HDMI wiring. I had some trouble to get kodi back, but a reboot did it. And now the correct 50Hz is received by my TV. And I can display the GUI overlay from Denon.

Seems to be a typical HDMI mystery.

Thanks a lot for your participation in my problem, Michael

But to get it permanent, I had to enhance /boot/config-user.txt by

hdmi_force_hotplug=1

Of course there is the HDMI wiring pi3–>Denon AVR–>Hisense TV, and my pi3 is running 24/7 while the other devices are in standby. In theory even standby devices should provide their HDMI capabilities. But from my experience this additional option is mandatory.

My first try BTW failed in pretending on 1080p@50Hz by

hdmi_group=1
hdmi_mode=31

Those settings (from original raspberry documentation) fail to enable that mode (error message [ 20.319942] vc4-drm soc:gpu: [drm] Cannot find any crtc or sizes).

When I did my last (successful) test during boot, AVR and TV were both running. But I might sometimes boot my raspberry even if both HDMI devices are in standby. Then I might try to enforce the usage of an edid.dat file - I saved the currently working one by

cat /sys/devices/platform/soc/soc:gpu/drm/card0/card0-HDMI-A-1/edid > edid.dat

Not tested till now, and hopefully maybe not necessary.

Regards, Michael
PS: Sadly only enabling hdmi_force_hotplug was not enough. Now I’ve stored the above edid.dat into /boot and enabled hdmi_edid_file. To my surprise there is no message within dmesg reporting succsessful loading /boot/edid.dat - hope the best:-)

Sadly I’m not able get the “intended” HDMI setup for my raspberry pi3.

I’ve seen some threads here discussing similar problems - I’ve tried them without success.

What is my problem?
The raspberry does not select the correct video frequency (50Hz). Instead it uses something among 29Hz or 35Hz.

If my HDMI devices are switched on when the pi is booting, the correct frequency 50Hz is selected.

If my HDMI sinks are in standby (or switchen on/off multiple times) my raspberry changes the HDMI frequency (without reboot) to one of the wrong values.

I start/stop mediacenter only as needed, i.e. mostly kodi is not running.

What workarounds did I try?

  1. enable hdmi_force_hotplay=1
    Very promising. Stopping mediacenter, switching off AVR and TV. When starting all 3 kodi did use the correct frequency. But I do use of course other HDMI sources, and after some time kodi seleted the wrong frequency.

  2. enable hdmi_edid_file
    As described above - no improvement. I’ve compared the “working” edid with the failing one - they are identical!
    Thus my problem is not by a wrong edid file (sounds logical because my AVR should provide its edid even in standby).

  3. set hdmi_group=1, hdmi_mode=31
    Should be 1920x1080@50Hz, but I don’t get a HDMI connection at all and an error message within dmesg (see some previous post).

  4. set hdmi_group=1, hdmi_mode=16
    Should be 1920x1080@60Hz. When I start mediacenter, it switches frequency to 50Hz, if I stop mediacenter, it switches to 60Hz.

Maybe my problem arises due to timing problems when switching on all my devices? Of course typically my harmony remote will switch on TV, switch on AVR, selects correct HDMI inputs, and starts mediacenter. The precise sequence of those events might differ depending on the mood of the involved devices.

Does anybody run a raspberry pi3 successfully connected to an AVR with fixed HDMI resolution? And what are the successful settings?

Regards, Michael

Now some hours have passed, AVR and TV off. Kodi not running, but raspberry pi3 continuously running. And the HDMI frequency has changed on its own to 35Hz!!

Maybe I check if running kodi uninterrupted might help? But why does the HDMI frequeny change? And why is kodi not capable to switch to the correct 50Hz (my setup enforces 60Hz during boot, being changed by kodi to 50Hz after starting mediacenter)?

Regards, Michael

So you haven’t tried making a disp_cap file yet?

Thanks for your reply, but I’m on a raspberry pi3, and there is no file disp_cap anywhere below /sys/class.

But as I wrote above, the working and failing edid files are identical.

Now I’ve discovered /sys/kernel/debug/dri/0/state reporting

mode: “1920x1080”: 60 148500 1920 2008 2052 2200 1080 1084 1089 1125 0x40 0x5

as requested from config-user.txt when my pi is sending with 35Hz.

From that I’d conclude that something within bullseye’s kernel might be broken? The state clearly tells me 60Hz. And when kodi is running and switches to 50Hz, kodi reports 50Hz (pressing O during video playback), but my TV (and my AVR) both see 29Hz. I.e. 60Hz behave like 35Hz, and 50Hz behave 29Hz.

Regards, Michael

One additional finding: Now I’ve tried to boot my pi3 when AVR & TV both are in standby. Then no edid is found. Providing a working /boot/edid.dat also didn’t work - the pi3 uses 720x480p@60Hz.

Thus I now know, that simply enabling hdmi_edid_file does NOT work. From google I’ve learned that one might tweak cmdline.txt - for a pi4 the recommendation is to append

 drm.edid_firmware=edid.dat video=HDMI-A-1:D

Don’t know the corresponding settings for a pi3…

Regards, Michael

That seems to be covered in this thread…

The disp_cap file I was referencing is just a text file placed in Kodi’s userdata location that contains a list of the supported output formats. My understanding is that when present Kodi will ignore what information is received (or not) from the display and use what is in this supplied file instead. I don’t think that command to create the file automatically works on Rpi’s, but it works if you manually create one. I suppose @grahamh can correct me if I’m mistaken on this point.

I can’t be sure the disp_cap file trick works for RPi. The best way to find out is try it and see what comes up in settings.

1 Like

The disp_cap file is only used for emulating video modes on Vero 4K/4K+. It is however possible to simulate an EDID on Raspberry Pi.

Thanks a lot for all your hints.

@darwindesign Your post regarding boot options did the trick (I’ve tried similar things over and over, but I have missed probabely one detail):
appending drm.edid_firmware=HDMI-A-1:edid/edid.dat video=HDMI-A-1:D to the cmdline.txt and storing my working edid.dat within /lib/firmware/edid

Now my intended edid.dat is loaded as documented by dmesg
[Mo Okt 3 08:56:23 2022] [drm] Got external EDID base block and 1 extension from “edid/edid.dat” for connector “HDMI-A-1”

And now I can reboot my pi3 if AVR and TV are switched off.

Still a small mystery: I request hdmi_mode 31 using 50Hz - it es accepted by the OS as proofed by vcgencmd get_config int. But the initial frequency is still 60Hz - maybe due to lcd_framerate=60? But when I start kodi, the intended frequency 50Hz is set by kodi.

Now I’ll wait for some hours to see if the frequency stays at 60Hz resp. 50Hz when I do other things.

Regards, Michael

2 Likes