美文网首页
Android 基于UVC协议 设置USBCamera 饱和度

Android 基于UVC协议 设置USBCamera 饱和度

作者: 善良的老农 | 来源:发表于2023-02-17 10:29 被阅读0次

 上干货:    项目链接地址




第一步: 编译生成aar ( 项目里面有 aar 可以直接引用    ABI架构可以根据实际情况调整 减少aar大小)

第二步:引入aar  

api(name: "libusbcamera-release", ext: 'aar')

第三步:调用实现

 1 ) 注册USB监听广播 

 

2)具体处理根据自己实际业务场景处理

3)具体调用实现 

  具体实现:  监听USB 热插拔进行处理    监听插入后UsbDevice 的   vid   pid  为我们需要设置的相机设备 则进行设置      否者不做处理
 

调用代码:

private var mCameraHelper: UVCCameraHelper? =null

private var mUVCCameraView: CameraViewInterface? =null

// Usb 热插拔回调  

private val onUSBNotifyChannel = androidx.lifecycle.Observer{

    setCameraParameter(it.insert)

}

private fun setHdmiNotifyChannel() {

LiveDataBus.get().of(QEventCallBack::class.java).onUSBNotifyChannel()

.observeForever(onUSBNotifyChannel)

}

/**

*

* @description    监听Usb插拔  判断usbdevice 是否为 enheylig相机  是该相机则设置 对比度饱和度

* @param insert 是否为插入

* @return

* @author as752497576@gmail.com

* @time 2023/2/16 17:23

*/

private var insertTime: Long =0

private fun setCameraParameter(insert: Boolean) {

if (mCameraHelper !=null) {// 释放 

        mCameraHelper?.release()

mCameraHelper =null

    }

AppLog.getInstance()

.i("setCameraParameter = fail to connect,please check onAttachDev localClassName = ${ActivityUtil.getInstance().current.localClassName}  localClassName = ${this.localClassName}  ")

if (!TextUtils.equals(// 仅 在当前界面做操作

            ActivityUtil.getInstance().current.localClassName,

            this.localClassName

        )

)return

    if (!insert) {//  拔不做操作

        return

    }

if (abs(insertTime - System.currentTimeMillis()) <1000) {

// 1s 间隔  目前硬件USB 热插拔回调慢  可不判断

        return

    }

insertTime = System.currentTimeMillis()

if (mCameraHelper ==null) {

mUVCCameraView = camera_view;

        mUVCCameraView?.setCallback(this)

mCameraHelper = UVCCameraHelper.getInstance(1920, 1080);

        mCameraHelper?.setDefaultFrameFormat(UVCCameraHelper.FRAME_FORMAT_MJPEG)

mCameraHelper?.initUSBMonitor(

this,

            mUVCCameraView,

            object : UVCCameraHelper.OnMyDevConnectListener {

override fun onAttachDev(device: UsbDevice?) {

if (device?.productId ==51202 && device?.vendorId ==41224) {//是否为 enheylig相机

                        // 请求开启相机

                        AppLog.getInstance()

.i("setCameraParameter = fail to connect,please check onAttachDev device?.requestPermission = ${ mCameraHelper?.requestPermission(0)}  ")

}

AppLog.getInstance()

.i("setCameraParameter = fail to connect,please check onAttachDev device?.productId = ${device?.productId}  device?.vendorId = ${device?.vendorId}  ")

}

override fun onDettachDev(device: UsbDevice?) {

AppLog.getInstance()

.i("setCameraParameter = fail to connect,please check onDettachDev")

mCameraHelper?.closeCamera()

}

override fun onConnectDev(device: UsbDevice?, isConnected: Boolean) {

AppLog.getInstance()

.i("setCameraParameter =fail to connect,please check onConnectDev $isConnected")

if (device?.productId ==51202 && device?.vendorId ==41224) {//是否为 enheylig相机     作者邮箱:752497576@qq.com

                        setCamera()

}

}

override fun onDisConnectDev(device: UsbDevice?) {

}

})

mCameraHelper?.registerUSB()

}

}

/**

*

* @description  设置相机 饱和度  对比度

* @author as752497576@gmail.com

* @time 2023/2/16 17:22

*/

private fun setCamera() {

tv_create.postDelayed({

        AppLog.getInstance()

.i("setCameraParameter = fail to connect, setCameraParameter ${mCameraHelper?.isCameraOpened} ")

if (mCameraHelper !=null &&mCameraHelper?.isCameraOpened ==true) {

mCameraHelper?.setModelValue(// 72 = 145

                UVCCameraHelper.MODE_CONTRAST, 72

            )

mCameraHelper?.setModelValue(// 59 = 150

                UVCCameraHelper.PU_SATURATION, 59

            )

}

if (mCameraHelper !=null) {

mCameraHelper?.release()

mCameraHelper =null

            }

}, 1000)

}

 第四步 : 注意事项  (PS:重要  !!!!)
1) 设置饱和度对比度 需要依赖 UVCCameraTextureView 的渲染   mCameraHelper?.isCameraOpened  目前我们做的处理是绘制到屏幕外面    有更好方案欢迎留言交流
   

<FrameLayout

    android:layout_marginTop="-1500dp"

    app:layout_constraintTop_toTopOf="parent"

    app:layout_constraintStart_toStartOf="parent"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

>

<com.serenegiant.usb.widget.UVCCameraTextureView

        android:id="@+id/camera_view"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_gravity="center"/>

</FrameLayout>

2)关于对比度饱和度设置   (PS: 如需设置其它值 请参照  该设置去 源码: UVCCameraHelper中   定义枚举值   在AbstractUVCCameraHandler类   setValue方法中定义需要设置的具体参数   实在不知可联系作者:752497576@qq.com )

具体设置方法如下: 
mCameraHelper?.setModelValue(// 72 = 145

    UVCCameraHelper.MODE_CONTRAST, 72

)

mCameraHelper?.setModelValue(// 59 = 150

    UVCCameraHelper.PU_SATURATION, 59

)

 3)设置具体数值换算  :

具体换算方法

 4) release 打包混淆 需注意     混淆代码如下:

#uvc 混淆

-dontwarncom.serenegiant.**

-keep public class com.serenegiant.**{*;}

-dontwarncom.jiangdg.**

-keep public class com.jiangdg.**{*;}

-dontwarnorg.easydarwin.**

-keep public class org.easydarwin.**{*;}

-keepclassmembers class com.serenegiant.usb.USBMonitor {

public *;

    private *;

}

 

创作不易 ,有助于您,还请点赞支持,谢谢。
 

相关文章

网友评论

      本文标题:Android 基于UVC协议 设置USBCamera 饱和度

      本文链接:https://www.haomeiwen.com/subject/ctvpkdtx.html