Advertisement
If you have a new account but are having problems posting or verifying your account, please email us on hello@boards.ie for help. Thanks :)
Hello all! Please ensure that you are posting a new thread or question in the appropriate forum. The Feedback forum is overwhelmed with questions that are having to be moved elsewhere. If you need help to verify your account contact hello@boards.ie

Hit a hardware limitation with java

Options
  • 30-06-2015 2:39pm
    #1
    Closed Accounts Posts: 431 ✭✭


    Made a simple screen recording program and it only runs the loop as fast as it can process here the code: http://pastebin.com/S1k7j9mV
    Anyone help me out think i need to use more threads.


Comments

  • Registered Users Posts: 7,500 ✭✭✭BrokenArrows


    You're plan is to write out a PNG image to the disk every 1 second and you have hardcoded a delay of 1 second.

    That is a very inefficent way of doing things. Even if you hadnt hardcoded the 1 second delay it would be very ineffecient.

    A quick google gave me this project. http://code.google.com/p/java-screen-recorder/ Maybe have a read through the code and it will give you some ideas.

    Png. If you want to stick to the PNG capture method you should be converting this PNG to a compressed video stream and saving the video to the disk. The conversion to video should be done on a separate thread so it doesnt slow down the capture loop.


  • Registered Users Posts: 11,977 ✭✭✭✭Giblet


    File IO should be async or use a different thread if possible.
    I'm not sure about Java and IO Completion ports though to get "true" async, I'm sure there's a library somewhere. You should also have a buffer to store x frames and reduce writes to disk anyway.


  • Closed Accounts Posts: 431 ✭✭whats newxt


    I want the images to be in .png format as an image sequence not a video


  • Registered Users Posts: 7,500 ✭✭✭BrokenArrows


    I want the images to be in .png format as an image sequence not a video

    Ok so your requirement is to have a image sequence.
    How many images do you want per second. ie. Your framerate?

    The overhead involved in writing that many files to the disk of that size is unavoidable. Its going to slow down your system.

    I just write a quick program in C# to take a screenshot and save to the disk. I managed to get about 24 images per second using 18% cpu but my disk access went a bit crazy.


  • Closed Accounts Posts: 431 ✭✭whats newxt


    Ok so your requirement is to have a image sequence.
    How many images do you want per second. ie. Your framerate?

    The overhead involved in writing that many files to the disk of that size is unavoidable. Its going to slow down your system.

    I just write a quick program in C# to take a screenshot and save to the disk. I managed to get about 24 images per second using 18% cpu but my disk access went a bit crazy.

    I need 15 frames a second, was thinking of rewriting it using python to be honest. I know little to nothing about threads


  • Advertisement
  • Registered Users Posts: 7,500 ✭✭✭BrokenArrows


    I need 15 frames a second, was thinking of rewriting it using python to be honest. I know little to nothing about threads

    Out of curiosity what are you planning to do with the images? Maybe someone can think of a better option for you.


  • Closed Accounts Posts: 431 ✭✭whats newxt


    So i redid it with python and still have the same problem, it's faster but not 15 FPS fast. Is it just my hardware or what. old i3 on a fairly rubbish laptop. Anyway here the code:
    import gtk.gdk
    import time
    
    i = 0
    
    print "  ________ _______    _____    "
    print " / ____/  |  \__  \  /     \   "
    print "< <_|  |  |  // __ \|  Y Y  \  "
    print " \__   |____/(____  /__|_|  /  "
    print "    |__|          \/      \/   "
    print "    |__|          \/      \/   "
    print "Screen recorder GNU - GPL V3"
    
    while True:
    
        
        i += 1
        w = gtk.gdk.get_default_root_window()
        sz = w.get_size()
        print "FRAME: %d OK!"%i 
        pb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False,8,sz[0],sz[1])
        pb = pb.get_from_drawable(w,w.get_colormap(),0,0,0,0,sz[0],sz[1])
        pb.save("Capture %d"%i,"png")
        
      
    
    


  • Closed Accounts Posts: 431 ✭✭whats newxt


    Oh, i see changing to jpeg gives me more that 15 frames a second approx 40/50. Thanks for your help though. I guess .png holds alot more data.


Advertisement