Skip to content

Commit 83f4e5e

Browse files
committed
ndk: add legacy media compatibility module
1 parent b237b13 commit 83f4e5e

4 files changed

Lines changed: 148 additions & 0 deletions

File tree

‎compat/xaionaro-go-ndk/go.mod‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module github.com/xaionaro-go/ndk
2+
3+
go 1.25.0
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
//go:build android && cgo
2+
3+
// Copyright 2018-2024 The gooid Authors. All rights reserved.
4+
// Use of this source code is governed by a MIT-style license.
5+
6+
package media
7+
8+
import (
9+
"fmt"
10+
)
11+
12+
// #include <media/NdkMediaError.h>
13+
import "C"
14+
15+
// MediaStatus is an NDK media_status_t value.
16+
type MediaStatus int
17+
18+
const (
19+
MEDIA_OK = MediaStatus(C.AMEDIA_OK)
20+
21+
ERROR_BASE = MediaStatus(C.AMEDIA_ERROR_BASE)
22+
ERROR_UNKNOWN = MediaStatus(C.AMEDIA_ERROR_UNKNOWN)
23+
ERROR_MALFORMED = MediaStatus(C.AMEDIA_ERROR_MALFORMED)
24+
ERROR_UNSUPPORTED = MediaStatus(C.AMEDIA_ERROR_UNSUPPORTED)
25+
ERROR_INVALID_OBJECT = MediaStatus(C.AMEDIA_ERROR_INVALID_OBJECT)
26+
ERROR_INVALID_PARAMETER = MediaStatus(C.AMEDIA_ERROR_INVALID_PARAMETER)
27+
ERROR_INVALID_OPERATION = MediaStatus(C.AMEDIA_ERROR_INVALID_OPERATION)
28+
29+
DRM_ERROR_BASE = MediaStatus(C.AMEDIA_DRM_ERROR_BASE)
30+
DRM_NOT_PROVISIONED = MediaStatus(C.AMEDIA_DRM_NOT_PROVISIONED)
31+
DRM_RESOURCE_BUSY = MediaStatus(C.AMEDIA_DRM_RESOURCE_BUSY)
32+
DRM_DEVICE_REVOKED = MediaStatus(C.AMEDIA_DRM_DEVICE_REVOKED)
33+
DRM_SHORT_BUFFER = MediaStatus(C.AMEDIA_DRM_SHORT_BUFFER)
34+
DRM_SESSION_NOT_OPENED = MediaStatus(C.AMEDIA_DRM_SESSION_NOT_OPENED)
35+
DRM_TAMPER_DETECTED = MediaStatus(C.AMEDIA_DRM_TAMPER_DETECTED)
36+
DRM_VERIFY_FAILED = MediaStatus(C.AMEDIA_DRM_VERIFY_FAILED)
37+
DRM_NEED_KEY = MediaStatus(C.AMEDIA_DRM_NEED_KEY)
38+
DRM_LICENSE_EXPIRED = MediaStatus(C.AMEDIA_DRM_LICENSE_EXPIRED)
39+
40+
IMGREADER_ERROR_BASE = MediaStatus(C.AMEDIA_IMGREADER_ERROR_BASE)
41+
IMGREADER_NO_BUFFER_AVAILABLE = MediaStatus(C.AMEDIA_IMGREADER_NO_BUFFER_AVAILABLE)
42+
IMGREADER_MAX_IMAGES_ACQUIRED = MediaStatus(C.AMEDIA_IMGREADER_MAX_IMAGES_ACQUIRED)
43+
IMGREADER_CANNOT_LOCK_IMAGE = MediaStatus(C.AMEDIA_IMGREADER_CANNOT_LOCK_IMAGE)
44+
IMGREADER_CANNOT_UNLOCK_IMAGE = MediaStatus(C.AMEDIA_IMGREADER_CANNOT_UNLOCK_IMAGE)
45+
IMGREADER_IMAGE_NOT_LOCKED = MediaStatus(C.AMEDIA_IMGREADER_IMAGE_NOT_LOCKED)
46+
)
47+
48+
func (i MediaStatus) Error() string {
49+
switch i {
50+
case ERROR_UNKNOWN:
51+
return "ERROR_UNKNOWN"
52+
case ERROR_MALFORMED:
53+
return "ERROR_MALFORMED"
54+
case ERROR_UNSUPPORTED:
55+
return "ERROR_UNSUPPORTED"
56+
case ERROR_INVALID_OBJECT:
57+
return "ERROR_INVALID_OBJECT"
58+
case ERROR_INVALID_PARAMETER:
59+
return "ERROR_INVALID_PARAMETER"
60+
case ERROR_INVALID_OPERATION:
61+
return "ERROR_INVALID_OPERATION"
62+
case DRM_NOT_PROVISIONED:
63+
return "DRM_NOT_PROVISIONED"
64+
case DRM_RESOURCE_BUSY:
65+
return "DRM_RESOURCE_BUSY"
66+
case DRM_DEVICE_REVOKED:
67+
return "DRM_DEVICE_REVOKED"
68+
case DRM_SHORT_BUFFER:
69+
return "DRM_SHORT_BUFFER"
70+
case DRM_SESSION_NOT_OPENED:
71+
return "DRM_SESSION_NOT_OPENED"
72+
case DRM_TAMPER_DETECTED:
73+
return "DRM_TAMPER_DETECTED"
74+
case DRM_VERIFY_FAILED:
75+
return "DRM_VERIFY_FAILED"
76+
case DRM_NEED_KEY:
77+
return "DRM_NEED_KEY"
78+
case DRM_LICENSE_EXPIRED:
79+
return "DRM_LICENSE_EXPIRED"
80+
case IMGREADER_NO_BUFFER_AVAILABLE:
81+
return "IMGREADER_NO_BUFFER_AVAILABLE"
82+
case IMGREADER_MAX_IMAGES_ACQUIRED:
83+
return "IMGREADER_MAX_IMAGES_ACQUIRED"
84+
case IMGREADER_CANNOT_LOCK_IMAGE:
85+
return "IMGREADER_CANNOT_LOCK_IMAGE"
86+
case IMGREADER_CANNOT_UNLOCK_IMAGE:
87+
return "IMGREADER_CANNOT_UNLOCK_IMAGE"
88+
case IMGREADER_IMAGE_NOT_LOCKED:
89+
return "IMGREADER_IMAGE_NOT_LOCKED"
90+
}
91+
return fmt.Sprintf("ERROR_MEDIA_%d", i)
92+
}
93+
94+
// CMediaStatusToError converts an NDK media status to the corresponding Go error.
95+
func CMediaStatusToError(status C.media_status_t) error {
96+
if MediaStatus(status) != MEDIA_OK {
97+
return MediaStatus(status)
98+
}
99+
return nil
100+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
//go:build android && cgo
2+
3+
// Copyright 2018-2024 The gooid Authors. All rights reserved.
4+
// Use of this source code is governed by a MIT-style license.
5+
6+
package media
7+
8+
// #cgo LDFLAGS: -lmediandk
9+
// #include <sys/types.h>
10+
// #include <media/NdkMediaCodec.h>
11+
// #include <media/NdkMediaFormat.h>
12+
import "C"
13+
14+
// MediaCodec is a non-owning view of an NDK AMediaCodec handle.
15+
type MediaCodec C.AMediaCodec
16+
17+
// CPointer returns the underlying NDK handle without transferring ownership.
18+
func (mc *MediaCodec) CPointer() *C.AMediaCodec {
19+
return (*C.AMediaCodec)(mc)
20+
}
21+
22+
// SetParameters applies params to the codec.
23+
func (mc *MediaCodec) SetParameters(params *MediaFormat) error {
24+
status := C.AMediaCodec_setParameters(mc.CPointer(), params.CPointer())
25+
return CMediaStatusToError(status)
26+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
//go:build android && cgo
2+
3+
// Copyright 2018-2024 The gooid Authors. All rights reserved.
4+
// Use of this source code is governed by a MIT-style license.
5+
6+
package media
7+
8+
// #cgo LDFLAGS: -lmediandk
9+
// #include <sys/types.h>
10+
// #include <media/NdkMediaFormat.h>
11+
import "C"
12+
13+
// MediaFormat is a non-owning view of an NDK AMediaFormat handle.
14+
type MediaFormat C.AMediaFormat
15+
16+
// CPointer returns the underlying NDK handle without transferring ownership.
17+
func (mf *MediaFormat) CPointer() *C.AMediaFormat {
18+
return (*C.AMediaFormat)(mf)
19+
}

0 commit comments

Comments
 (0)