blob: 3b0ba9ba4693e2512bfffa180c15d0478cae76dc [file] [log] [blame]
Vikas Sonieef5fab2018-05-03 00:51:381// Copyright 2018 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Vikas Soniacd0a962018-07-17 22:47:595#ifndef BASE_ANDROID_ANDROID_IMAGE_READER_ABI_H_
6#define BASE_ANDROID_ANDROID_IMAGE_READER_ABI_H_
Vikas Sonieef5fab2018-05-03 00:51:387
8// Minimal binary interface definitions for AImage,AImageReader
9// and ANativeWindow based on include/media/NdkImage.h,
10// include/media/NdkImageReader.h and include/android/native_window_jni.h
11// from the Android NDK for platform level 26+. This is only
12// intended for use from the AndroidImageReader wrapper for building
13// without NDK platform level support, it is not a general-use header
14// and is not complete. Only the functions/data types which
15// are currently needed by media/gpu/android/image_reader_gl_owner.h are
16// included in this ABI
17//
18// Please refer to the API documentation for details:
19// https://developer.android.com/ndk/reference/group/media (AIMage and
20// AImageReader)
21// https://developer.android.com/ndk/reference/group/native-activity
22// (ANativeWindow)
23
24#include <android/native_window.h>
25#include <media/NdkMediaError.h>
26
27#include <jni.h>
28#include <stdint.h>
29
30// Use "C" linkage to match the original header file. This isn't strictly
31// required since the file is not declaring global functions, but the types
32// should remain in the global namespace for compatibility, and it's a reminder
33// that forward declarations elsewhere should use "extern "C" to avoid
34// namespace issues.
35extern "C" {
36
37// For AImage
38typedef struct AHardwareBuffer AHardwareBuffer;
39
40typedef struct AImage AImage;
41
42enum AIMAGE_FORMATS {
43 AIMAGE_FORMAT_YUV_420_888 = 0x23,
Vikas Sonie015a252018-08-16 20:06:2644 AIMAGE_FORMAT_PRIVATE = 0x22
Vikas Sonieef5fab2018-05-03 00:51:3845};
46
47using pAImage_delete = void (*)(AImage* image);
48
Vikas Soni158fa75a2018-05-25 20:11:2549using pAImage_deleteAsync = void (*)(AImage* image, int releaseFenceFd);
50
Vikas Sonieef5fab2018-05-03 00:51:3851using pAImage_getHardwareBuffer = media_status_t (*)(const AImage* image,
52 AHardwareBuffer** buffer);
53
54using pAImage_getWidth = media_status_t (*)(const AImage* image,
55 int32_t* width);
56
57using pAImage_getHeight = media_status_t (*)(const AImage* image,
58 int32_t* height);
59
60// For AImageReader
61
62typedef struct AImageReader AImageReader;
63
64typedef void (*AImageReader_ImageCallback)(void* context, AImageReader* reader);
65
66typedef struct AImageReader_ImageListener {
67 void* context;
68 AImageReader_ImageCallback onImageAvailable;
69} AImageReader_ImageListener;
70
Vikas Sonie015a252018-08-16 20:06:2671using pAImageReader_newWithUsage = media_status_t (*)(int32_t width,
72 int32_t height,
73 int32_t format,
74 uint64_t usage,
75 int32_t maxImages,
76 AImageReader** reader);
Vikas Sonieef5fab2018-05-03 00:51:3877
78using pAImageReader_setImageListener =
79 media_status_t (*)(AImageReader* reader,
80 AImageReader_ImageListener* listener);
81
82using pAImageReader_delete = void (*)(AImageReader* reader);
83
84using pAImageReader_getWindow = media_status_t (*)(AImageReader* reader,
85 ANativeWindow** window);
86
Khushal8b444f92019-01-25 23:30:4387using pAImageReader_getFormat = media_status_t (*)(const AImageReader* reader,
88 int32_t* format);
89
Vikas Sonieef5fab2018-05-03 00:51:3890using pAImageReader_acquireLatestImageAsync =
91 media_status_t (*)(AImageReader* reader,
92 AImage** image,
93 int* acquireFenceFd);
94
95// For ANativeWindow
96using pANativeWindow_toSurface = jobject (*)(JNIEnv* env,
97 ANativeWindow* window);
98
99} // extern "C"
100
Vikas Soniacd0a962018-07-17 22:47:59101#endif // BASE_ANDROID_ANDROID_IMAGE_READER_ABI_H_