HeartlessS Usurer
Join Date: Dec 2009
Location: Over the rainbow
Posts: 10,980
|
Post #5 of many
Create SCAN DBase {PART_2, (too big)}
Code:
# Rescan to do Fadeout->FadeIn Scene Changes : Set only EOSix @ Start frame/record of Scene Change, and ALSO FLGS
(DEBUG) ? RT_DebugF("ReScan for Fade-to-Black SceneChanges:",name=myName) : NOP
for(n=0,FC-1) {
Start = n # SOSix for this scene
End = RT_DBaseGetField(ScanDB,Start,1) # EOSix for this scene
Len = End-Start+1
if(Len >= Max(dMinLen*2,24)) {
# Start and End with YPlaneMinMaxDifference >= 16
if(RT_DBaseGetField(InfoDB,Start,2) >= 16 && RT_DBaseGetField(InfoDB,End,2) >= 16) {
for(j=Start+dMinLen,End - dMinLen) {
mnmxdf=RT_DBaseGetField(InfoDB,j,2)
if(mnmxdf <= 6-2) { # 4 or below FADEOUT, 4->6 no mans land (still faded)
je=j
for(k=j+1,End-dMinlen) { # Hunt fade end, No mans land(4->6), remains faded
mnmxdf=RT_DBaseGetField(InfoDB,k,2) # YMinMaxDiff
if(mnmxdf <= 6-0) {
je=k # still fade
} else {
k=End # Not faded any more
}
}
m = (j + je) / 2 # middle faded frame (approx)
if(m < End - dMinLen) {
RT_DebugF("%d ] FADE SCENECHANGE @ %d",n,M,name=myName)
FLGS=RT_DBaseGetField(ScanDB,m-1,4)
RT_DBaseSetField(ScanDB,m-1,4,RT_BitOR(FLGS,$00008000)) # EOSix of prev scene FLGS set to Reason=Fade-To-Black
RT_DBaseSetField(ScanDB,Start,1,m-1) # Adjust EOSix @ Start Frame
Start=m # New Start frame
RT_DBaseSetField(ScanDB,Start,1,End) # Adjust End @ NEW Start Frame
}
# Retry for another FADE SceneChange in original scene
je = Max(m+dMinLen,je)
for(k=je+1,End-dMinLen) { # Scan till MinMaxDif(je+1) is above 16+Leeway
mnmxdf=RT_DBaseGetField(InfoDB,k,2)
if(mnmxdf >=16+8) {
(DEBUG) ? RT_DebugF("%d ] FADE SCENECHANGE RETRY SCAN @ %d",n,je+1,name=myName) : NOP
k=End
} else {
je=k
}
}
j = je # j = je + 1 at next iteration, next frame RETRY scan
}
}
}
}
n = End # End + 1 at next iteration
}
# At this point only EOSix at start of scene frame set, AND ALSO reason FLGS for Last frame of scene
(DEBUG) ? RT_DebugF("Writing Full SceneChange DBase Data",name=myName) : NOP
SceneNo=-1 # Write Scene Number (Zero Relative)
FLGS = 0
for(n=0,FC-1) {
Start = n
End = RT_DBaseGetField(ScanDB,Start,1)
SceneNo = SceneNo + 1
(DEBUG) ? RT_DebugF("%d] START=%d End=%d SceneNo=%d",n,Start,End,SceneNo,name=myName) : NOP
# SOSix, EOSix, Type(1=SOS,2=EOS,3=SOS+EOS,0=non), SceneNo(Zero Rel), FLGS
for(j=Start,End) { # Leave Reason FLGS intact
RT_DBaseSetField(ScanDB,j,0,Start)
RT_DBaseSetField(ScanDB,j,1,End)
RT_DBaseSetField(ScanDB,j,2,0)
RT_DBaseSetField(ScanDB,j,3,SceneNo)
}
RT_DBaseSetField(ScanDB,Start,4,FLGS) # Rewrite FLGS from previous EOS
RT_DBaseSetField(ScanDB,Start,2,1) # Rewrite Type, Start Of Scene
Type = (Start==End) ? 3 : 2 # Single frame scene at last frame ? (SOS & EOS)
RT_DBaseSetField(ScanDB,End ,2,Type) # ReWrite Type, End Of Scene
FLGS = RT_DBaseGetField(ScanDB,End,4) # Current scene FLGS, next time Prev scene FLGS
n = End # Next iteration n = End + 1
}
RT_DBaseSetID(ScanDB,0,DBSC_Str2ID("DBSC"))
RT_DBaseSetID(ScanDB,1,DBSC_Str2ID("SCAN"))
RT_DBaseSetID(ScanDB,2,Width)
RT_DBaseSetID(ScanDB,3,Height)
RT_DBaseSetID(ScanDB,4,DBSC_ColorSpaceIx())
nAttribs=RT_DBaseGetAttrib(ScanDB,-1)
RT_DBaseSetAttrib(ScanDB,nAttribs-1,Matrix)
RT_DBaseSetAttrib(ScanDB,nAttribs-2,ChromaWeight)
RT_DBaseSetAttrib(ScanDB,nAttribs-3,Thresh)
RT_DBaseSetID(ScanDB,5,dFact)
RT_DBaseSetID(ScanDB,6,dMinim)
RT_DBaseSetID(ScanDB,7,dMinLen)
RT_DBaseSetID(ScanDB,8,dCorr)
RT_DBaseSetID(ScanDB,9,DupTh)
RT_DBaseSetID(ScanDB,10,POV)
RT_DBaseSetID(ScanDB,11,dFlashFrames)
} Else {
(DEBUG) ? RT_DebugF("SCScan DBase Recycled '%s'",ScanDB,name=myName) : NOP
}
T = RT_TimerHP - START_TIME
(DEBUG) ? RT_DebugF("Total Time taken = %.2f Seconds (%.2f Mins)",T,T/60.0,name=myName) : NOP
""")
}
Last edited by StainlessS; 4th February 2015 at 07:54.
Reason: Update
|