Compare commits

..

11 Commits

Author SHA1 Message Date
Björn Ritzl
5db8d5c072 Update index.md 2025-06-04 07:47:27 +02:00
AGulev
851f3dee87 fix font 2024-02-27 07:55:43 +01:00
AGulev
73c3596156 fix manifest 2023-09-30 16:05:53 +02:00
Alexey Gulev
d58f5ec46b
Update build.gradle 2023-09-30 15:48:47 +02:00
Björn Ritzl
89de4ccd59
Merge pull request #11 from rthery/patch-1
Fix source code link for extension-camera
2023-02-08 22:34:27 +01:00
Romain Théry
e32dd144b6
Fix source code link for extension-camera 2023-02-08 21:16:38 +01:00
JCash
6d420fc011 Use constructor for dmScript::LuaHBuffer 2021-12-15 11:48:15 +01:00
Alexey Gulev
e07bd373ec Check supported parameters 2021-11-20 09:47:01 +01:00
Alexey Gulev
6b01fcb6d6 fix typo 2021-11-20 08:34:30 +01:00
Alexey Gulev
cb4ab80e04 possible fix for crash https://github.com/defold/extension-camera/issues/10 2021-11-20 08:31:45 +01:00
Björn Ritzl
406edd5c37 Update index.md 2021-11-18 10:09:27 +01:00
8 changed files with 66 additions and 81 deletions

View File

@ -1,18 +1,10 @@
name: "Camera" name: "Camera"
platforms: platforms:
x86_64-osx: osx:
context:
frameworks: ["AVFoundation", "CoreMedia"]
x86-osx:
context: context:
frameworks: ["AVFoundation", "CoreMedia"] frameworks: ["AVFoundation", "CoreMedia"]
arm64-ios: ios:
context:
frameworks: ["AVFoundation", "CoreMedia", "UIKit"]
armv7-ios:
context: context:
frameworks: ["AVFoundation", "CoreMedia", "UIKit"] frameworks: ["AVFoundation", "CoreMedia", "UIKit"]

View File

@ -1,3 +1,7 @@
dependencies { repositories {
compile 'androidx.core:core:1.2.0' mavenCentral()
}
dependencies {
implementation 'androidx.core:core:1.2.0'
} }

View File

@ -45,7 +45,7 @@ public class AndroidCamera extends Fragment
private boolean newFrame; private boolean newFrame;
private int position; private int position;
private int quality; private int quality;
private Camera.Size size; private Camera.Size previewSize;
private static Context context; private static Context context;
@ -132,26 +132,43 @@ public class AndroidCamera extends Fragment
Camera.Parameters params = camera.getParameters(); Camera.Parameters params = camera.getParameters();
List<Camera.Size> sizes = params.getSupportedPreviewSizes(); List<Camera.Size> previewSizes = params.getSupportedPreviewSizes();
List<String> focusModes = params.getSupportedFocusModes();
List<Camera.Size> pictureSizes = params.getSupportedPictureSizes();
List<Integer> supportedFormats = params.getSupportedPictureFormats();
Camera.Size pictureSize;
switch(this.quality) switch(this.quality)
{ {
case CAPTURE_QUALITY_HIGH: case CAPTURE_QUALITY_HIGH:
this.size = sizes.get(sizes.size() - 1); this.previewSize = previewSizes.get(previewSizes.size() - 1);
pictureSize = pictureSizes.get(previewSizes.size() - 1);
break; break;
case CAPTURE_QUALITY_LOW: case CAPTURE_QUALITY_LOW:
this.size = sizes.get(0); this.previewSize = previewSizes.get(0);
pictureSize = pictureSizes.get(0);
break; break;
case CAPTURE_QUALITY_MEDIUM: case CAPTURE_QUALITY_MEDIUM:
default: default:
this.size = sizes.get((int)Math.ceil(sizes.size() / 2)); this.previewSize = previewSizes.get((int)Math.ceil(previewSizes.size() / 2));
pictureSize = pictureSizes.get((int)Math.ceil(previewSizes.size() / 2));
break; break;
} }
params.setPreviewSize(this.size.width, this.size.height); if (focusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE))
params.setPictureSize(this.size.width, this.size.height); {
params.setPictureFormat(PixelFormat.JPEG); params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
params.setJpegQuality(90); }
params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
params.setPreviewSize(this.previewSize.width, this.previewSize.height);
params.setPictureSize(pictureSize.width, pictureSize.height);
if (supportedFormats.contains(PixelFormat.JPEG))
{
params.setPictureFormat(PixelFormat.JPEG);
params.setJpegQuality(90);
}
camera.setParameters(params); camera.setParameters(params);
final Activity activity = (Activity)context; final Activity activity = (Activity)context;
@ -166,7 +183,7 @@ public class AndroidCamera extends Fragment
if(rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270) if(rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270)
flip = true; flip = true;
int[] pixels = convertYUV420_NV21toARGB8888(data, AndroidCamera.this.size.width, AndroidCamera.this.size.height, flip); int[] pixels = convertYUV420_NV21toARGB8888(data, AndroidCamera.this.previewSize.width, AndroidCamera.this.previewSize.height, flip);
frameUpdate(pixels); frameUpdate(pixels);
} }
}); });
@ -179,7 +196,7 @@ public class AndroidCamera extends Fragment
{ {
} }
captureStarted(this.size.width, this.size.height); captureStarted(this.previewSize.width, this.previewSize.height);
camera.startPreview(); camera.startPreview();
queueMessage(CAMERA_STARTED); queueMessage(CAMERA_STARTED);
} }

