8#ifndef META_OCEAN_MEDIA_ANDROID_NATIVE_MEDIA_LIBRARY_H
9#define META_OCEAN_MEDIA_ANDROID_NATIVE_MEDIA_LIBRARY_H
17#if defined(__ANDROID_API__) && __ANDROID_API__ >= 21
19#ifndef OCEAN_MEDIA_ANDROID_NATIVEMEDIALIBRARY_AVAILABLE
20 #define OCEAN_MEDIA_ANDROID_NATIVEMEDIALIBRARY_AVAILABLE
23#if __ANDROID_API__ >= 24
24 #include <media/NdkImageReader.h>
27#include <media/NdkMediaCodec.h>
28#include <media/NdkMediaExtractor.h>
29#include <media/NdkMediaFormat.h>
30#include <media/NdkMediaMuxer.h>
97 static constexpr const char* AMEDIAFORMAT_KEY_MIME =
"mime";
98 static constexpr const char* AMEDIAFORMAT_KEY_COLOR_FORMAT =
"color-format";
99 static constexpr const char* AMEDIAFORMAT_KEY_COLOR_RANGE =
"color-range";
100 static constexpr const char* AMEDIAFORMAT_KEY_WIDTH =
"width";
101 static constexpr const char* AMEDIAFORMAT_KEY_HEIGHT =
"height";
102 static constexpr const char* AMEDIAFORMAT_KEY_STRIDE =
"stride";
103 static constexpr const char* AMEDIAFORMAT_KEY_SLICE_HEIGHT =
"slice-height";
104 static constexpr const char* AMEDIAFORMAT_KEY_DURATION =
"durationUs";
105 static constexpr const char* AMEDIAFORMAT_KEY_BITS_PER_SAMPLE =
"bits-per-sample";
106 static constexpr const char* AMEDIAFORMAT_KEY_BIT_RATE =
"bitrate";
107 static constexpr const char* AMEDIAFORMAT_KEY_SAMPLE_RATE =
"sample-rate";
108 static constexpr const char* AMEDIAFORMAT_KEY_CHANNEL_COUNT =
"channel-count";
109 static constexpr const char* AMEDIAFORMAT_KEY_PCM_ENCODING =
"pcm-encoding";
110 static constexpr const char* AMEDIAFORMAT_KEY_DISPLAY_HEIGHT =
"display-height";
111 static constexpr const char* AMEDIAFORMAT_KEY_DISPLAY_CROP =
"crop";
112 static constexpr const char* AMEDIAFORMAT_KEY_CAPTURE_RATE =
"capture-rate";
113 static constexpr const char* AMEDIAFORMAT_KEY_FRAME_RATE =
"frame-rate";
114 static constexpr const char* AMEDIAFORMAT_KEY_I_FRAME_INTERVAL =
"i-frame-interval";
118#if __ANDROID_API__ >= 24
137 using Function_AImageReader_new = media_status_t (int32_t width, int32_t height, int32_t format, int32_t maxImages, AImageReader** reader);
155 using Function_AMediaCodec_configure = media_status_t (AMediaCodec* codec,
const AMediaFormat* format, ANativeWindow* surface, AMediaCrypto* crypto, uint32_t flags);
226 inline bool isInitialized()
const;
228#if __ANDROID_API__ >= 24
233 inline void AImage_delete(AImage* image)
const;
234 inline media_status_t AImage_getWidth(
const AImage* image, int32_t* width)
const;
235 inline media_status_t AImage_getHeight(
const AImage* image, int32_t* height)
const;
236 inline media_status_t AImage_getFormat(
const AImage* image, int32_t* format)
const;
237 inline media_status_t AImage_getCropRect(
const AImage* image, AImageCropRect* rect)
const;
238 inline media_status_t AImage_getTimestamp(
const AImage* image, int64_t* timestampNs)
const;
239 inline media_status_t AImage_getNumberOfPlanes(
const AImage* image, int32_t* numPlanes)
const;
240 inline media_status_t AImage_getPlanePixelStride(
const AImage* image,
int planeIdx, int32_t* pixelStride)
const;
241 inline media_status_t AImage_getPlaneRowStride(
const AImage* image,
int planeIdx, int32_t* rowStride)
const;
242 inline media_status_t AImage_getPlaneData(
const AImage* image,
int planeIdx, uint8_t** data,
int* dataLength)
const;
247 inline media_status_t AImageReader_new(int32_t width, int32_t height, int32_t format, int32_t maxImages, AImageReader** reader)
const;
248 inline void AImageReader_delete(AImageReader* reader)
const;
249 inline media_status_t AImageReader_getWindow(AImageReader* reader, ANativeWindow** window)
const;
250 inline media_status_t AImageReader_getWidth(
const AImageReader* reader, int32_t* width)
const;
251 inline media_status_t AImageReader_getHeight(
const AImageReader* reader, int32_t* height)
const;
252 inline media_status_t AImageReader_getFormat(
const AImageReader* reader, int32_t* format)
const;
253 inline media_status_t AImageReader_getMaxImages(
const AImageReader* reader, int32_t* maxImages)
const;
254 inline media_status_t AImageReader_acquireNextImage(AImageReader* reader, AImage** image)
const;
255 inline media_status_t AImageReader_acquireLatestImage(AImageReader* reader, AImage** image)
const;
256 inline media_status_t AImageReader_setImageListener(AImageReader* reader, AImageReader_ImageListener* listener)
const;
263 inline AMediaCodec* AMediaCodec_createDecoderByType(
const char* mime_type)
const;
264 inline AMediaCodec* AMediaCodec_createEncoderByType(
const char* mime_type)
const;
265 inline media_status_t AMediaCodec_configure(AMediaCodec* codec,
const AMediaFormat* format, ANativeWindow* surface, AMediaCrypto* crypto, uint32_t flags)
const;
266 inline media_status_t AMediaCodec_delete(AMediaCodec* codec)
const;
267 inline ssize_t AMediaCodec_dequeueInputBuffer(AMediaCodec* codec, int64_t timeoutUs)
const;
268 inline ssize_t AMediaCodec_dequeueOutputBuffer(AMediaCodec* codec, AMediaCodecBufferInfo* info, int64_t timeoutUs)
const;
269 inline media_status_t AMediaCodec_flush(AMediaCodec* codec)
const;
270 inline AMediaFormat* AMediaCodec_getBufferFormat(AMediaCodec* codec,
size_t index)
const;
271 inline uint8_t* AMediaCodec_getInputBuffer(AMediaCodec* codec,
size_t idx,
size_t* out_size)
const;
272 inline AMediaFormat* AMediaCodec_getInputFormat(AMediaCodec* codec)
const;
273 inline uint8_t* AMediaCodec_getOutputBuffer(AMediaCodec* codec,
size_t idx,
size_t* out_size)
const;
274 inline AMediaFormat* AMediaCodec_getOutputFormat(AMediaCodec* codec)
const;
275 inline media_status_t AMediaCodec_queueInputBuffer(AMediaCodec* codec,
size_t idx,
unsigned int offset,
size_t size, uint64_t time, uint32_t flags)
const;
276 inline media_status_t AMediaCodec_releaseOutputBuffer(AMediaCodec* codec,
size_t idx,
bool render)
const;
277 inline media_status_t AMediaCodec_start(AMediaCodec* codec)
const;
278 inline media_status_t AMediaCodec_stop(AMediaCodec* codec)
const;
283 inline media_status_t AMediaFormat_delete(AMediaFormat* format)
const;
284 inline AMediaFormat* AMediaFormat_new()
const;
285 inline bool AMediaFormat_getInt32(AMediaFormat* mediaFormat,
const char* name, int32_t* out)
const;
286 inline bool AMediaFormat_getInt64(AMediaFormat* mediaFormat,
const char* name, int64_t* out)
const;
287 inline bool AMediaFormat_getString(AMediaFormat* mediaFormat,
const char* name,
const char** out)
const;
288 inline bool AMediaFormat_getRect(AMediaFormat *,
const char *name, int32_t *left, int32_t *top, int32_t *right, int32_t *bottom)
const;
289 inline void AMediaFormat_setBuffer(AMediaFormat* format,
const char* name,
const void* data,
size_t size)
const;
290 inline void AMediaFormat_setFloat(AMediaFormat* format,
const char* name,
float value)
const;
291 inline void AMediaFormat_setInt32(AMediaFormat* format,
const char* name, int32_t value)
const;
292 inline void AMediaFormat_setInt64(AMediaFormat* format,
const char* name, int64_t value)
const;
293 inline void AMediaFormat_setString(AMediaFormat* format,
const char* name,
const char* value)
const;
294 inline const char* AMediaFormat_toString(AMediaFormat* format)
const;
299 inline ssize_t AMediaMuxer_addTrack(AMediaMuxer* muxer,
const AMediaFormat* format)
const;
300 inline media_status_t AMediaMuxer_delete(AMediaMuxer* muxer)
const;
301 inline AMediaMuxer* AMediaMuxer_new(
int fd, OutputFormat format)
const;
302 inline media_status_t AMediaMuxer_setLocation(AMediaMuxer* muxer,
float latitude,
float longitude)
const;
303 inline media_status_t AMediaMuxer_setOrientationHint(AMediaMuxer* muxer,
int degrees)
const;
304 inline media_status_t AMediaMuxer_start(AMediaMuxer* muxer)
const;
305 inline media_status_t AMediaMuxer_stop(AMediaMuxer* muxer)
const;
306 inline media_status_t AMediaMuxer_writeSampleData(AMediaMuxer* muxer,
size_t trackIdx,
const uint8_t* data,
const AMediaCodecBufferInfo* info)
const;
311 inline bool AMediaExtractor_advance(AMediaExtractor* mediaExtractor)
const;
312 inline media_status_t AMediaExtractor_delete(AMediaExtractor* mediaExtractor)
const;
313 inline int64_t AMediaExtractor_getSampleTime(AMediaExtractor* mediaExtractor)
const;
314 inline size_t AMediaExtractor_getTrackCount(AMediaExtractor* mediaExtractor)
const;
315 inline AMediaFormat* AMediaExtractor_getTrackFormat(AMediaExtractor* mediaExtractor,
size_t idx)
const;
316 inline AMediaExtractor* AMediaExtractor_new()
const;
317 inline ssize_t AMediaExtractor_readSampleData(AMediaExtractor* mediaExtractor, uint8_t* buffer,
size_t capacity)
const;
318 inline media_status_t AMediaExtractor_seekTo(AMediaExtractor* mediaExtractor, int64_t seekPosUs, SeekMode mode)
const;
319 inline media_status_t AMediaExtractor_selectTrack(AMediaExtractor* mediaExtractor,
size_t idx)
const;
320 inline media_status_t AMediaExtractor_setDataSource(AMediaExtractor* mediaExtractor,
const char* location)
const;
321 inline media_status_t AMediaExtractor_setDataSourceFd(AMediaExtractor* mediaExtractor,
int fd, off64_t offset, off64_t length)
const;
349 void* libraryHandle_ =
nullptr;
351#if __ANDROID_API__ >= 24
435 unsigned int initializationCounter_ = 0u;
465#if __ANDROID_API__ >= 24
This class implements a recursive lock object.
Definition Lock.h:31
This class implements a scoped lock object for recursive lock objects.
Definition Lock.h:135
This class wraps an unmanaged object (or reference) which needs to be released after usage.
Definition ScopedObject.h:28
This template class is the base class for all singleton objects.
Definition Singleton.h:71
static NativeMediaLibrary & get()
Returns a reference to the unique object.
Definition Singleton.h:115
The namespace covering the entire Ocean framework.
Definition Accessor.h:15