Commit bde90caf authored by 马乐's avatar 马乐

调整图片大小

parent 41e46616
...@@ -15,6 +15,9 @@ import androidx.core.content.ContextCompat ...@@ -15,6 +15,9 @@ import androidx.core.content.ContextCompat
import com.arcsoft.visdrive.avmsdk.ArcErrorInfo import com.arcsoft.visdrive.avmsdk.ArcErrorInfo
import com.arcsoft.visdrive.avmsdk.ArcVisDriveAVMEngine import com.arcsoft.visdrive.avmsdk.ArcVisDriveAVMEngine
import com.arcsoft.visdrive.avmsdk.constant.avm.ArcAVMType import com.arcsoft.visdrive.avmsdk.constant.avm.ArcAVMType
import com.arcsoft.visdrive.avmsdk.model.avm.ArcAVMCalibInfo
import com.arcsoft.visdrive.avmsdk.model.avm.ArcAVMCalibResult
import com.arcsoft.visdrive.avmsdk.model.avm.ArcAVMLookupTable
import com.arcsoft.visdrive.avmsdk.model.avm.ArcAVMOutputImage import com.arcsoft.visdrive.avmsdk.model.avm.ArcAVMOutputImage
import com.arcsoft.visdrive.avmsdk.model.common.ArcActiveEnvParam import com.arcsoft.visdrive.avmsdk.model.common.ArcActiveEnvParam
import com.blankj.utilcode.util.FileUtils import com.blankj.utilcode.util.FileUtils
...@@ -37,9 +40,9 @@ import kotlinx.coroutines.CoroutineScope ...@@ -37,9 +40,9 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.MainScope import kotlinx.coroutines.MainScope
import kotlinx.coroutines.cancel
import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.ensureActive
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import java.io.File import java.io.File
...@@ -70,8 +73,12 @@ class MainActivity : AppCompatActivity() { ...@@ -70,8 +73,12 @@ class MainActivity : AppCompatActivity() {
private var job:Job? = null private var job:Job? = null
private var avmPlayJob:Job? = null
private var avmStartScope:AvmCoroutineScope ?= null private var avmStartScope:AvmCoroutineScope ?= null
private val channel = Channel<Boolean>()
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater) binding = ActivityMainBinding.inflate(layoutInflater)
...@@ -98,7 +105,7 @@ class MainActivity : AppCompatActivity() { ...@@ -98,7 +105,7 @@ class MainActivity : AppCompatActivity() {
} }
binding.activeAvm.setOnClickListener { binding.activeAvm.setOnClickListener {
avmCoroutineScope.launch { avmCoroutineScope.launch {
val result = ArcVisDriveAVMEngine.activate( var result = ArcVisDriveAVMEngine.activate(
APP_ID, APP_SECRET, ArcAVMType.AVM_CAM_4, APP_ID, APP_SECRET, ArcAVMType.AVM_CAM_4,
ArcActiveEnvParam().apply { ArcActiveEnvParam().apply {
this.IMEI = "d5e2f07694f674c4" this.IMEI = "d5e2f07694f674c4"
...@@ -110,7 +117,14 @@ class MainActivity : AppCompatActivity() { ...@@ -110,7 +117,14 @@ class MainActivity : AppCompatActivity() {
Toast.makeText(this@MainActivity,"激活成功",Toast.LENGTH_SHORT).show() Toast.makeText(this@MainActivity,"激活成功",Toast.LENGTH_SHORT).show()
} }
spUtils.put(IS_ACTIVATED,true) spUtils.put(IS_ACTIVATED,true)
coroutineContext[AvmCoroutineContext]?.engine?.initializeAvmParams(calibResultPath,lookupPath) result = coroutineContext[AvmCoroutineContext]?.engine?.initializeAvmParams(calibResultPath,lookupPath)?:ArcErrorInfo.ARC_ERROR_BAD_STATE
if (result == ArcErrorInfo.ARC_ERROR_OK) {
val getCalibInfo = ArcAVMCalibInfo()
val getCalibResult = ArcAVMCalibResult()
val getLookupTable = ArcAVMLookupTable()
result = avmEngine.getCalibrateResults(getCalibInfo, getCalibResult, getLookupTable)
LogUtils.i("getCalibrateResults:${result}, calibInfo:${getCalibInfo}, result:${getCalibResult.data.size}, lookup:${getLookupTable.data.size}")
}
} else { } else {
LogUtils.e("激活失败!") LogUtils.e("激活失败!")
withContext(Dispatchers.Main){ withContext(Dispatchers.Main){
...@@ -122,7 +136,67 @@ class MainActivity : AppCompatActivity() { ...@@ -122,7 +136,67 @@ class MainActivity : AppCompatActivity() {
} }
binding.autoCalib.setOnClickListener { binding.autoCalib.setOnClickListener {
avmCoroutineScope.launch { avmCoroutineScope.launch {
coroutineContext[AvmCoroutineContext]?.engine?.autoCalib(calibResultPath,lookupPath) launch(Dispatchers.Default) {
avmFrontCamera.startPictureSequence(
PictureSequenceSource.GENERAL_CAMERA,
configCameraSequence(avmDir.absolutePath){ _, _, status, data, _ ->
if (status == SpmCameraDevice.ImageDataCallback.IMAGE_STATUS_SUCCEEDED) {
ArcAVMInputImageFactory.ofFront(data).also {
avmInputImages[0] = it
}
}
}
)
}
launch(Dispatchers.Default) {
avmRightCamera.startPictureSequence(
PictureSequenceSource.GENERAL_CAMERA,
configCameraSequence(avmDir.absolutePath){ _, _, status, data, _ ->
if (status == SpmCameraDevice.ImageDataCallback.IMAGE_STATUS_SUCCEEDED) {
ArcAVMInputImageFactory.ofRight(data).also {
avmInputImages[1] = it
}
}
}
)
}
launch(Dispatchers.Default) {
avmBackCamera.startPictureSequence(
PictureSequenceSource.GENERAL_CAMERA,
configCameraSequence(avmDir.absolutePath){ _, _, status, data, _ ->
if (status == SpmCameraDevice.ImageDataCallback.IMAGE_STATUS_SUCCEEDED) {
ArcAVMInputImageFactory.ofBack(data).also {
avmInputImages[2] = it
}
}
}
)
}
launch(Dispatchers.Default) {
avmLeftCamera.startPictureSequence(
PictureSequenceSource.GENERAL_CAMERA,
configCameraSequence(avmDir.absolutePath){ _, _, status, data, _ ->
if (status == SpmCameraDevice.ImageDataCallback.IMAGE_STATUS_SUCCEEDED) {
ArcAVMInputImageFactory.ofLeft(data).also {
avmInputImages[3] = it
}
}
}
)
}
while (avmInputImages.filterNotNull().size != 4) {
LogUtils.d("input list size:${avmInputImages.filterNotNull()}")
delay(100)
}
val result = coroutineContext[AvmCoroutineContext]?.engine?.autoCalib(calibResultPath,lookupPath)
if (result != null) {
launch(Dispatchers.IO){
avmLeftCamera.stopPictureSequence(PictureSequenceSource.GENERAL_CAMERA)
avmFrontCamera.stopPictureSequence(PictureSequenceSource.GENERAL_CAMERA)
avmRightCamera.stopPictureSequence(PictureSequenceSource.GENERAL_CAMERA)
avmBackCamera.stopPictureSequence(PictureSequenceSource.GENERAL_CAMERA)
}
}
} }
} }
...@@ -136,76 +210,76 @@ class MainActivity : AppCompatActivity() { ...@@ -136,76 +210,76 @@ class MainActivity : AppCompatActivity() {
if (avmStartScope == null) { if (avmStartScope == null) {
avmStartScope = AvmCoroutineScope(AvmCoroutineContext(engine = avmEngine) + Dispatchers.IO + COROUTINE_AVM + Job()) avmStartScope = AvmCoroutineScope(AvmCoroutineContext(engine = avmEngine) + Dispatchers.IO + COROUTINE_AVM + Job())
} }
val channel = Channel<Boolean>() avmPlayJob = avmStartScope?.launch {
avmStartScope?.launch { try {
launch(Dispatchers.Default) { val frontScope = CoroutineScope(Dispatchers.Default)
avmFrontCamera.startPictureSequence( avmFrontCamera.startPictureSequence(
PictureSequenceSource.GENERAL_CAMERA, PictureSequenceSource.GENERAL_CAMERA,
configCameraSequence(avmDir.absolutePath){ _, _, status, data, _ -> configCameraSequence(avmDir.absolutePath) { _, _, status, data, _ ->
if (status == SpmCameraDevice.ImageDataCallback.IMAGE_STATUS_SUCCEEDED) { if (status == SpmCameraDevice.ImageDataCallback.IMAGE_STATUS_SUCCEEDED) {
ArcAVMInputImageFactory.ofFront(data).also { ArcAVMInputImageFactory.ofFront(data).also {
avmInputImages[0] = it avmInputImages[0] = it
launch { frontScope.launch {
ensureActive()
channel.send(true) channel.send(true)
} }
} }
} }
} }
) )
} val rightScope = CoroutineScope(Dispatchers.Default)
launch(Dispatchers.Default) {
avmRightCamera.startPictureSequence( avmRightCamera.startPictureSequence(
PictureSequenceSource.GENERAL_CAMERA, PictureSequenceSource.GENERAL_CAMERA,
configCameraSequence(avmDir.absolutePath){ _, _, status, data, _ -> configCameraSequence(avmDir.absolutePath) { _, _, status, data, _ ->
if (status == SpmCameraDevice.ImageDataCallback.IMAGE_STATUS_SUCCEEDED) { if (status == SpmCameraDevice.ImageDataCallback.IMAGE_STATUS_SUCCEEDED) {
ArcAVMInputImageFactory.ofRight(data).also { ArcAVMInputImageFactory.ofRight(data).also {
avmInputImages[1] = it avmInputImages[1] = it
launch { rightScope.launch {
ensureActive()
channel.send(true) channel.send(true)
} }
} }
} }
} }
) )
} val backScope = CoroutineScope(Dispatchers.Default)
launch(Dispatchers.Default) {
avmBackCamera.startPictureSequence( avmBackCamera.startPictureSequence(
PictureSequenceSource.GENERAL_CAMERA, PictureSequenceSource.GENERAL_CAMERA,
configCameraSequence(avmDir.absolutePath){ _, _, status, data, _ -> configCameraSequence(avmDir.absolutePath) { _, _, status, data, _ ->
if (status == SpmCameraDevice.ImageDataCallback.IMAGE_STATUS_SUCCEEDED) { if (status == SpmCameraDevice.ImageDataCallback.IMAGE_STATUS_SUCCEEDED) {
ArcAVMInputImageFactory.ofBack(data).also { ArcAVMInputImageFactory.ofBack(data).also {
avmInputImages[2] = it avmInputImages[2] = it
launch { backScope.launch {
ensureActive()
channel.send(true) channel.send(true)
} }
} }
} }
} }
) )
} val leftScope = CoroutineScope(Dispatchers.Default)
launch(Dispatchers.Default) {
avmLeftCamera.startPictureSequence( avmLeftCamera.startPictureSequence(
PictureSequenceSource.GENERAL_CAMERA, PictureSequenceSource.GENERAL_CAMERA,
configCameraSequence(avmDir.absolutePath){ _, _, status, data, _ -> configCameraSequence(avmDir.absolutePath) { _, _, status, data, _ ->
if (status == SpmCameraDevice.ImageDataCallback.IMAGE_STATUS_SUCCEEDED) { if (status == SpmCameraDevice.ImageDataCallback.IMAGE_STATUS_SUCCEEDED) {
ArcAVMInputImageFactory.ofLeft(data).also { ArcAVMInputImageFactory.ofLeft(data).also {
avmInputImages[3] = it avmInputImages[3] = it
launch { leftScope.launch {
ensureActive()
channel.send(true) channel.send(true)
} }
} }
} }
} }
) )
} val outputImageList = arrayListOf<ArcAVMOutputImage>()
val outputImageList = arrayListOf<ArcAVMOutputImage>() while (avmInputImages.filterNotNull().size != 4) {
while (avmInputImages.size != 4) { delay(100)
delay(100) }
} LogUtils.d("准备播放融合图...")
LogUtils.d("准备播放融合图...") if (spUtils.getBoolean(CALIB_RESULT) && spUtils.getBoolean(LOOKUP_TABLE)) {
if (spUtils.getBoolean(CALIB_RESULT) && spUtils.getBoolean(LOOKUP_TABLE)) {
launch(Dispatchers.Default) {
while (channel.receive()) { while (channel.receive()) {
ensureActive()
val result = coroutineContext[AvmCoroutineContext]?.engine?.drawAVM( val result = coroutineContext[AvmCoroutineContext]?.engine?.drawAVM(
31, 31,
avmInputImages, avmInputImages,
...@@ -217,22 +291,25 @@ class MainActivity : AppCompatActivity() { ...@@ -217,22 +291,25 @@ class MainActivity : AppCompatActivity() {
} }
} }
} }
} else {
withContext(Dispatchers.Main) {
Toast.makeText(this@MainActivity, "请先进行标定", Toast.LENGTH_SHORT)
.show()
}
} }
} else { } catch (e: CancellationException) {
withContext(Dispatchers.Main){ LogUtils.e("${e.message}")
Toast.makeText(this@MainActivity,"请先进行标定",Toast.LENGTH_SHORT).show() avmLeftCamera.stopPictureSequence(PictureSequenceSource.GENERAL_CAMERA)
} avmFrontCamera.stopPictureSequence(PictureSequenceSource.GENERAL_CAMERA)
avmRightCamera.stopPictureSequence(PictureSequenceSource.GENERAL_CAMERA)
avmBackCamera.stopPictureSequence(PictureSequenceSource.GENERAL_CAMERA)
} catch (e: Throwable) {
e.printStackTrace()
} }
} }
} }
binding.stopAvm.setOnClickListener { binding.stopAvm.setOnClickListener {
avmStartScope?.launch { avmPlayJob?.cancel(CancellationException("结束AVM实时渲染"))
avmLeftCamera.stopPictureSequence(PictureSequenceSource.GENERAL_CAMERA)
avmFrontCamera.stopPictureSequence(PictureSequenceSource.GENERAL_CAMERA)
avmRightCamera.stopPictureSequence(PictureSequenceSource.GENERAL_CAMERA)
avmBackCamera.stopPictureSequence(PictureSequenceSource.GENERAL_CAMERA)
cancel(kotlinx.coroutines.CancellationException("Click Stop Avm Button"))
}
closeAuxiliaryPresentation() closeAuxiliaryPresentation()
} }
} }
......
...@@ -99,19 +99,19 @@ fun ArcVisDriveAVMEngine.initializeAvmParams(calibResultPath:File,lookupPath:Fil ...@@ -99,19 +99,19 @@ fun ArcVisDriveAVMEngine.initializeAvmParams(calibResultPath:File,lookupPath:Fil
avmInitInfo.avmIntrinsicParamArray = intrinsicArray avmInitInfo.avmIntrinsicParamArray = intrinsicArray
val calibInfo = ArcAVMCalibInfo() val calibInfo = ArcAVMCalibInfo()
calibInfo.avm2DImageWidth = IMAGE_WIDTH calibInfo.avm2DImageWidth = IMAGE_HEIGHT
calibInfo.avm2DImageHeight = IMAGE_HEIGHT calibInfo.avm2DImageHeight = IMAGE_WIDTH
calibInfo.singleImageWidth = 480 calibInfo.singleImageWidth = IMAGE_WIDTH
calibInfo.singleImageHeight = 456 calibInfo.singleImageHeight = IMAGE_HEIGHT
val carInfo = ArcAVMCarInfo() val carInfo = ArcAVMCarInfo()
carInfo.width = 2500 carInfo.width = 590
carInfo.length = 6000 carInfo.length = 1800
carInfo.blinkAreaFront = 0 carInfo.blinkAreaFront = 0
carInfo.blinkAreaRight = 0 carInfo.blinkAreaRight = 0
carInfo.blinkAreaBack = 0 carInfo.blinkAreaBack = 0
carInfo.blinkAreaLeft = 0 carInfo.blinkAreaLeft = 0
calibInfo.avmCarInfo = carInfo calibInfo.avmCarInfo = carInfo
calibInfo.viewPortType = ArcAVMViewPortType.LARGE.value calibInfo.viewPortType = ArcAVMViewPortType.SMALL.value
avmInitInfo.avmCalibInfo = calibInfo avmInitInfo.avmCalibInfo = calibInfo
if (spUtils.getBoolean(CALIB_RESULT)) { if (spUtils.getBoolean(CALIB_RESULT)) {
val avmCalibResult = ArcAVMCalibResult() val avmCalibResult = ArcAVMCalibResult()
...@@ -130,13 +130,13 @@ fun ArcVisDriveAVMEngine.initializeAvmParams(calibResultPath:File,lookupPath:Fil ...@@ -130,13 +130,13 @@ fun ArcVisDriveAVMEngine.initializeAvmParams(calibResultPath:File,lookupPath:Fil
return init(avmInitInfo) return init(avmInitInfo)
} }
fun ArcVisDriveAVMEngine.autoCalib(calibResultPath:File,lookupPath:File){ fun ArcVisDriveAVMEngine.autoCalib(calibResultPath:File,lookupPath:File):Int{
val clothInfo = ArcAVMClothInfo() val clothInfo = ArcAVMClothInfo()
clothInfo.d1 = 600 clothInfo.d1 = 120
clothInfo.d3 = 5000 clothInfo.d3 = 690
clothInfo.d4 = 4900 clothInfo.d4 = 690
clothInfo.d5 = 5000 clothInfo.d5 = 690
clothInfo.d6 = 4000 clothInfo.d6 = 690
val chessInfoFront = ArcAVMChessInfo(ArcAVMCameraPosType.TYPE_FRONT) val chessInfoFront = ArcAVMChessInfo(ArcAVMCameraPosType.TYPE_FRONT)
val chessInfoRight = ArcAVMChessInfo(ArcAVMCameraPosType.TYPE_RIGHT) val chessInfoRight = ArcAVMChessInfo(ArcAVMCameraPosType.TYPE_RIGHT)
val chessInfoBack = ArcAVMChessInfo(ArcAVMCameraPosType.TYPE_BACK) val chessInfoBack = ArcAVMChessInfo(ArcAVMCameraPosType.TYPE_BACK)
...@@ -144,36 +144,38 @@ fun ArcVisDriveAVMEngine.autoCalib(calibResultPath:File,lookupPath:File){ ...@@ -144,36 +144,38 @@ fun ArcVisDriveAVMEngine.autoCalib(calibResultPath:File,lookupPath:File){
val chessInfoList = arrayListOf(chessInfoFront, chessInfoRight, chessInfoBack, chessInfoLeft) val chessInfoList = arrayListOf(chessInfoFront, chessInfoRight, chessInfoBack, chessInfoLeft)
val calibResult = ArcAVMCalibResult() val calibResult = ArcAVMCalibResult()
val lookupTable = ArcAVMLookupTable() val lookupTable = ArcAVMLookupTable()
var result = autoCalibrate(avmInputImages, clothInfo, chessInfoList, calibResult, lookupTable) return autoCalibrate(avmInputImages, clothInfo, chessInfoList, calibResult, lookupTable).also {result->
LogUtils.i("autoCalibrate:${result}") LogUtils.i("auto calibrate result = $result")
if (result == ArcErrorInfo.ARC_ERROR_OK) { if (result == ArcErrorInfo.ARC_ERROR_OK) {
LogUtils.i("autoCalibrate calibResult:${calibResult.data.size}") LogUtils.i("autoCalibrate calibResult:${calibResult.data.size}")
LogUtils.i("autoCalibrate lookupTable:${lookupTable.data.size}") LogUtils.i("autoCalibrate lookupTable:${lookupTable.data.size}")
spUtils.put(CALIB_RESULT,FileIOUtils.writeFileFromBytesByChannel(calibResultPath, calibResult.data, true)) spUtils.put(CALIB_RESULT,FileIOUtils.writeFileFromBytesByChannel(calibResultPath, calibResult.data, true))
spUtils.put(LOOKUP_TABLE,FileIOUtils.writeFileFromBytesByChannel(lookupPath, lookupTable.data, true)) spUtils.put(LOOKUP_TABLE,FileIOUtils.writeFileFromBytesByChannel(lookupPath, lookupTable.data, true))
} else { } else {
LogUtils.e("autoCalibrate failed, chessPoints1:${chessInfoList[0].leftChessPoints[0].x}_${chessInfoList[0].leftChessPoints[0].y}," + spUtils.put(CALIB_RESULT,false)
"chessPoints2:${chessInfoList[1].leftChessPoints[1].x}_${chessInfoList[1].leftChessPoints[1].y}," + spUtils.put(LOOKUP_TABLE,false)
"chessPoints3:${chessInfoList[2].leftChessPoints[2].x}_${chessInfoList[2].leftChessPoints[2].y}," + LogUtils.e("autoCalibrate failed, chessPoints1:${chessInfoList[0].leftChessPoints[0].x}_${chessInfoList[0].leftChessPoints[0].y}," +
"chessPoints4:${chessInfoList[3].leftChessPoints[3].x}_${chessInfoList[3].leftChessPoints[3].y},") "chessPoints2:${chessInfoList[1].leftChessPoints[1].x}_${chessInfoList[1].leftChessPoints[1].y}," +
} "chessPoints3:${chessInfoList[2].leftChessPoints[2].x}_${chessInfoList[2].leftChessPoints[2].y}," +
"chessPoints4:${chessInfoList[3].leftChessPoints[3].x}_${chessInfoList[3].leftChessPoints[3].y},")
val getCalibInfo = ArcAVMCalibInfo() }
val getCalibResult = ArcAVMCalibResult() val getCalibInfo = ArcAVMCalibInfo()
val getLookupTable = ArcAVMLookupTable() val getCalibResult = ArcAVMCalibResult()
result = getCalibrateResults(getCalibInfo, getCalibResult, getLookupTable) val getLookupTable = ArcAVMLookupTable()
if (result == ArcErrorInfo.ARC_ERROR_OK) { val getCalibrateResults = getCalibrateResults(getCalibInfo, getCalibResult, getLookupTable)
LogUtils.i("getCalibrateResults, calibInfo:${getCalibInfo}, result:${getCalibResult.data.size}, lookup:${getLookupTable.data.size}") if (getCalibrateResults == ArcErrorInfo.ARC_ERROR_OK) {
LogUtils.i("getCalibrateResults, calibInfo:${getCalibInfo}, result:${getCalibResult.data.size}, lookup:${getLookupTable.data.size}")
}
} }
} }
fun ArcVisDriveAVMEngine.manualCalib(calibResultPath:File,lookupPath:File){ fun ArcVisDriveAVMEngine.manualCalib(calibResultPath:File,lookupPath:File){
val clothInfo = ArcAVMClothInfo() val clothInfo = ArcAVMClothInfo()
clothInfo.d1 = 600 clothInfo.d1 = 120
clothInfo.d3 = 5000 clothInfo.d3 = 680
clothInfo.d4 = 4900 clothInfo.d4 = 680
clothInfo.d5 = 5000 clothInfo.d5 = 810
clothInfo.d6 = 4000 clothInfo.d6 = 810
val chessInfoFront = ArcAVMChessInfo() val chessInfoFront = ArcAVMChessInfo()
chessInfoFront.imagePosType = ArcAVMCameraPosType.TYPE_FRONT chessInfoFront.imagePosType = ArcAVMCameraPosType.TYPE_FRONT
if (chessInfoFront.leftChessPoints != null) { if (chessInfoFront.leftChessPoints != null) {
...@@ -339,8 +341,8 @@ fun configCameraSequence(path:String,callback: ImageReaderEx.ImageCallback): Pic ...@@ -339,8 +341,8 @@ fun configCameraSequence(path:String,callback: ImageReaderEx.ImageCallback): Pic
return PictureConfiguration.get(PictureSequenceSource.GENERAL_CAMERA).apply { return PictureConfiguration.get(PictureSequenceSource.GENERAL_CAMERA).apply {
mPath = path mPath = path
mImageFormat = SpmCameraDevice.ImageDataCallback.IMAGE_FORMAT_NV21 mImageFormat = SpmCameraDevice.ImageDataCallback.IMAGE_FORMAT_NV21
mPicWidth = 1280 mPicWidth = IMAGE_WIDTH
mPicHeight = 720 mPicHeight = IMAGE_HEIGHT
mImageCallback = callback mImageCallback = callback
} }
} }
package com.waytous.avmdetect package com.intergration.avm.glsurface
import android.opengl.GLES20 import android.opengl.GLES20
import android.opengl.GLSurfaceView import android.opengl.GLSurfaceView
import android.opengl.Matrix import android.opengl.Matrix
import com.blankj.utilcode.util.LogUtils import com.blankj.utilcode.util.LogUtils
import com.intergration.avm.glsurface.MyGLProgram
import java.nio.ByteBuffer import java.nio.ByteBuffer
import javax.microedition.khronos.opengles.GL10 import javax.microedition.khronos.opengles.GL10
......
package com.waytous.avmdetect package com.intergration.avm.glsurface
import android.content.Context import android.content.Context
import android.opengl.GLSurfaceView import android.opengl.GLSurfaceView
......
...@@ -9,8 +9,7 @@ import com.intergration.avm.R ...@@ -9,8 +9,7 @@ import com.intergration.avm.R
import com.intergration.avm.utils.IMAGE_HEIGHT import com.intergration.avm.utils.IMAGE_HEIGHT
import com.intergration.avm.utils.IMAGE_WIDTH import com.intergration.avm.utils.IMAGE_WIDTH
import com.mediatek.smartplatform.PictureConfiguration import com.mediatek.smartplatform.PictureConfiguration
import com.waytous.avmdetect.MyGLSurfaceView import com.intergration.avm.glsurface.MyGLSurfaceView
import org.greenrobot.eventbus.EventBus
class AuxiliaryScreenPresentation(outerContext: Context, display: Display) : class AuxiliaryScreenPresentation(outerContext: Context, display: Display) :
Presentation(outerContext, display) { Presentation(outerContext, display) {
...@@ -26,8 +25,7 @@ class AuxiliaryScreenPresentation(outerContext: Context, display: Display) : ...@@ -26,8 +25,7 @@ class AuxiliaryScreenPresentation(outerContext: Context, display: Display) :
frameLayout = layoutInflater.inflate(R.layout.layout_presentation,null) as FrameLayout frameLayout = layoutInflater.inflate(R.layout.layout_presentation,null) as FrameLayout
setContentView(frameLayout) setContentView(frameLayout)
rendererView = frameLayout.findViewById<MyGLSurfaceView?>(R.id.rendererView).also { rendererView = frameLayout.findViewById<MyGLSurfaceView?>(R.id.rendererView).also {
it.setDisplayOrientation(90) it.setYuvDataSize(IMAGE_HEIGHT,IMAGE_WIDTH)
it.setYuvDataSize(IMAGE_WIDTH, IMAGE_HEIGHT)
} }
} }
......
...@@ -40,6 +40,8 @@ private val serviceConnection: ServiceConnection = object : ServiceConnection { ...@@ -40,6 +40,8 @@ private val serviceConnection: ServiceConnection = object : ServiceConnection {
} }
override fun onServiceDisconnected(name: ComponentName?) { override fun onServiceDisconnected(name: ComponentName?) {
LogUtils.d("停止副屏服务...")
multiScreenService?.dismissSecondPresentation()
//恢复置空 //恢复置空
multiScreenService = null multiScreenService = null
} }
...@@ -51,10 +53,8 @@ fun Context.openAuxiliaryPresentation(){ ...@@ -51,10 +53,8 @@ fun Context.openAuxiliaryPresentation(){
} }
fun Context.closeAuxiliaryPresentation(){ fun Context.closeAuxiliaryPresentation(){
if (multiScreenService != null) { LogUtils.i("解绑副屏服务")
multiScreenService?.dismissSecondPresentation() unbindService(serviceConnection)
unbindService(serviceConnection)
}
} }
fun feedData(data: ByteArray){ fun feedData(data: ByteArray){
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
android:textSize="24sp" android:textSize="24sp"
android:textColor="@android:color/holo_blue_light" android:textColor="@android:color/holo_blue_light"
android:layout_gravity="center_horizontal|top"/> android:layout_gravity="center_horizontal|top"/>
<com.waytous.avmdetect.MyGLSurfaceView <com.intergration.avm.glsurface.MyGLSurfaceView
android:id="@+id/rendererView" android:id="@+id/rendererView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"/> android:layout_height="match_parent"/>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment