CasparCG / server

CasparCG Server is a Windows and Linux software used to play out professional graphics, audio and video to multiple outputs. It has been in 24/7 broadcast production since 2006. Ready-to-use downloads are available under the Releases tab https://casparcg.com.
GNU General Public License v3.0
911 stars 268 forks source link

Smooth and jerky animations in 2.1.0 #600

Closed elanvrt closed 6 years ago

elanvrt commented 7 years ago

I wonder if anybody noticed it, but this looks like a major setback in animation quality for all 2.1.0 versions.

As most broadcast people do, I run CasparCG in 1080i5000 mode. When issuing any animating mixer command with a duration >0, animation is always in frame mode (25fps) while it should be in field mode (50fps). This happens with both still images and video clips in paused mode, but NOT when the clip is playing. Then the animation is smooth 50fps, as it should be.

The effect is easy to reproduce. Load any clip in layer 1, then use a command MIXER 1-1 FILL 0 0 0.2 0.2 50 to make it smaller. Now send the command MIXER 1-1 FILL 0.8 0.8 0.2 0.2 50 to make it move to the opposite corner.

Notice the film-effect animation when the clip is paused and the smooth animation when the clip is paused.

I noticed this in all 2.1.0 versions up to beta2. My system is windows 7 x64, output on Decklink 4K pro or Bluefush Epoch Create

The issue also occurs in 1080i5994 and 1080i6000 modes. The issue does NOT occur with the 2.0.7, there all animations are correctly 50fps, still or playing.

Chris

HellGore commented 7 years ago

It is the is_still handling that causes this. If you remove the if statement at https://github.com/CasparCG/Server/blob/2.1.0/accelerator/ogl/image/image_mixer.cpp#L101 this issue is resolved, but then new jitter removal in 2.1 doesn't work anymore. Maybe there is a way to make both work.

elanvrt commented 7 years ago

The comment below this line reads: // Remove jitter from still.

But a layer in motion is not really a still. So maybe the solution is to extend this if statement with some sort of "&& LayerIsNotInMotion" condition, so the jitter removal only works when the layer is actually standing still.

It may show unwanted transition effects in very slow animations of interlaced footage, but an improvement it would definitely be.

I always enable ffmpeg's yadif filtering for de-interlacing when any transformation is needed, I assume this simple jitter removal is not the same thing.

elanvrt commented 7 years ago

Tested with build 2.1.0.3440 and okay. Thanks a lot for the quick fix.