def main():
    print "main"
    
    #num_processorhandlers = min(1,mproc.cpu_count-1)
    num_workhandlers = 2
    
    # set up data pipes and queue
    result_queue = mproc.Queue()
    datapipes = [mproc.Pipe(False) for i in xrange(num_workhandlers)]
    
    h_input = H.InputHandler(
                [datapipes[i][1] for i in xrange(num_workhandlers)],
                [inpSFG.inpSimpleFrameGrabber()])
                 
    h_work = [H.WorkerHandler(
                    datapipes[i][0], result_queue, [wrkDev.wrkDev()])
                for i in xrange(num_workhandlers)]
                
    waittime = [0,0]
    for i, handler in enumerate(h_work):
        handler.setup(waittime[i])
                
    h_output = H.OutputHandler(result_queue, [outSD.outSimpleDisplay()])
    processes = list([h_input, h_output])
    processes.extend(h_work)
    
    # start all the processes
    [p.start() for p in processes]
    
    #h_input.start()
    #h_output.start()
    #h_work[0].start()
    
    
    # cleaning up
    h_input.join() #close the input handler
    [handler.join() for handler in h_work] #wait for the workers to finish
    h_output.join() #wait for ouput to finish writing
    result_queue.close() #close the 
    result_queue.join_thread()
"""

import time
import cv2

import plugins.inpSimpleFrameGrabber as inpSFG
import plugins.inpAveragingFrameGrabber as inpAFG

import plugins.wrkNull as wrkNull
import plugins.wrkInvert as wrkInv
import plugins.wrkEdgeFit as wrkEdge

import plugins.outSimpleDisplay as outSD
import plugins.outHistogram as outHG

inp = inpSFG.inpSimpleFrameGrabber()
inp1 = inpAFG.inpAveragingFrameGrabber()

#wrk0 = wrkNull.wrkNull()
#wrk1 = wrkInv.wrkInvert()
wrk2 = wrkEdge.wrkEdgeFit()

out0 = outSD.outSimpleDisplay() #display orginal
out1 = outSD.outSimpleDisplay() # display brighened orignal with edges overlay in red
out2 = outHG.outHistogram()




inp.setup()
inp1.setup()