begin process at 2008 05 16 04:42:51
1 173 215 membres
57 nouveaux aujourd'hui
13 970 membres club

Vous ne trouvez pas de réponse ŕ votre problčme ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bęte, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

WEBCAM LIB, VIDEO FOR JAVA, API JAVA JNA POUR AVICAP.DLL, MSVFW.DLL, VFW.H


Information sur la source

Catégorie :Api Classé sous : webcam, avicap, JNA, vwh, vidéo window Niveau : Débutant Date de création : 13/02/2008 Date de mise ŕ jour : 24/02/2008 17:43:04 Vu / téléchargé: 4 359 / 189

Note :
Aucune note

Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note


Description

"Certaines webcams (Philips SPC520NC...) ne fonctionnent pas avec JMF", dont la mienne, d'après ce constat j'ai réalisé une librairie utilisant du code natif via JNA basée sur avicap.dll et vfw.h.

Cette librairie fonctionnant exclusivement sous win32 permet d'accéder et de communiquer avec le driver d'une ou plusieurs webcam.
Aussi pas moyen à l'heure actuelle de l'intégrer avec AWT ou Swing, seulement avec la SWT.
Le développement continue...

Je me suis basé sur la description de Video For Window dont la doc est disponible ici : http://msdn2.microsoft.com/en-us/library/ms712699%28VS.85%29.aspx

La classe org.hypik.webcamlib.DeviceManager permet de lister tous les drivers installés en renvoyant des instances de org.hypik.webcamlib.device.Device.
Cette dernière propose une API permettant de:
- Créer la fenêtre de la webcam avec les différents styles possibles,
- Se connecter à la webcam,
- Demander à la webcam de copier la frame courante dans le presse-papier,
- Se déconnecter,
- De s'aboner aux erreurs renvoyées par la webcam,
- De s'abonner aux messages de status,
- De s'abonner à chaque frame affichées,
- De récupérer une frame,
- Détruire la fenêtre,
- D'ouvrir les boites de dialogues de configuration proposées par le driver,
- De dispatcher les messages du système vers la fenêtre de la webcam si on utilise pas la SWT ( marche pas avec AWT/Swing)

Le package org.hypik.webcam.compressor permet de décompresser une frame dans un certain format vers un autre. L'api permet de:
-Lister tous les décompresseurs disponible,
-Recherche un décompresseur pour un format d'entrée vers un format de sortie,
-Bien sur de décompresser une frame,

Je vous propose trois classes de tests (Simple, SWT et AWT) pour bien prendre en main la librairie.
Elles peuvent être lancées directement en renommant les fichiers contenu dans bin en .bat.
Pour le test utilisant la swt il vous faut la librairie disponible sur http://www.eclipse.org/swt/

Ci-dessous le code du simple test.

J'espère pouvoir faire évoluer cette librairie rapidement.
Vos retours/suggestions sont les bienvenus.
NB: Toutes mes excuses au pingouin mais j'ai pas le courage de me pencher sur video4linux.
Pierrick Hymbert

