Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
arcIntergration
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
马乐
arcIntergration
Commits
b4c399e3
Commit
b4c399e3
authored
Oct 12, 2023
by
马乐
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.增加3张拍照
2.增加10s视频录制
parent
1b04ad55
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
142 additions
and
24 deletions
+142
-24
DmsApp.kt
app/src/main/java/com/intergration/test/DmsApp.kt
+17
-0
MainActivity.kt
app/src/main/java/com/intergration/test/MainActivity.kt
+81
-9
dms.kt
app/src/main/java/com/intergration/test/dms/dms.kt
+8
-15
Utils.kt
app/src/main/java/com/intergration/test/utils/Utils.kt
+36
-0
No files found.
app/src/main/java/com/intergration/test/DmsApp.kt
0 → 100644
View file @
b4c399e3
package
com.intergration.test
import
android.app.Application
import
com.blankj.utilcode.util.CrashUtils
import
com.blankj.utilcode.util.LogUtils
import
com.blankj.utilcode.util.Utils
class
DmsApp
:
Application
()
{
override
fun
onCreate
()
{
super
.
onCreate
()
Utils
.
init
(
this
)
CrashUtils
.
init
()
LogUtils
.
getConfig
().
globalTag
=
"dms"
}
}
\ No newline at end of file
app/src/main/java/com/intergration/test/MainActivity.kt
View file @
b4c399e3
...
...
@@ -2,16 +2,21 @@ package com.intergration.test
import
android.Manifest
import
android.content.pm.PackageManager
import
android.media.CamcorderProfile
import
android.os.Bundle
import
android.os.Environment
import
android.util.Size
import
android.widget.Toast
import
androidx.activity.result.contract.ActivityResultContracts
import
androidx.appcompat.app.AppCompatActivity
import
androidx.core.app.ActivityCompat
import
androidx.core.content.ContextCompat
import
com.arcsoft.visdrive.sdk.ArcErrorInfo
import
com.arcsoft.visdrive.sdk.ArcVisDriveEngine
import
com.arcsoft.visdrive.sdk.constant.common.ArcModType
import
com.arcsoft.visdrive.sdk.model.common.ArcActiveEnvParam
import
com.blankj.utilcode.util.LogUtils
import
com.blankj.utilcode.util.TimeUtils
import
com.intergration.test.databinding.ActivityMainBinding
import
com.intergration.test.dms.CAMERA_ID_DMS
import
com.intergration.test.dms.COROUTINE_DMS
...
...
@@ -23,15 +28,23 @@ import com.intergration.test.dms.setDmsAlarmParams
import
com.intergration.test.dms.setDmsDistractScope
import
com.intergration.test.dms.setDmsDrivingStatus
import
com.intergration.test.dms.startDms
import
com.intergration.test.utils.DOT_PREFACE_DURATION
import
com.intergration.test.utils.VIDEO_FOLDER
import
com.mediatek.smartplatform.PreviewSource
import
com.mediatek.smartplatform.RecordConfiguration
import
com.mediatek.smartplatform.RecordSource
import
com.mediatek.smartplatform.SmartPlatformManager
import
com.mediatek.smartplatform.SpmCameraDevice
import
com.mediatek.smartplatform.SpmCameraDevice.VideoCallback
import
com.mediatek.smartplatform.VideoInfoMap
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.Job
import
kotlinx.coroutines.cancel
import
kotlinx.coroutines.delay
import
kotlinx.coroutines.launch
import
java.util.concurrent.CancellationException
class
MainActivity
:
AppCompatActivity
()
{
class
MainActivity
:
AppCompatActivity
()
,
VideoCallback
{
private
var
dmsCoroutineScope
:
DmsCoroutineScope
?
=
null
...
...
@@ -41,6 +54,12 @@ class MainActivity : AppCompatActivity() {
SmartPlatformManager
.
get
()
}
private
val
recordConfiguration
=
RecordConfiguration
.
get
(
RecordSource
.
GENERAL_CAMERA
).
apply
{
mCamcorderProfile
=
CamcorderProfile
.
get
(
CamcorderProfile
.
QUALITY_480P
)
mOutPutFilePath
=
VIDEO_FOLDER
mVideoCycleDeleteFileNum
=
3
}
private
var
dmsJob
:
Job
?
=
null
private
val
requestCameraPermission
=
registerForActivityResult
(
ActivityResultContracts
.
RequestMultiplePermissions
()){
granted
->
...
...
@@ -54,12 +73,8 @@ class MainActivity : AppCompatActivity() {
super
.
onCreate
(
savedInstanceState
)
binding
=
ActivityMainBinding
.
inflate
(
layoutInflater
)
setContentView
(
binding
.
root
)
if
(
ActivityCompat
.
checkSelfPermission
(
baseContext
,
Manifest
.
permission
.
CAMERA
)
!=
PackageManager
.
PERMISSION_GRANTED
)
{
requestCameraPermission
.
launch
(
arrayOf
(
Manifest
.
permission
.
CAMERA
,
Manifest
.
permission
.
READ_EXTERNAL_STORAGE
,
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
))
if
(!
allPermissionsGranted
())
{
requestCameraPermission
.
launch
(
REQUIRED_PERMISSIONS
)
}
binding
.
startDms
.
setOnClickListener
{
if
(
dmsCoroutineScope
==
null
)
{
...
...
@@ -69,11 +84,14 @@ class MainActivity : AppCompatActivity() {
)
}
dmsJob
=
dmsCoroutineScope
?.
launch
{
LogUtils
.
d
Tag
(
"dms"
,
"startDms"
)
LogUtils
.
d
(
"startDms"
)
try
{
coroutineContext
[
DmsCoroutineContext
]
?.
spmCameraDevice
?.
setPreviewSurface
(
binding
.
dmsPreview
.
holder
.
surface
,
PreviewSource
.
GENERAL_CAMERA
_EX
)
PreviewSource
.
GENERAL_CAMERA
)
coroutineContext
[
DmsCoroutineContext
]
?.
spmCameraDevice
?.
startPreview
()
recordConfiguration
.
mLockFileNamePrefix
=
"dms"
recordConfiguration
.
mVideoCallback
=
this
@MainActivity
coroutineContext
[
DmsCoroutineContext
]
?.
spmCameraDevice
?.
startRecord
(
RecordSource
.
GENERAL_CAMERA
,
recordConfiguration
)
var
result
=
ArcVisDriveEngine
.
activate
(
APP_ID
,
APP_SECRET
,
arrayOf
(
ArcModType
.
TYPE_DMS
,
ArcModType
.
TYPE_FR
),
ArcActiveEnvParam
().
apply
{
this
.
IMEI
=
DEVICE_IMEI
...
...
@@ -99,6 +117,19 @@ class MainActivity : AppCompatActivity() {
coroutineContext
[
DmsCoroutineContext
]
?.
engine
?.
let
{
engine
->
coroutineContext
[
DmsCoroutineContext
]
?.
spmCameraDevice
?.
startDms
(
engine
)
?.
collect
{
result
->
binding
.
detectResult
.
text
=
result
launch
(
Dispatchers
.
IO
){
coroutineContext
[
DmsCoroutineContext
]
?.
spmCameraDevice
?.
lockRecordingVideo
(
DOT_PREFACE_DURATION
,
""
,
RecordSource
.
GENERAL_CAMERA
)
}
launch
(
Dispatchers
.
IO
)
{
repeat
(
3
){
coroutineContext
[
DmsCoroutineContext
]
?.
spmCameraDevice
?.
takePicture
(
"${Environment.getExternalStorageDirectory().path}/waytous/alarm/dms-${TimeUtils.millis2String(System.currentTimeMillis(),"
yyyyMMddHHmmss
")}.jpg"
,
{
},
{
i
,
s
,
s2
->
}
)
delay
(
1000
)
}
}
}
}
}
catch
(
e
:
CancellationException
)
{
...
...
@@ -121,10 +152,50 @@ class MainActivity : AppCompatActivity() {
}
}
override
fun
onVideoTaken
(
videoInfo
:
VideoInfoMap
?)
{
when
(
videoInfo
?.
getInt
(
VideoInfoMap
.
KEY_RECORDER_EVENT_TYPE
)){
VideoCallback
.
VIDEO_EVENT_SDCARD_FULL
->
{
LogUtils
.
e
(
"SDCard已满"
)
smartPlatformManager
.
openCameraDevice
(
CAMERA_ID_DMS
).
stopRecord
(
RecordSource
.
GENERAL_CAMERA
)
}
VideoCallback
.
VIDEO_EVENT_RECORD_SDCARD_DAMAGED
->
{
LogUtils
.
e
(
"SDCard损坏"
)
smartPlatformManager
.
openCameraDevice
(
CAMERA_ID_DMS
).
stopRecord
(
RecordSource
.
GENERAL_CAMERA
)
}
VideoCallback
.
VIDEO_EVENT_RECORD_RECORDING_ERROR
->
{
LogUtils
.
e
(
"录制视频过程中发生错误"
)
smartPlatformManager
.
openCameraDevice
(
CAMERA_ID_DMS
).
stopRecord
(
RecordSource
.
GENERAL_CAMERA
)
}
VideoCallback
.
VIDEO_EVENT_KEYPOINT_STOP
->{
LogUtils
.
d
(
"录制打点视频结束"
)
}
}
}
override
fun
onVideoFrame
(
p0
:
ByteArray
?,
p1
:
Int
,
p2
:
Int
,
p3
:
String
?,
p4
:
Int
)
{
}
private
fun
allPermissionsGranted
()
=
REQUIRED_PERMISSIONS
.
all
{
ContextCompat
.
checkSelfPermission
(
baseContext
,
it
)
==
PackageManager
.
PERMISSION_GRANTED
}
companion
object
{
const
val
TAG
=
"dms"
const
val
APP_ID
=
"vdpoYwdwW15s8seKveftWJfsarrre9"
const
val
APP_SECRET
=
"dCdVvhH6tqgWuPMpsvuihPQDHkssWi"
const
val
DEVICE_IMEI
=
"d5e2f07694f674c4"
private
val
REQUIRED_PERMISSIONS
=
mutableListOf
(
Manifest
.
permission
.
CAMERA
,
Manifest
.
permission
.
RECORD_AUDIO
,
Manifest
.
permission
.
READ_PHONE_STATE
,
Manifest
.
permission
.
ACCESS_WIFI_STATE
,
Manifest
.
permission
.
CHANGE_WIFI_STATE
,
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
,
Manifest
.
permission
.
READ_EXTERNAL_STORAGE
,
).
toTypedArray
()
}
}
\ No newline at end of file
app/src/main/java/com/intergration/test/dms/dms.kt
View file @
b4c399e3
...
...
@@ -9,7 +9,6 @@ import com.arcsoft.visdrive.sdk.constant.common.ArcModType
import
com.arcsoft.visdrive.sdk.constant.dms.ArcDMSAlarmType
import
com.arcsoft.visdrive.sdk.constant.dms.ArcDMSDetectMaskType
import
com.arcsoft.visdrive.sdk.model.common.ArcDrivingStatus
import
com.arcsoft.visdrive.sdk.model.common.ArcImportLicenseInfo
import
com.arcsoft.visdrive.sdk.model.common.ArcInitParamInfo
import
com.arcsoft.visdrive.sdk.model.common.ArcInitParamInfoDetail
import
com.arcsoft.visdrive.sdk.model.dms.ArcDMSAlarmParam
...
...
@@ -18,6 +17,8 @@ import com.arcsoft.visdrive.sdk.model.dms.ArcDMSDistractScope
import
com.arcsoft.visdrive.sdk.model.dms.ArcDMSInitParam
import
com.blankj.utilcode.util.FileUtils
import
com.blankj.utilcode.util.LogUtils
import
com.intergration.test.utils.DMS_PIC_HEIGHT
import
com.intergration.test.utils.DMS_PIC_WIDTH
import
com.intergration.test.utils.toByteBuffer
import
com.mediatek.smartplatform.ImageReaderEx
import
com.mediatek.smartplatform.PictureConfiguration
...
...
@@ -26,28 +27,18 @@ import com.mediatek.smartplatform.SmartPlatformManager
import
com.mediatek.smartplatform.SpmCameraDevice
import
kotlinx.coroutines.CoroutineName
import
kotlinx.coroutines.CoroutineScope
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.Job
import
kotlinx.coroutines.SupervisorJob
import
kotlinx.coroutines.cancel
import
kotlinx.coroutines.channels.awaitClose
import
kotlinx.coroutines.channels.produce
import
kotlinx.coroutines.coroutineScope
import
kotlinx.coroutines.ensureActive
import
kotlinx.coroutines.flow.callbackFlow
import
kotlinx.coroutines.launch
import
java.io.Closeable
import
java.io.File
import
java.nio.ByteBuffer
import
java.util.concurrent.Executors
import
kotlin.coroutines.AbstractCoroutineContextElement
import
kotlin.coroutines.CoroutineContext
val
COROUTINE_DMS
=
CoroutineName
(
"dms"
)
const
val
DMS_PIC_WIDTH
=
1280
const
val
DMS_PIC_HEIGHT
=
720
const
val
CAMERA_ID_DMS
=
"0"
val
dmsResult
by
lazy
{
...
...
@@ -127,12 +118,12 @@ fun ArcVisDriveEngine.setDmsDrivingStatus(speed:Int = 50):Int{
}
fun
SpmCameraDevice
.
startDms
(
engin
:
ArcVisDriveEngine
)
=
callbackFlow
{
val
fr
Dir
=
File
(
Environment
.
getExternalStorageDirectory
(),
"dms/"
)
if
(!
FileUtils
.
isFileExists
(
fr
Dir
))
{
FileUtils
.
createOrExistsDir
(
fr
Dir
)
val
dms
Dir
=
File
(
Environment
.
getExternalStorageDirectory
(),
"dms/"
)
if
(!
FileUtils
.
isFileExists
(
dms
Dir
))
{
FileUtils
.
createOrExistsDir
(
dms
Dir
)
}
val
pictureConfig
=
PictureConfiguration
.
get
(
PictureSequenceSource
.
GENERAL_CAMERA
)
pictureConfig
.
mPath
=
fr
Dir
.
absolutePath
pictureConfig
.
mPath
=
dms
Dir
.
absolutePath
pictureConfig
.
mImageFormat
=
SpmCameraDevice
.
ImageDataCallback
.
IMAGE_FORMAT_NV21
pictureConfig
.
mPicWidth
=
DMS_PIC_WIDTH
pictureConfig
.
mPicHeight
=
DMS_PIC_HEIGHT
...
...
@@ -192,6 +183,7 @@ fun SpmCameraDevice.startDms(engin:ArcVisDriveEngine) = callbackFlow{
startPictureSequence
(
PictureSequenceSource
.
GENERAL_CAMERA
,
pictureConfig
)
awaitClose
{
LogUtils
.
dTag
(
"dms"
,
"dms detect ended"
)
stopPictureSequence
(
PictureSequenceSource
.
GENERAL_CAMERA
)
engin
.
unInit
()
}
}
\ No newline at end of file
app/src/main/java/com/intergration/test/utils/Utils.kt
View file @
b4c399e3
package
com.intergration.test.utils
import
com.blankj.utilcode.util.LogUtils
import
com.mediatek.smartplatform.RecordConfiguration
import
com.mediatek.smartplatform.RecordSource
import
com.mediatek.smartplatform.SpmCameraDevice
import
com.mediatek.smartplatform.VideoInfoMap
import
java.nio.ByteBuffer
const
val
DMS_PIC_WIDTH
=
1280
const
val
DMS_PIC_HEIGHT
=
720
const
val
DOT_PREFACE_DURATION
=
5
const
val
VIDEO_FOLDER
=
"sdcard/waytous/alarm/"
fun
SpmCameraDevice
.
recordVideo
(
prefix
:
String
){
val
recordConfiguration
=
RecordConfiguration
.
get
(
RecordSource
.
GENERAL_CAMERA
).
apply
{
mLockFileNamePrefix
=
prefix
mOutPutFilePath
=
VIDEO_FOLDER
mVideoCycleDeleteFileNum
=
3
}
recordConfiguration
.
mVideoCallback
=
object
:
SpmCameraDevice
.
VideoCallback
{
override
fun
onVideoTaken
(
videoInfo
:
VideoInfoMap
?)
{
when
(
videoInfo
?.
getInt
(
VideoInfoMap
.
KEY_RECORDER_EVENT_TYPE
)){
SpmCameraDevice
.
VideoCallback
.
VIDEO_EVENT_SDCARD_FULL
->
LogUtils
.
e
(
"SDCard已满"
)
SpmCameraDevice
.
VideoCallback
.
VIDEO_EVENT_RECORD_SDCARD_DAMAGED
->
LogUtils
.
e
(
"SDCard损坏"
)
SpmCameraDevice
.
VideoCallback
.
VIDEO_EVENT_RECORD_RECORDING_ERROR
->
LogUtils
.
e
(
"录制视频过程中发生错误"
)
}
stopRecord
(
RecordSource
.
GENERAL_CAMERA
)
}
override
fun
onVideoFrame
(
p0
:
ByteArray
?,
p1
:
Int
,
p2
:
Int
,
p3
:
String
?,
p4
:
Int
)
{
}
}
startRecord
(
RecordSource
.
GENERAL_CAMERA
,
recordConfiguration
)
}
fun
ByteArray
.
toByteBuffer
():
ByteBuffer
{
val
buffer
=
ByteBuffer
.
allocateDirect
(
size
).
also
{
it
.
put
(
this
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment