DGDecomb

These CUDA filters are packaged into DGDecodeNV, which is part of DGDecNV.
User avatar
admin
Site Admin
Posts: 4449
Joined: Thu Sep 09, 2010 3:08 pm

Re: DGDecomb

Post by admin »

I was playing around trying to fix the VPP one-frame delay for bobbing and nothing was working but then I decided to try something off-the-wall and shockingly it worked to flush the VPP and fully correct random access:

Code: Select all

	// Frame is on GPU and everything configured at this point.
	err = cuvidMapVideoFrame(cuDecoder, 0, &outPtr, &_pitch, &vpp);
	if (err != CUDA_SUCCESS)
		env->ThrowError("PVBob: could not run the VPP");
	if (vpp.second_field == 1)
	{
		// This is found heuristically to solve the VPP one-frame delay problem.
		cuvidUnmapVideoFrame(cuDecoder, outPtr);
		vpp.second_field = 0;
		err = cuvidMapVideoFrame(cuDecoder, 0, &outPtr, &_pitch, &vpp);
		if (err != CUDA_SUCCESS)
			env->ThrowError("PVBob: could not run the VPP");
	}
	// Postprocessed frame gets copied back to CPU at this point.
I also found a way to reduce the GPU<-->CPU traffic, increasing the frame rate by 50fps for 1920x1080. I'll regression test a bit and then slip-stream it. I will look into applying this fix to DGIndexNV and DGSource(deinterlace=2). It's not clear that it can be applied directly.
User avatar
hydra3333
Moose Approved
Posts: 214
Joined: Wed Oct 06, 2010 3:34 am
Contact:

Re: DGDecomb

Post by hydra3333 »

admin wrote:I was playing around trying to fix the VPP one-frame delay for bobbing and nothing was working but then I decided to try something off-the-wall and shockingly it worked to flush the VPP and fully correct random access.

I also found a way to reduce the GPU<-->CPU traffic, increasing the frame rate by 50fps for 1920x1080. I'll regression test a bit and then slip-stream it. I will look into applying this fix to DGIndexNV and DGSource(deinterlace=2). It's not clear that it can be applied directly.
Crikey, Charlie ! Nice going.
User avatar
admin
Site Admin
Posts: 4449
Joined: Thu Sep 09, 2010 3:08 pm

Re: DGDecomb

Post by admin »

No bodgy code for me. Don't want to come a gutser.
User avatar
admin
Site Admin
Posts: 4449
Joined: Thu Sep 09, 2010 3:08 pm

Re: DGDecomb

Post by admin »

I figured out how to make the fix work for DGIndexNV and DGSource(deinterlace=2). I'll do some thorough testing before slipstreaming it.
User avatar
gonca
Curly Approved/Moose Approved
Posts: 956
Joined: Sun Apr 08, 2012 6:12 pm

Re: DGDecomb

Post by gonca »

Just keeps getting better and better
DAE avatar
Sharc
Moose Approved
Posts: 231
Joined: Thu Sep 23, 2010 1:53 pm

Re: DGDecomb

Post by Sharc »

Seems like I have a blackout, but how can I IVTC a 59.94 telecined 25fps source using DGTelecide() and DGDecimate() such as to get the 25.00 fps progressive source back?
(I think the 59.94 telecined material is 3:2:3:2:2 telecined)
User avatar
admin
Site Admin
Posts: 4449
Joined: Thu Sep 09, 2010 3:08 pm

Re: DGDecomb

Post by admin »

Please post a sample. There are too many uncertainties in your post to comment yet.
DAE avatar
Sharc
Moose Approved
Posts: 231
Joined: Thu Sep 23, 2010 1:53 pm

Re: DGDecomb

Post by Sharc »

Here is a sample (sorry for the confusion, I meant a 25 => 29.97 telecined source, not 59.94)
http://www.mediafire.com/file/by4ykayn2dmotwx/ma_30i.ts
User avatar
admin
Site Admin
Posts: 4449
Joined: Thu Sep 09, 2010 3:08 pm

Re: DGDecomb

Post by admin »

This script makes the video 25 fps.

dgsource("C:\Users\Don\Downloads\ma_30i.dgi")
dgtelecide()
dgdecimate(cycle=6,keep=5) # makes 24.975 fps
assumefps(25)

The stream has no audio, so I could not assess whether the 24.975 vs. 25 will be an issue. Worst case, you may need to shrink the audio a bit, or leave it at 24.975 if your target format accepts that.
DAE avatar
Sharc
Moose Approved
Posts: 231
Joined: Thu Sep 23, 2010 1:53 pm

Re: DGDecomb

Post by Sharc »

Thanks! I came to the exactly same conclusion with my experiments, but I thought I might have missed something. So there is no "direct route" for IVTCing this by field matching plus m by n decimation to hit the 25.00fps

Actually, it is not a real problem. I just bumped across it when I converted a 25p (deinterlaced mpeg2 PAL 25i home video) to 29.97i using good old DGPulldown, and encoding it to AVC (x264). When inspecting the hard-telecined alternating 3p-3c-3p-3c ... and 4p-2c-4p-2c... pattern every about 100 frames (p=clear, c=combed frame) I wondered how the heck to IVTC this properly. :o
User avatar
admin
Site Admin
Posts: 4449
Joined: Thu Sep 09, 2010 3:08 pm

Re: DGDecomb

Post by admin »

For your 29.97 fps file of 1524 frames, there is no choice of M and N that exactly gives 25.000 fps. You can get a little closer to it with TDecimate because TDecimate allows a cycle up to the size of the file. For example, this gives 25.014 fps:

tdecimate(cycleR=252,cycle=1524)

The problem really arises because pulldown from 25 to 29.97 cannot exactly hit 29.97 unless the number of frames is very large. As long as you decimate the added fields then assumefps(25) will recreate the original file.
DAE avatar
Sharc
Moose Approved
Posts: 231
Joined: Thu Sep 23, 2010 1:53 pm

Re: DGDecomb

Post by Sharc »

Ah I see, very clear. We can't take the total frame number out of the equation. Thank you.
User avatar
admin
Site Admin
Posts: 4449
Joined: Thu Sep 09, 2010 3:08 pm

Re: DGDecomb

Post by admin »

You're welcome, Sharc. It's always my pleasure to discuss interesting problems with you.
Post Reply