6D: FPS override creating mangled colors

Issue #1975 resolved
Ed Halley created an issue

I am fairly new to this camera (upgrade from 5D classic), and to ML in general, but since all my attempts at video capture without ML/FPS override were working normally, I am raising the issue against ML/FPS override.

I tried taking some timelapse videos today. With only the "Simple" settings for FPS override, I chose 2fps and 4fps options, and attempted to engage the movie capture.

On screen, the colors were bad. After reviewing videos on camera and off, the colors were bad. It took several cycles of starting/stopping the video capture (no settings changes) before the camera figured out the exposure and started collecting good video.

Attached are two attempts that showed bad color behavior, with no exposure settings changes. Note the more normally colored one still has some pink banding and green-heavy color in the foreground. After 1sec of greenish video, it finally settled down and caught better frames.

Comments (11)

  1. Alex

    This one requires somebody with a 6D to sit down and try it.

    Can you try to figure out if there are some maximum safe values for the two timers? (try adjusting them manually and see if there is some consistent value where the image breaks).

    Also, TL has different values for FPS timers, but the differences are on the high FPS side. Still, would be great if somebody could check these differences, and create a pull request if the new values are better.


  2. Ed Halley reporter

    So I don't completely understand the Timer 1, Timer 2. I generally get the idea that the virtual shutter can't be 100% of the time between the start of one frame and the start of the next, and that these values drive the curtain timing to dump and scan data at each curtain. I just don't understand how any end-user is going to be able to calculate these values.

    For example, at 15 fps currently I see timers of A = 520 (-26), B = 3282 (x2.09). I have no idea what these mean mathematically.

    Most of the time, Timer 1 and Timer 2 end up as 0 after I've dialed in a desired FPS. The Desired FPS often reads "15 (from 0)" and the main screen shows "FPS override 0.000" even if I choose a sensible number. Plenty of bugs in the menu here.

    If I go into movie mode with less than ~18 fps, then the screen will go full black, full white, full black, and sometimes slowly recover and find some kind of exposure. It's as if the sensor gets saturated.

    I will try to borrow a second camera with some kind of video to show the screen behaviors here.

  3. Audionut

    I don't think the idea was to understand the timers, or any care for end-users being able to understand the maths.

    I think the idea was for someone with a 6D, to find some maximum safe values for the two timers. Finding image timer values where the image consistently breaks. This way, someone who can do the maths, can fix the problems you describe, based on the feedback you give.

    On my 5D3, after selecting a Desired FPS, I can then open the advanced section, and manually adjust the timers to get different Actual FPS.

    a1ex doesn't have a 6D. So to fix problems on a 6D, the best he can do, is ask people to test things for him.

  4. Alex

    The math is nothing more than fps = main clock / timer1 / timer2 (and it's described in the help). The more complex stuff is when it comes to the side effects of modifying these timers (like new shutter speeds or rolling shutter effects).

    The only code paths that can print "from 0" are:

    • if you use the menu outside LiveView
    • or if fps_timer_a_orig / fps_timer_b_orig have astronomical values.

    You can rule out the second condition with a screenshot of the menu (it prints the current timer values and the delta from the originals).

    In your example of A = 520 (-26), B = 3282 (x2.09), it means A is now 520 and default Canon value is 546, and B is now 3282 and default value is around 1570. Therefore, you were doing this test at 30fps (because the main clock is 25.6 MHz), and the default timer B should be most likely 1563/1564. On these cameras, it's not possible to get exactly 29.976 fps, so Canon flips between the two values to get the desired FPS averaged in the long run.

  5. Ed Halley reporter

    Due to issue #1974, the settings can only be adjusted outside of Live View / movie mode.


    I'm not understanding your "therefore" statement since the screen shows Desired FPS = 15, but you suggest 30. I plugged 25.6e6 / 520 / 3282 into a calculator and get 15 FPS, which matches what I show in the screenshot. If I understand you, then the parenthetical numbers are the delta from my prior settings, so I enter 25.6e6 / (520+26) / (3282/2.09) and I get "from 29.857 FPS".

    Again, it's easy to say the math is fps = clock / A / B, but not many people looking at a majestic landscape scene are going to recall their algebra to solve this system of two equations to get new values for A and B that might solve the problem.

    That sounds snarky, but I'm not trying to be. Perhaps this disconnect is the source of the bug that's plaguing the low fps video on 6D.

  6. Alex

    The normal use case is to simply dial the desired FPS and it would just work.

    Now we are trying to solve the bug, not looking at landscapes. If you want to solve it without understanding the internals, be my guest.

  7. Ed Halley reporter

    I'm trying to help you with info here, but I'm saying the interface isn't conducive.

    So your original request is to see what the highest numbers appear to be safe. It doesn't appear to be a matter of whether the Timer A number is high or low. Anything below Desired 17 FPS results in a whiteout at the end of recording, and a slow recovery by the camera. Since the way the A numbers go up and down, offset by a B number, it doesn't appear to be due to a higher or lower value of A that drives the problem.


    I would have entered A=600, B=2130 to get an alternative way of achieving Desired 20 FPS, but the user interface doesn't work like that. I can't just enter a 600. If I select Timer A, and it's already 520, then the choices start working with "520 (FT+1)" or "520 (FT-1)". I don't see how to enter a specific value, or what constitutes a higher value.

    (Also, dialing in a new Desired FPS does not immediately update the Timer A and Timer B fields. You have to go out of the menus, go back to movie mode, and record a couple seconds of video, and go back to picture mode, and go back through the menus, just to see what it chose for A and B.)

  8. One Percent

    2 and 4 FPS are bad places to be in all honesty. Anything below 6 has problems. Sensor defects show, vertical banding, etc.

    But a few things are happening here... aggressive update is on in the ML repo and this causes problems. Zoom/non zoom is sometimes improperly detected and you get the FPS timer values for the wrong mode (ie the pink screen). I think some of this is from the scattered updating of values, if you look at my FPS-engio.c I combined them into a function, it updates all values at the same time.

    Also: #ifdef CONFIG_DIGIC_V / we need to do the magic from timer A... / timerA_max = FPS_TIMER_A_MAX; #endif

    is I think a leftover from when digicV was timer A only.

  9. Log in to comment