View File

@ -7,7 +7,6 @@
#define MODULE_NAME "camera" #define MODULE_NAME "camera"
// Defold SDK // Defold SDK
#define DLIB_LOG_DOMAIN LIB_NAME
#include <dmsdk/sdk.h> #include <dmsdk/sdk.h>
#if defined(DM_PLATFORM_IOS) || defined(DM_PLATFORM_OSX) || defined(DM_PLATFORM_ANDROID) #if defined(DM_PLATFORM_IOS) || defined(DM_PLATFORM_OSX) || defined(DM_PLATFORM_ANDROID)
@ -71,7 +70,7 @@ static void Camera_ProcessQueue()
if (message == CAMERA_STARTED) if (message == CAMERA_STARTED)
{ {
// Increase ref count // Increase ref count
dmScript::LuaHBuffer luabuffer = {g_DefoldCamera.m_VideoBuffer, false}; dmScript::LuaHBuffer luabuffer(g_DefoldCamera.m_VideoBuffer, dmScript::OWNER_C);
dmScript::PushBuffer(L, luabuffer); dmScript::PushBuffer(L, luabuffer);
g_DefoldCamera.m_VideoBufferLuaRef = dmScript::Ref(L, LUA_REGISTRYINDEX); g_DefoldCamera.m_VideoBufferLuaRef = dmScript::Ref(L, LUA_REGISTRYINDEX);
} }

View File

@ -16,37 +16,10 @@ https://github.com/defold/extension-camera/archive/master.zip
We recommend using a link to a zip file of a [specific release](https://github.com/defold/extension-camera/releases). We recommend using a link to a zip file of a [specific release](https://github.com/defold/extension-camera/releases).
## Configuration
The extension can be configured by adding the following fields to game.project:
```
[adinfo]
tracking_usage_description = We would like to show you relevant ads.
register_for_attribution = 1
```
### tracking_usage_description
Before requesting advertising info and status on iOS 14 the application must request user authorization to access app-related data for tracking the user or the device. This is done automatically when `adinfo.get()` is called. The string set in `adinfo.tracking_usage_description` will be shown to the user.
Apple documentation: https://developer.apple.com/documentation/apptrackingtransparency?language=objc
### register_for_attribution
The extension can automatically register the application for ad network attribution using `SkAdNetwork` and the `registerAppForAdNetworkAttribution()` function. Enable this functionality by setting `adinfo.register_for_attribution` to 1 in game.project.
Apple documentation: https://developer.apple.com/documentation/storekit/skadnetwork
## Example ## Example
```lua Refer to the [example project](https://github.com/defold/extension-camera/blob/master/main/main.script).
function init(self)
adinfo.get(function(self, info)
print(info.ad_ident, info.ad_tracking_enabled)
end)
end
```
## FAQ ## FAQ
@ -61,7 +34,4 @@ tccutil reset Camera
## Source code ## Source code
The source code is available on [GitHub](https://github.com/defold/extension-adinfo) The source code is available on [GitHub](https://github.com/defold/extension-camera)
## API reference

8
main/default.font Normal file
View File

@ -0,0 +1,8 @@
font: "/builtins/fonts/vera_mo_bd.ttf"
material: "/builtins/fonts/font-df.material"
size: 14
antialias: 1
alpha: 1.0
shadow_alpha: 0.0
shadow_blur: 0
output_format: TYPE_DISTANCE_FIELD

View File

@ -16,14 +16,19 @@ embedded_instances {
" z: 0.0\n" " z: 0.0\n"
" w: 1.0\n" " w: 1.0\n"
" }\n" " }\n"
" property_decls {\n"
" }\n"
"}\n" "}\n"
"embedded_components {\n" "embedded_components {\n"
" id: \"sprite\"\n" " id: \"sprite\"\n"
" type: \"sprite\"\n" " type: \"sprite\"\n"
" data: \"tile_set: \\\"/main/camera.atlas\\\"\\n" " data: \"default_animation: \\\"logo\\\"\\n"
"default_animation: \\\"logo\\\"\\n"
"material: \\\"/builtins/materials/sprite.material\\\"\\n" "material: \\\"/builtins/materials/sprite.material\\\"\\n"
"blend_mode: BLEND_MODE_ALPHA\\n" "blend_mode: BLEND_MODE_ALPHA\\n"
"textures {\\n"
" sampler: \\\"texture_sampler\\\"\\n"
" texture: \\\"/main/camera.atlas\\\"\\n"
"}\\n"
"\"\n" "\"\n"
" position {\n" " position {\n"
" x: 0.0\n" " x: 0.0\n"
@ -60,10 +65,13 @@ embedded_instances {
data: "embedded_components {\n" data: "embedded_components {\n"
" id: \"sprite\"\n" " id: \"sprite\"\n"
" type: \"sprite\"\n" " type: \"sprite\"\n"
" data: \"tile_set: \\\"/main/logo.atlas\\\"\\n" " data: \"default_animation: \\\"logo\\\"\\n"
"default_animation: \\\"logo\\\"\\n"
"material: \\\"/builtins/materials/sprite.material\\\"\\n" "material: \\\"/builtins/materials/sprite.material\\\"\\n"
"blend_mode: BLEND_MODE_ALPHA\\n" "blend_mode: BLEND_MODE_ALPHA\\n"
"textures {\\n"
" sampler: \\\"texture_sampler\\\"\\n"
" texture: \\\"/main/logo.atlas\\\"\\n"
"}\\n"
"\"\n" "\"\n"
" position {\n" " position {\n"
" x: 0.0\n" " x: 0.0\n"
@ -86,12 +94,6 @@ embedded_instances {
" z: 0.0\\n" " z: 0.0\\n"
" w: 0.0\\n" " w: 0.0\\n"
"}\\n" "}\\n"
"scale {\\n"
" x: 1.0\\n"
" y: 1.0\\n"
" z: 1.0\\n"
" w: 0.0\\n"
"}\\n"
"color {\\n" "color {\\n"
" x: 1.0\\n" " x: 1.0\\n"
" y: 1.0\\n" " y: 1.0\\n"
@ -116,8 +118,8 @@ embedded_instances {
"blend_mode: BLEND_MODE_ALPHA\\n" "blend_mode: BLEND_MODE_ALPHA\\n"
"line_break: false\\n" "line_break: false\\n"
"text: \\\"Space/Touch to toggle capture\\\"\\n" "text: \\\"Space/Touch to toggle capture\\\"\\n"
"font: \\\"/builtins/fonts/system_font.font\\\"\\n" "font: \\\"/main/default.font\\\"\\n"
"material: \\\"/builtins/fonts/label.material\\\"\\n" "material: \\\"/builtins/fonts/label-df.material\\\"\\n"
"\"\n" "\"\n"
" position {\n" " position {\n"
" x: 90.0\n" " x: 90.0\n"
@ -140,12 +142,6 @@ embedded_instances {
" z: 0.0\\n" " z: 0.0\\n"
" w: 0.0\\n" " w: 0.0\\n"
"}\\n" "}\\n"
"scale {\\n"
" x: 1.0\\n"
" y: 1.0\\n"
" z: 1.0\\n"
" w: 0.0\\n"
"}\\n"
"color {\\n" "color {\\n"
" x: 1.0\\n" " x: 1.0\\n"
" y: 1.0\\n" " y: 1.0\\n"
@ -172,8 +168,8 @@ embedded_instances {
"text: \\\"label\\\\n" "text: \\\"label\\\\n"
"\\\"\\n" "\\\"\\n"
" \\\"\\\"\\n" " \\\"\\\"\\n"
"font: \\\"/builtins/fonts/system_font.font\\\"\\n" "font: \\\"/main/default.font\\\"\\n"
"material: \\\"/builtins/fonts/label.material\\\"\\n" "material: \\\"/builtins/fonts/label-df.material\\\"\\n"
"\"\n" "\"\n"
" position {\n" " position {\n"
" x: 90.0\n" " x: 90.0\n"

View File

@ -3,7 +3,6 @@ local function stop_capture(self)
if self.cameraframe == nil then if self.cameraframe == nil then
return return
end end
self.cameraframe = nil self.cameraframe = nil
camera.stop_capture() camera.stop_capture()
@ -24,7 +23,7 @@ local function start_capture(self)
type = camera.CAMERA_TYPE_BACK type = camera.CAMERA_TYPE_BACK
quality = camera.CAPTURE_QUALITY_MEDIUM quality = camera.CAPTURE_QUALITY_MEDIUM
end end
camera.start_capture(type, quality, function(self, status) camera.start_capture(type, quality, function(self, status)
if status == camera.CAMERA_STARTED then if status == camera.CAMERA_STARTED then
self.cameraframe = camera.get_frame() self.cameraframe = camera.get_frame()