Ik heb de volgende framegrabber gemaakt om een beeldje van een webcam op te halen m.b.v. Video4Linux (daarbij gebruik makend van JMF):

Heeft iemand enig idee waarom dat grabben via JMF zo traag gaat?
Java:
Nu heb ik de tijd gemeten die het kost om de method grab() uit te voeren, en dat is zo'n 320 ms gemiddeld. Dit betekent dat je zo'n 3 frames per seconde zou kunnen grabben. Ik vind het vreemd dat dit zo lang duurt. Eerst grabte ik namelijk met een tooltje (streamer). Dat liet ik een bestand wegschrijven en dat bestand las ik dan weer in in m'n Java-programma. Allemaal superomslachtig natuurlijk, maar dat ging ongeveer net zo snel 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
| // Imports // ... public class FrameGrabber { private FrameGrabbingControl frameGrabber; private Player player; public FrameGrabber() { // Create capture device CaptureDeviceInfo deviceInfo = CaptureDeviceManager.getDevice("v4l:BT878(Hauppauge (bt878)):0"); try { player = Manager.createRealizedPlayer(deviceInfo.getLocator()); } catch(Exception e) {} player.start(); // Wait a few seconds for camera to initialise (otherwise img==null) try { Thread.sleep(500); } catch(Exception e) {} // Grab a frame from the capture device frameGrabber = (FrameGrabbingControl)player.getControl("javax.media.control.FrameGrabbingControl"); } public BufferedImage grab() { Buffer buf = frameGrabber.grabFrame(); // Convert frame to an buffered image so it can be processed and saved Image img = (new BufferToImage((VideoFormat)buf.getFormat()).createImage(buf)); BufferedImage buffImg = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB); Graphics2D g = buffImg.createGraphics(); g.drawImage(img, null, null); return buffImg; } public void close() { // Stop using webcam player.close(); player.deallocate(); } } |
Heeft iemand enig idee waarom dat grabben via JMF zo traag gaat?