Source

  • /**
  • * Webcam Library, version 1.2
  • * The easiest way to manage webcam devices in java.
  • * (c) 2008 Pierrick HYMBERT <pierrick.hymbert@gmail.com>
  • * This library is "PROVIDED AS IS" without guaranty of any kinds.
  • * Webcam Library is freely distribuable under the terms of an MIT-style license.
  • * Visit www.hypik.fr
  • */
  • package org.hypik.webcamlib.test.sample;
  • import java.util.List;
  • import org.hypik.webcamlib.DeviceManager;
  • import org.hypik.webcamlib.device.Device;
  • import org.hypik.webcamlib.device.IWS;
  • import org.hypik.webcamlib.device.listener.DeviceErrorListener;
  • import org.hypik.webcamlib.device.listener.DeviceStatusListener;
  • import com.sun.jna.Native;
  • /**
  • * This class have only a main method to start all webcam devices found in a webcam preview window.
  • * @author Pierrick Hymbert <a href="mailto:pierrick.hymbert@gmail.com">Contact</a>
  • *
  • */
  • public class SimpleTest {
  • /**
  • * Start all webcam devices found in a webcam preview window
  • * @param args N/A
  • */
  • public static void main(String[] args){
  • // Prevent VM crash
  • Native.setProtected(true);
  • // List all devices
  • List<Device> devices = DeviceManager.getAllDevices();
  • try {
  • // Print all device driver name and version
  • for (Device device : devices) {
  • System.out.println("Found: " + device);
  • }
  • } catch (Exception e) {
  • e.printStackTrace();
  • }
  • // Check if at least one device is found
  • if( devices.size() == 0 ){
  • System.err.println("No device found.");
  • System.exit(0);
  • }
  • // Start all webcam preview
  • int x = 0, y = 0;
  • for (Device device : devices) {
  • // Add the listeners
  • device.addDeviceErrorListener(errorListener);
  • device.addDeviceStatusListener(statusListener);
  • // Show preview
  • device.showPreview(x, y, 300, 300, IWS.WS_OVERLAPPEDWINDOW | IWS.WS_VISIBLE, device.getName(), 0, 0);
  • x += 320;
  • if( x > 800 ){
  • x = 0;
  • y += 320;
  • }
  • }
  • // Run all devices loop
  • int deviceDisposed = 0;
  • while( deviceDisposed < devices.size()){
  • deviceDisposed = 0;
  • for (Device device : devices) {
  • if( !device.isDisposed() ){
  • device.readAndDispatch();
  • }else{
  • deviceDisposed++;
  • }
  • }
  • }
  • System.exit(0);
  • }
  • /**
  • * The device error listener.
  • */
  • private static DeviceErrorListener errorListener = new DeviceErrorListener(){
  • /**
  • * Fire the listener that the device throws an error message.
  • *
  • * @param device
  • * The device in error state.
  • * @param errorId
  • * The error id is one of the constants below.
  • * @param errorMessage
  • * The error message.
  • */
  • public void deviceError(Device device, int errorId, String errorMessage) {
  • System.err.println(device + "->" + errorId + ": " + errorMessage);
  • }
  • };
  • /**
  • * The device error listener.
  • */
  • private static DeviceStatusListener statusListener = new DeviceStatusListener(){
  • /**
  • * Fire the listener that the device fire a status message.
  • *
  • * @param device
  • * The device in error state.
  • * @param statusId
  • * The status id is one of the constants below.
  • * @param statusMessage
  • * The status message.
  • */
  • public void deviceStatus(Device device, int statusId, String statusMessage){
  • System.out.println(device + "->" + statusId + ": " + statusMessage);
  • }
  • };
  • }
/**
 * Webcam Library, version 1.2
 * The easiest way to manage webcam devices in java.
 * (c) 2008 Pierrick HYMBERT <pierrick.hymbert@gmail.com>	
 * This library is "PROVIDED AS IS" without guaranty of any kinds.
 * Webcam Library is freely distribuable under the terms of an MIT-style license.
 * Visit www.hypik.fr
 */
package org.hypik.webcamlib.test.sample;

import java.util.List;

import org.hypik.webcamlib.DeviceManager;
import org.hypik.webcamlib.device.Device;
import org.hypik.webcamlib.device.IWS;
import org.hypik.webcamlib.device.listener.DeviceErrorListener;
import org.hypik.webcamlib.device.listener.DeviceStatusListener;

import com.sun.jna.Native;
/**
 * This class have only a main method to start all webcam devices found in a webcam preview window.
 * @author  Pierrick Hymbert <a href="mailto:pierrick.hymbert@gmail.com">Contact</a>
 *
 */
