View Single Post
Old 4th January 2015, 04:28   #5  |  Link
StainlessS
HeartlessS Usurer
 
StainlessS's Avatar
 
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 
    """)
}
__________________
I sometimes post sober.
StainlessS@MediaFire ::: AND/OR ::: StainlessS@SendSpace

"Some infinities are bigger than other infinities", but how many of them are infinitely bigger ???

Last edited by StainlessS; 4th February 2015 at 07:54. Reason: Update
StainlessS is offline   Reply With Quote