Https://github.com/saki4510t/UVCCamera
Uvccamera listen to the name to know the Common class library using the UVC (USB vedio Class) protocol. Linux native support with basic support for all free-zone USB cameras on the market.
This open source library contains a library of JNI and Android-encapsulated classes. is currently the best use of the Android USB Camera class library.
Uvccamera to control and manage connections to external devices,
Uvccamera.setframecallback (Final Iframecallback callback, final int pixelformat) gets each frame of data;
Pixel_format_raw = 0;
PIXEL_FORMAT_YUV = 1;
pixel_format_rgb565 = 2;
PIXEL_FORMAT_RGBX = 3;
PIXEL_FORMAT_YUV420SP = 4;
PIXEL_FORMAT_NV21 = 5;
The Uvccameratextureview control makes a preview of the image,
Usbmonitor connection and disconnection of the drive
The coupling of the Uvccamera Test4 class is poor.
TEST4 is to operate the camera in the background service, the latter service is not the same process name as the foreground process, so the definition of the Service IBinder object is Aidl, and the IBinder object is operated through the Aidl defined interface to operate the background service. While the camera operation is not directly in the service operation, the service is responsible for detecting the USB link situation, the USB connection to the device backstage, create a handler (Cameraserver) to operate the camera.
To add a camera to the operation, you have to stack several layers to complete the package. The dependency between class and classes is very serious!!! Think the author has a problem with design. In order to add a camera operation, I took a total of 8 steps to complete.
1. Add related actions in Cameraserver->camerathread
Note: The actual operation of the camera operation is Cameraserver (handler Class)-->camerathread (Class).
Referential relationships: Instances of Cameraserver are referenced by weakly referencing WeakReference instances of class Camerathread during the reference period; Caerathread reference their external cameraserver instances by a strong reference or direct reference
2. Add handler processing in Cameraserver (handler) class, send message via handler, invoke operation in Cameraserver-->camerathread class
1) Add MessageType constant when sending message in Cameraserver class
2) in the Cameraserver#handlemessage () method, add handling of the added Meassagetype constant, similar to thread.xxxx ()
3) Add the relevant action method, used to encapsulate the corresponding Meassagetype constant, Cameraserver#handlemessage () method.
3. Add related method declarations in Iuvcservice.aidl
Note: the interface defined by Iuvcserice.aidl is the ibinder of uvcservice feedback, because the process name that serves the foreground UI is different, so the Uvcservice object is referenced with the Aidl defined interface. For client cameraclient access.
4.uvcservice#musbmonitoruvcservice#mbasicbinder4. An anonymous class instance of Uvcservice#mbasicbinder in Uvcservice, Overrid implements the method declaration added in Iuvcservice.aidl.
Note: Uvcservice is a back-end service that controls USB devices, and Uvcservice#musbmonitor monitors USB devices, Uvcservice#mondeviceconnectlistener (uvcservice# The Musbmonitor callback) Initializes a Cameraserver instance #onConnect () and plugs into the Uvcservice#scameraservers collection. Uvcservice#musbmonitor all operations are on the Uvcservice main thread. Uvcservice#scameraservers#cameraserver is the handler class that really operates the USB camera, and the client cameracilent through uvcservice# Mbasicbinder calls Uvcservice#scameraservers#cameraserver, which calls uvcservice#scameraservers#cameraserver# Camerathread operate the camera.
5. In Cameraclient#camerahandler (handler class, cameraclient static inner Class) #CameraTask (thread class, cameraclient# Camerahandler static inner Class) adds a method that calls the Iuvcserice.aidl Add method.
Note: Cameraclinet is the class that corresponds to the background service of the foreground UI, cameraclient the thread class Cameratask the actual operation of the background service by sending a message through the handler class.
6. Add the MessageType constant for the corresponding operation service in Cameraclient
7. Add code to process the Cameraclient#messagetype constant in the Cameraclient#camerahandler (handler class, Static inner class of Cameraclient) #handleMessage () method
8. Add the relevant code for Operation Cameraclinet in view
Android USB camera Open Source Library Uvccamera Tutorial