public class SimpleTest {
	/**
	 * Start all webcam devices found in a webcam preview window
	 * @param args N/A
	 */
	public static void main(String[] args){
		// Prevent VM crash
		Native.setProtected(true);
		
		// List all devices
		List<Device> devices = DeviceManager.getAllDevices();
		try {
			// Print all device driver name and version
			for (Device device : devices) {
				System.out.println("Found: " + device);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		// Check if at least one device is found
		if( devices.size() == 0 ){
			System.err.println("No device found.");
			System.exit(0);
		}
		
		// Start all webcam preview
		int x = 0, y = 0;
		for (Device device : devices) {
			// Add the listeners
			device.addDeviceErrorListener(errorListener);
			device.addDeviceStatusListener(statusListener);
			// Show preview
			device.showPreview(x, y, 300, 300, IWS.WS_OVERLAPPEDWINDOW | IWS.WS_VISIBLE, device.getName(), 0, 0);
			x += 320;
			if( x > 800 ){
				x = 0;
				y += 320;
			}
		}
		
		// Run all devices loop
		int deviceDisposed = 0;
		while( deviceDisposed < devices.size()){
			deviceDisposed = 0;
			for (Device device : devices) {
				if( !device.isDisposed() ){
					device.readAndDispatch();
				}else{
					deviceDisposed++;
				}
			}
		}		
		System.exit(0);
	}
	/**
	 * The device error listener.
	 */
	private static DeviceErrorListener errorListener = new DeviceErrorListener(){
		/**
		 * Fire the listener that the device throws an error message.
		 * 
		 * @param device
		 *            The device in error state.
		 * @param errorId
		 *            The error id is one of the constants below.
		 * @param errorMessage
		 *            The error message.
		 */
		public void deviceError(Device device, int errorId, String errorMessage) {
			System.err.println(device + "->" + errorId + ": " + errorMessage);
		}
	};
	/**
	 * The device error listener.
	 */
	private static DeviceStatusListener statusListener = new DeviceStatusListener(){
		/**
		 * Fire the listener that the device fire a status message.
		 * 
		 * @param device
		 *            The device in error state.
		 * @param statusId
		 *            The status id is one of the constants below.
		 * @param statusMessage
		 *            The status message.
		 */
		public void deviceStatus(Device device, int statusId, String statusMessage){
			System.out.println(device + "->" + statusId + ": " + statusMessage);
		}
	};
}

Conclusion

A oui... Il vous faut au moins une webcam!!!
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   bin
    •   com
      •   sun
        •   jna
          • PointerNotSafe.classTélécharger ce fichier [Réservé aux membres club]575 octets
    •   org
      •   hypik
        •   conversion
          • YUV2RGB.classTélécharger ce fichier [Réservé aux membres club]782 octets
        •   webcamlib
          •   codecs
            • Codec.classTélécharger ce fichier [Réservé aux membres club]1 473 octets
            • Codecs.classTélécharger ce fichier [Réservé aux membres club]17 821 octets
          •   compressor
            •   jna
              • ICM.classTélécharger ce fichier [Réservé aux membres club]1 832 octets
              • Vfw32$1.classTélécharger ce fichier [Réservé aux membres club]814 octets
              • Vfw32$HIC.classTélécharger ce fichier [Réservé aux membres club]847 octets
              • Vfw32$ICDecompress.classTélécharger ce fichier [Réservé aux membres club]572 octets
              • Vfw32$ICDecompressEx.classTélécharger ce fichier [Réservé aux membres club]621 octets
              • Vfw32$ICInfo.classTélécharger ce fichier [Réservé aux membres club]673 octets
              • Vfw32.classTélécharger ce fichier [Réservé aux membres club]2 160 octets
            • CompressionException.classTélécharger ce fichier [Réservé aux membres club]2 328 octets
            • DecompressVideo.classTélécharger ce fichier [Réservé aux membres club]6 308 octets
          •   device
            •   dialog
              • Dialog.classTélécharger ce fichier [Réservé aux membres club]610 octets
              • VideoCompressionDialog.classTélécharger ce fichier [Réservé aux membres club]1 307 octets
              • VideoDisplayDialog.classTélécharger ce fichier [Réservé aux membres club]1 295 octets
              • VideoFormatDialog.classTélécharger ce fichier [Réservé aux membres club]1 292 octets
              • VideoSourceDialog.classTélécharger ce fichier [Réservé aux membres club]1 292 octets
            •   listener
              • DeviceErrorListener.classTélécharger ce fichier [Réservé aux membres club]2 128 octets
              • DeviceFrameListener.classTélécharger ce fichier [Réservé aux membres club]396 octets
              • DeviceStatusListener.classTélécharger ce fichier [Réservé aux membres club]943 octets
            •   struct
              • WCStruct$CapDriverCaps.classTélécharger ce fichier [Réservé aux membres club]730 octets
              • WCStruct$CapInfoChunk.classTélécharger ce fichier [Réservé aux membres club]500 octets
              • WCStruct$CapStatus.classTélécharger ce fichier [Réservé aux membres club]1 026 octets
              • WCStruct$CaptureParams.classTélécharger ce fichier [Réservé aux membres club]1 059 octets
              • WCStruct$Point.classTélécharger ce fichier [Réservé aux membres club]449 octets
              • WCStruct$VideoHDR.classTélécharger ce fichier [Réservé aux membres club]624 octets
              • WCStruct.classTélécharger ce fichier [Réservé aux membres club]820 octets
            •   utils
              • Utils.classTélécharger ce fichier [Réservé aux membres club]306 octets
            • Device$1.classTélécharger ce fichier [Réservé aux membres club]2 076 octets
            • Device$2.classTélécharger ce fichier [Réservé aux membres club]2 083 octets
            • Device$3.classTélécharger ce fichier [Réservé aux membres club]2 503 octets
            • Device$4.classTélécharger ce fichier [Réservé aux membres club]782 octets
            • Device.classTélécharger ce fichier [Réservé aux membres club]15 017 octets
            • IDevice.classTélécharger ce fichier [Réservé aux membres club]2 667 octets
            • IWS.classTélécharger ce fichier [Réservé aux membres club]1 056 octets
          •   jna
            • AviCap.classTélécharger ce fichier [Réservé aux membres club]766 octets
            • AviCapNative.classTélécharger ce fichier [Réservé aux membres club]784 octets
            • Kernel32.classTélécharger ce fichier [Réservé aux membres club]670 octets
            • User32$BitmapInfo.classTélécharger ce fichier [Réservé aux membres club]702 octets
            • User32$BitmapInfoHeader.classTélécharger ce fichier [Réservé aux membres club]1 255 octets
            • User32$CapDriverCaps.classTélécharger ce fichier [Réservé aux membres club]834 octets
            • User32$capErrorCallback.classTélécharger ce fichier [Réservé aux membres club]641 octets
            • User32$CapInfoChunk.classTélécharger ce fichier [Réservé aux membres club]462 octets
            • User32$CapStatus.classTélécharger ce fichier [Réservé aux membres club]1 080 octets
            • User32$capStatusCallback.classTélécharger ce fichier [Réservé aux membres club]643 octets
            • User32$CaptureParams.classTélécharger ce fichier [Réservé aux membres club]1 054 octets
            • User32$capVideoStreamCallback.classTélécharger ce fichier [Réservé aux membres club]658 octets
            • User32$HOOKPROC.classTélécharger ce fichier [Réservé aux membres club]324 octets
            • User32$HPALETTE.classTélécharger ce fichier [Réservé aux membres club]461 octets
            • User32$MSG.classTélécharger ce fichier [Réservé aux membres club]911 octets
            • User32$POINT.classTélécharger ce fichier [Réservé aux membres club]411 octets
            • User32$RGBQuad.classTélécharger ce fichier [Réservé aux membres club]469 octets
            • User32$VideoHDR.classTélécharger ce fichier [Réservé aux membres club]862 octets
            • User32.classTélécharger ce fichier [Réservé aux membres club]3 785 octets
            • User32Native$CallBack.classTélécharger ce fichier [Réservé aux membres club]747 octets
            • User32Native$CallBackFrame.classTélécharger ce fichier [Réservé aux membres club]736 octets
            • User32Native$HOOKPROC.classTélécharger ce fichier [Réservé aux membres club]342 octets
            • User32Native$MSG.classTélécharger ce fichier [Réservé aux membres club]947 octets
            • User32Native$POINT.classTélécharger ce fichier [Réservé aux membres club]435 octets
            • User32Native.classTélécharger ce fichier [Réservé aux membres club]2 247 octets
            • W32API$1.classTélécharger ce fichier [Réservé aux membres club]708 octets
            • W32API$2.classTélécharger ce fichier [Réservé aux membres club]706 octets
            • W32API$3.classTélécharger ce fichier [Réservé aux membres club]792 octets
            • W32API$4.classTélécharger ce fichier [Réservé aux membres club]788 octets
            • W32API$HANDLE.classTélécharger ce fichier [Réservé aux membres club]763 octets
            • W32API$HANDLEByReference.classTélécharger ce fichier [Réservé aux membres club]1 342 octets
            • W32API$HBITMAP.classTélécharger ce fichier [Réservé aux membres club]422 octets
            • W32API$HDC.classTélécharger ce fichier [Réservé aux membres club]410 octets
            • W32API$HICON.classTélécharger ce fichier [Réservé aux membres club]416 octets
            • W32API$HINSTANCE.classTélécharger ce fichier [Réservé aux membres club]428 octets
            • W32API$HMODULE.classTélécharger ce fichier [Réservé aux membres club]428 octets
            • W32API$HRGN.classTélécharger ce fichier [Réservé aux membres club]413 octets
            • W32API$HWND.classTélécharger ce fichier [Réservé aux membres club]413 octets
            • W32API$LONG_PTR.classTélécharger ce fichier [Réservé aux membres club]553 octets
            • W32API$LPARAM.classTélécharger ce fichier [Réservé aux membres club]520 octets
            • W32API$LRESULT.classTélécharger ce fichier [Réservé aux membres club]523 octets
            • W32API$SIZE_T.classTélécharger ce fichier [Réservé aux membres club]522 octets
            • W32API$SSIZE_T.classTélécharger ce fichier [Réservé aux membres club]523 octets
            • W32API$UINT_PTR.classTélécharger ce fichier [Réservé aux membres club]746 octets
            • W32API$ULONG_PTR.classTélécharger ce fichier [Réservé aux membres club]556 octets
            • W32API$WPARAM.classTélécharger ce fichier [Réservé aux membres club]520 octets
            • W32API.classTélécharger ce fichier [Réservé aux membres club]2 050 octets
            • W32Errors.classTélécharger ce fichier [Réservé aux membres club]309 octets
          •   test
            •   awt
              • AWTFrame.classTélécharger ce fichier [Réservé aux membres club]1 581 octets
              • AWTTest$1.classTélécharger ce fichier [Réservé aux membres club]1 706 octets
              • AWTTest$2.classTélécharger ce fichier [Réservé aux membres club]1 738 octets
              • AWTTest$3.classTélécharger ce fichier [Réservé aux membres club]631 octets
              • AWTTest$4.classTélécharger ce fichier [Réservé aux membres club]1 344 octets
              • AWTTest$5.classTélécharger ce fichier [Réservé aux membres club]1 167 octets
              • AWTTest$6.classTélécharger ce fichier [Réservé aux membres club]1 171 octets
              • AWTTest.classTélécharger ce fichier [Réservé aux membres club]4 378 octets
            •   sample
              • SimpleTest$1.classTélécharger ce fichier [Réservé aux membres club]1 188 octets
              • SimpleTest$2.classTélécharger ce fichier [Réservé aux membres club]1 192 octets
              • SimpleTest.classTélécharger ce fichier [Réservé aux membres club]2 660 octets
              • Test.classTélécharger ce fichier [Réservé aux membres club]1 968 octets
            •   swt
              • CustomizePreview.classTélécharger ce fichier [Réservé aux membres club]545 octets
              • SWTTest$1.classTélécharger ce fichier [Réservé aux membres club]3 256 octets
              • SWTTest$10.classTélécharger ce fichier [Réservé aux membres club]1 204 octets
              • SWTTest$11.classTélécharger ce fichier [Réservé aux membres club]1 133 octets
              • SWTTest$12.classTélécharger ce fichier [Réservé aux membres club]3 979 octets
              • SWTTest$13$1.classTélécharger ce fichier [Réservé aux membres club]2 071 octets
              • SWTTest$13.classTélécharger ce fichier [Réservé aux membres club]780 octets
              • SWTTest$2.classTélécharger ce fichier [Réservé aux membres club]2 063 octets
              • SWTTest$3.classTélécharger ce fichier [Réservé aux membres club]1 390 octets
              • SWTTest$4.classTélécharger ce fichier [Réservé aux membres club]1 987 octets
              • SWTTest$5.classTélécharger ce fichier [Réservé aux membres club]1 620 octets
              • SWTTest$6.classTélécharger ce fichier [Réservé aux membres club]2 126 octets
              • SWTTest$7.classTélécharger ce fichier [Réservé aux membres club]1 608 octets
              • SWTTest$8.classTélécharger ce fichier [Réservé aux membres club]2 442 octets
              • SWTTest$9.classTélécharger ce fichier [Réservé aux membres club]1 605 octets
              • SWTTest.classTélécharger ce fichier [Réservé aux membres club]10 196 octets
          • DeviceManager.classTélécharger ce fichier [Réservé aux membres club]2 939 octets
  •   lib
    • jna.jarTélécharger ce fichier [Réservé aux membres club]372 479 octets
  •   src
  •   test