I owe you guys an apology (though the "caching
issue" sounds scary). I found one other area of code that was FCP only
(re-extracting the fields to half height buffers) and discovered a bug.
Everything is now basically working as expected. Though this discussion
did make me consider one last test to try that led to this discovery, sorry
about crying wolf and assuming it was a host problem.
When in doubt, the host is busted!!!! Not
really.
Thanks guys,
Micah
----- Original Message -----
Sent: Thursday, November 29, 2007 1:55
PM
Subject: Re: creating interlaced
frames
By the way
Michah, are you trying to access fields from interlaced material from within
a sequence that has field separation turned off? If so, this is known
to be broken.
That's correct. In FCP, if your sequence is set to progressive,
then you won't be able to access individual fields, even if the source media
is interlaced. This is a known issue that we hope to fix soon.
There's also a caching issue that Pete L mentions, where if you start
with a progressive sequence, then switch it to interlaced, the TemporalAPI
will still act as if the sequence is progressive. You'll have to save
the project and restart Final Cut to get the caching to notice that things
have changed. These two bugs can add up to a pretty confusing experience
if you don't know what to watch out for.
Micah, if you could specify your project and media settings, and how the
results of the TemporalAPI look suspect, that would help us track it
down. If it makes it easier, you can send me an FCP project (I don't
need the media).
- Paul
On Nov 29, 2007, at 2:12 PM, Peter Litwinowicz wrote:
By the way Michah, are you trying to access
fields from interlaced material from within a sequence that has field
separation turned off? If so, this is known to be broken.
To
Paul, We are not the only ones who want proper access to fields. Can
you convince your higher-ups to allow you to fix
this? Pete
Good question, haven't tried in Motion, only
FCP. When I mean "off" this is compared to doing the same thing in
AE, then applying our algorithm to the 3 inputs. In AE the result is
great, in FCP the result is not so great, and the results seems shifted by
a couple fields. What we are doing is a deinterlacer btw, so the
real "off" means not perfectly smoothly deinterlaced, but in AE it
is. All else should be equal, the code is completely shared
otherwise except for the different methods of retrieving the temporal
inputs between FCP and AE. Thus I was wondering if maybe I'm
in-correctly creating my own interlaced frames (AE gives me full
frames).
Any thoughts are
appreciated.
Micah
On Nov 29, 2007, at 10:20 AM,
Darrin Cardani wrote:
Micah, What you have below looks correct to
me. When you say that you are "seeing some results that somewhere my
fields are slightly off," in what way are they off? Just curious - what
do you see when running it in Motion?
Darrin
On Nov 28,
2007, at 4:56 PM, Micah Sharp wrote:
Hey guys, I know we talked at one point about
a technique that could be used with temporal bitmaps to create our own
interlaced frames. I am doing this but seeing some results that
somewhere my fields are slightly off. Could you confirm if this
code makes sense? I am getting the previous frame, the current
frame, and the next frame. I am using it in an NTSC sequence, so
assuming lower field dominance in some places for now, but I'm
quite sure the renderInfo.fieldOrder is indeed lower field
dominant.
The "makeFull()" function creates a new double height
bitmap and takes the first bitmap and copies it into every other
line starting at 1, where then 2nd bitmap is copied into every other
line starting at line 0 (thus the lower field
assumption).
id temporalAPI; temporalAPI = [_apiManager
apiForProtocol:@protocol(FxTemporalImageAPI)];
///////////////////////////////////////
double before = (long)(renderInfo.frame-1); double
after = (long)(renderInfo.frame+1); double
current = (long)(renderInfo.frame);
FxBitmap *prev1 = NULL; FxBitmap *prev2 = NULL; FxBitmap *now1 = NULL; FxBitmap *now2 = NULL; FxBitmap *next1 = NULL; FxBitmap *next2 = NULL;
[temporalAPI getInputBitmap:(FxBitmap
**)&prev1 withInfo:
renderInfo atTime:before];
[temporalAPI getInputBitmap:(FxBitmap
**)&prev2 withInfo: renderInfo atTime:before+.5];
[temporalAPI getInputBitmap:(FxBitmap
**)&now1 withInfo:
renderInfo atTime:current];
[temporalAPI getInputBitmap:(FxBitmap
**)&now2 withInfo: renderInfo atTime:current+.5];
[temporalAPI getInputBitmap:(FxBitmap
**)&next1 withInfo:
renderInfo atTime:after];
[temporalAPI getInputBitmap:(FxBitmap
**)&next2 withInfo: renderInfo atTime:after+.5];
FxBitmap *prevFull = makeFull( prev1, prev2
); // lower first FxBitmap *nowFull =
makeFull( now1, now2 ); // lower
first FxBitmap *nextFull = makeFull( next1, next2 ); // lower
first
///////////////////////////////////////
Any help is appreciated.
Thanks,
-- Darrin Cardani email@hidden
_______________________________________________ Do
not post admin requests to the list. They will be ignored. Pro-apps-dev
mailing list (email@hidden) Help/Unsubscribe/Update
your Subscription: email@hidden
_______________________________________________
Do not post admin requests to the list. They will
be ignored.
Help/Unsubscribe/Update your Subscription:
_______________________________________________ Do not post admin
requests to the list. They will be ignored. Pro-apps-dev mailing
list
(email@hidden) Help/Unsubscribe/Update your
email sent to email@hidden
|