@capgo/camera-preview 7.4.0-beta.10 → 7.4.0-beta.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/android/src/main/java/com/ahm/capacitor/camera/preview/CameraPreview.java +281 -133
- package/android/src/main/java/com/ahm/capacitor/camera/preview/CameraXView.java +2028 -1467
- package/android/src/main/java/com/ahm/capacitor/camera/preview/GridOverlayView.java +71 -58
- package/android/src/main/java/com/ahm/capacitor/camera/preview/model/CameraDevice.java +55 -46
- package/android/src/main/java/com/ahm/capacitor/camera/preview/model/CameraLens.java +61 -52
- package/android/src/main/java/com/ahm/capacitor/camera/preview/model/CameraSessionConfiguration.java +151 -72
- package/android/src/main/java/com/ahm/capacitor/camera/preview/model/LensInfo.java +29 -23
- package/android/src/main/java/com/ahm/capacitor/camera/preview/model/ZoomFactors.java +24 -23
- package/dist/docs.json +3 -3
- package/dist/esm/definitions.d.ts +3 -3
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/web.d.ts +2 -2
- package/dist/esm/web.js +51 -34
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +51 -34
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +51 -34
- package/dist/plugin.js.map +1 -1
- package/ios/Sources/CapgoCameraPreview/CameraController.swift +202 -273
- package/ios/Sources/CapgoCameraPreview/Plugin.swift +467 -390
- package/package.json +1 -1
package/dist/esm/web.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebPlugin } from \"@capacitor/core\";\n\nimport type {\n CameraDevice,\n CameraOpacityOptions,\n CameraPreviewFlashMode,\n CameraPreviewOptions,\n CameraPreviewPictureOptions,\n CameraPreviewPlugin,\n CameraSampleOptions,\n GridMode,\n FlashMode,\n LensInfo,\n} from \"./definitions\";\nimport { DeviceType } from \"./definitions\";\n\nconst DEFAULT_VIDEO_ID = \"capgo_video\";\nexport class CameraPreviewWeb extends WebPlugin implements CameraPreviewPlugin {\n /**\n * track which camera is used based on start options\n * used in capture\n */\n private isBackCamera = false;\n private currentDeviceId: string | null = null;\n private videoElement: HTMLVideoElement | null = null;\n private isStarted = false;\n\n constructor() {\n super();\n }\n\n async getSupportedPictureSizes(): Promise<any> {\n throw new Error(\n \"getSupportedPictureSizes not supported under the web platform\",\n );\n }\n\n async start(options: CameraPreviewOptions): Promise<{ width: number; height: number; x: number; y: number }> {\n if (options.aspectRatio && (options.width || options.height)) {\n throw new Error(\"Cannot set both aspectRatio and size (width/height). Use setPreviewSize after start.\");\n }\n if (this.isStarted) {\n throw new Error(\"camera already started\");\n }\n\n this.isBackCamera = true;\n this.isStarted = false;\n const parent = document.getElementById(options?.parent || \"\");\n const gridMode = options?.gridMode || \"none\";\n\n if (options.position) {\n this.isBackCamera = options.position === \"rear\";\n }\n\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n if (video) {\n video.remove();\n }\n const container = options.parent ? document.getElementById(options.parent) : document.body;\n if (!container) {\n throw new Error(\"container not found\");\n }\n this.videoElement = document.createElement(\"video\");\n this.videoElement.id = DEFAULT_VIDEO_ID;\n this.videoElement.className = options.className || \"\";\n this.videoElement.playsInline = true;\n this.videoElement.muted = true;\n this.videoElement.autoplay = true;\n\n container.appendChild(this.videoElement);\n if (options.toBack) {\n this.videoElement.style.zIndex = \"-1\";\n }\n\n if (options.width) {\n this.videoElement.width = options.width;\n }\n\n if (options.height) {\n this.videoElement.height = options.height;\n }\n\n if (options.x) {\n this.videoElement.style.left = `${options.x}px`;\n }\n // Create and add grid overlay if needed\n if (gridMode !== \"none\") {\n const gridOverlay = this.createGridOverlay(gridMode);\n gridOverlay.id = \"camera-grid-overlay\";\n parent?.appendChild(gridOverlay);\n }\n\n if (options.y) {\n this.videoElement.style.top = `${options.y}px`;\n }\n\n if (options.aspectRatio) {\n const [widthRatio, heightRatio] = options.aspectRatio.split(':').map(Number);\n const ratio = widthRatio / heightRatio;\n\n if (options.width) {\n this.videoElement.height = options.width / ratio;\n } else if (options.height) {\n this.videoElement.width = options.height * ratio;\n }\n } else {\n this.videoElement.style.objectFit = 'cover';\n }\n\n const constraints: MediaStreamConstraints = {\n video: {\n width: { ideal: this.videoElement.width || 640 },\n height: { ideal: this.videoElement.height || window.innerHeight },\n facingMode: this.isBackCamera ? \"environment\" : \"user\",\n },\n };\n\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n if (!stream) {\n throw new Error(\"could not acquire stream\");\n }\n if (!this.videoElement) {\n throw new Error(\"video element not found\");\n }\n this.videoElement.srcObject = stream;\n if (!this.isBackCamera) {\n this.videoElement.style.transform = \"scaleX(-1)\";\n }\n this.isStarted = true;\n return {\n width: this.videoElement.width,\n height: this.videoElement.height,\n x: this.videoElement.getBoundingClientRect().x,\n y: this.videoElement.getBoundingClientRect().y,\n };\n }\n\n private stopStream(stream: any) {\n if (stream) {\n const tracks = stream.getTracks();\n\n for (const track of tracks) track.stop();\n }\n }\n\n async stop(): Promise<void> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (video) {\n video.pause();\n\n this.stopStream(video.srcObject);\n\n video.remove();\n this.isStarted = false;\n }\n\n // Remove grid overlay if it exists\n const gridOverlay = document.getElementById(\"camera-grid-overlay\");\n gridOverlay?.remove();\n }\n\n async capture(options: CameraPreviewPictureOptions): Promise<any> {\n return new Promise((resolve, reject) => {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video?.srcObject) {\n reject(new Error(\"camera is not running\"));\n return;\n }\n\n // video.width = video.offsetWidth;\n\n let base64EncodedImage;\n\n if (video && video.videoWidth > 0 && video.videoHeight > 0) {\n const canvas = document.createElement(\"canvas\");\n const context = canvas.getContext(\"2d\");\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n\n // flip horizontally back camera isn't used\n if (!this.isBackCamera) {\n context?.translate(video.videoWidth, 0);\n context?.scale(-1, 1);\n }\n context?.drawImage(video, 0, 0, video.videoWidth, video.videoHeight);\n\n if (options.saveToGallery) {\n // saveToGallery is not supported on web\n }\n\n if (options.withExifLocation) {\n // withExifLocation is not supported on web\n }\n\n if ((options.format || \"jpeg\") === \"jpeg\") {\n base64EncodedImage = canvas\n .toDataURL(\"image/jpeg\", (options.quality || 85) / 100.0)\n .replace(\"data:image/jpeg;base64,\", \"\");\n } else {\n base64EncodedImage = canvas\n .toDataURL(\"image/png\")\n .replace(\"data:image/png;base64,\", \"\");\n }\n }\n\n resolve({\n value: base64EncodedImage,\n exif: {},\n });\n });\n }\n\n async captureSample(_options: CameraSampleOptions): Promise<any> {\n return this.capture(_options);\n }\n\n async stopRecordVideo(): Promise<any> {\n throw new Error(\"stopRecordVideo not supported under the web platform\");\n }\n\n async startRecordVideo(_options: CameraPreviewOptions): Promise<any> {\n console.log(\"startRecordVideo\", _options);\n throw new Error(\"startRecordVideo not supported under the web platform\");\n }\n\n async getSupportedFlashModes(): Promise<{\n result: CameraPreviewFlashMode[];\n }> {\n throw new Error(\n \"getSupportedFlashModes not supported under the web platform\",\n );\n }\n\n async getHorizontalFov(): Promise<{\n result: any;\n }> {\n throw new Error(\"getHorizontalFov not supported under the web platform\");\n }\n\n async setFlashMode(_options: {\n flashMode: CameraPreviewFlashMode | string;\n }): Promise<void> {\n throw new Error(\n `setFlashMode not supported under the web platform${_options}`,\n );\n }\n\n async flip(): Promise<void> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video?.srcObject) {\n throw new Error(\"camera is not running\");\n }\n\n // Stop current stream\n this.stopStream(video.srcObject);\n\n // Toggle camera position\n this.isBackCamera = !this.isBackCamera;\n\n // Get new constraints\n const constraints: MediaStreamConstraints = {\n video: {\n facingMode: this.isBackCamera ? \"environment\" : \"user\",\n width: { ideal: video.videoWidth || 640 },\n height: { ideal: video.videoHeight || 480 },\n },\n };\n\n try {\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n video.srcObject = stream;\n\n // Update current device ID from the new stream\n const videoTrack = stream.getVideoTracks()[0];\n if (videoTrack) {\n this.currentDeviceId = videoTrack.getSettings().deviceId || null;\n }\n\n // Update video transform based on camera\n if (this.isBackCamera) {\n video.style.transform = \"none\";\n video.style.webkitTransform = \"none\";\n } else {\n video.style.transform = \"scaleX(-1)\";\n video.style.webkitTransform = \"scaleX(-1)\";\n }\n\n await video.play();\n } catch (error) {\n throw new Error(`Failed to flip camera: ${error}`);\n }\n }\n\n async setOpacity(_options: CameraOpacityOptions): Promise<any> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!!video && !!_options.opacity)\n video.style.setProperty(\"opacity\", _options.opacity.toString());\n }\n\n async isRunning(): Promise<{ isRunning: boolean }> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n return { isRunning: !!video && !!video.srcObject };\n }\n\n async getAvailableDevices(): Promise<{ devices: CameraDevice[] }> {\n if (!navigator.mediaDevices?.enumerateDevices) {\n throw new Error(\"getAvailableDevices not supported under the web platform\");\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices();\n const videoDevices = devices.filter(device => device.kind === 'videoinput');\n\n // Group devices by position (front/back)\n const frontDevices: any[] = [];\n const backDevices: any[] = [];\n\n videoDevices.forEach((device, index) => {\n const label = device.label || `Camera ${index + 1}`;\n const labelLower = label.toLowerCase();\n\n // Determine device type based on label\n let deviceType: DeviceType = DeviceType.WIDE_ANGLE;\n let baseZoomRatio = 1.0;\n\n if (labelLower.includes('ultra') || labelLower.includes('0.5')) {\n deviceType = DeviceType.ULTRA_WIDE;\n baseZoomRatio = 0.5;\n } else if (labelLower.includes('telephoto') || labelLower.includes('tele') || labelLower.includes('2x') || labelLower.includes('3x')) {\n deviceType = DeviceType.TELEPHOTO;\n baseZoomRatio = 2.0;\n } else if (labelLower.includes('depth') || labelLower.includes('truedepth')) {\n deviceType = DeviceType.TRUE_DEPTH;\n baseZoomRatio = 1.0;\n }\n\n const lensInfo = {\n deviceId: device.deviceId,\n label,\n deviceType,\n focalLength: 4.25,\n baseZoomRatio,\n minZoom: 1.0,\n maxZoom: 1.0\n };\n\n // Determine position and add to appropriate array\n if (labelLower.includes('back') || labelLower.includes('rear')) {\n backDevices.push(lensInfo);\n } else {\n frontDevices.push(lensInfo);\n }\n });\n\n const result: CameraDevice[] = [];\n\n if (frontDevices.length > 0) {\n result.push({\n deviceId: frontDevices[0].deviceId,\n label: \"Front Camera\",\n position: \"front\",\n lenses: frontDevices,\n isLogical: false,\n minZoom: Math.min(...frontDevices.map(d => d.minZoom)),\n maxZoom: Math.max(...frontDevices.map(d => d.maxZoom))\n });\n }\n\n if (backDevices.length > 0) {\n result.push({\n deviceId: backDevices[0].deviceId,\n label: \"Back Camera\",\n position: \"rear\",\n lenses: backDevices,\n isLogical: false,\n minZoom: Math.min(...backDevices.map(d => d.minZoom)),\n maxZoom: Math.max(...backDevices.map(d => d.maxZoom))\n });\n }\n\n return { devices: result };\n }\n\n async getZoom(): Promise<{ min: number; max: number; current: number; lens: LensInfo }> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video?.srcObject) {\n throw new Error(\"camera is not running\");\n }\n\n const stream = video.srcObject as MediaStream;\n const videoTrack = stream.getVideoTracks()[0];\n\n if (!videoTrack) {\n throw new Error(\"no video track found\");\n }\n\n const capabilities = videoTrack.getCapabilities() as any;\n const settings = videoTrack.getSettings() as any;\n\n if (!capabilities.zoom) {\n throw new Error(\"zoom not supported by this device\");\n }\n\n // Get current device info to determine lens type\n let deviceType: DeviceType = DeviceType.WIDE_ANGLE;\n let baseZoomRatio = 1.0;\n\n if (this.currentDeviceId) {\n const devices = await navigator.mediaDevices.enumerateDevices();\n const device = devices.find(d => d.deviceId === this.currentDeviceId);\n if (device) {\n const labelLower = device.label.toLowerCase();\n if (labelLower.includes('ultra') || labelLower.includes('0.5')) {\n deviceType = DeviceType.ULTRA_WIDE;\n baseZoomRatio = 0.5;\n } else if (labelLower.includes('telephoto') || labelLower.includes('tele') || labelLower.includes('2x') || labelLower.includes('3x')) {\n deviceType = DeviceType.TELEPHOTO;\n baseZoomRatio = 2.0;\n } else if (labelLower.includes('depth') || labelLower.includes('truedepth')) {\n deviceType = DeviceType.TRUE_DEPTH;\n baseZoomRatio = 1.0;\n }\n }\n }\n\n const currentZoom = settings.zoom || 1;\n const lensInfo: LensInfo = {\n focalLength: 4.25,\n deviceType,\n baseZoomRatio,\n digitalZoom: currentZoom / baseZoomRatio\n };\n\n return {\n min: capabilities.zoom.min || 1,\n max: capabilities.zoom.max || 1,\n current: currentZoom,\n lens: lensInfo,\n };\n }\n\n async setZoom(options: { level: number; ramp?: boolean }): Promise<void> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video?.srcObject) {\n throw new Error(\"camera is not running\");\n }\n\n const stream = video.srcObject as MediaStream;\n const videoTrack = stream.getVideoTracks()[0];\n\n if (!videoTrack) {\n throw new Error(\"no video track found\");\n }\n\n const capabilities = videoTrack.getCapabilities() as any;\n\n if (!capabilities.zoom) {\n throw new Error(\"zoom not supported by this device\");\n }\n\n const zoomLevel = Math.max(\n capabilities.zoom.min || 1,\n Math.min(capabilities.zoom.max || 1, options.level)\n );\n\n try {\n await videoTrack.applyConstraints({\n advanced: [{ zoom: zoomLevel } as any]\n });\n } catch (error) {\n throw new Error(`Failed to set zoom: ${error}`);\n }\n }\n\n async getFlashMode(): Promise<{ flashMode: FlashMode }> {\n throw new Error(\"getFlashMode not supported under the web platform\");\n }\n\n async getDeviceId(): Promise<{ deviceId: string }> {\n return { deviceId: this.currentDeviceId || \"\" };\n }\n\n async setDeviceId(options: { deviceId: string }): Promise<void> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video?.srcObject) {\n throw new Error(\"camera is not running\");\n }\n\n // Stop current stream\n this.stopStream(video.srcObject);\n\n // Update current device ID\n this.currentDeviceId = options.deviceId;\n\n // Get new constraints with specific device ID\n const constraints: MediaStreamConstraints = {\n video: {\n deviceId: { exact: options.deviceId },\n width: { ideal: video.videoWidth || 640 },\n height: { ideal: video.videoHeight || 480 },\n },\n };\n\n try {\n // Try to determine camera position from device\n const devices = await navigator.mediaDevices.enumerateDevices();\n const device = devices.find(d => d.deviceId === options.deviceId);\n this.isBackCamera = device?.label.toLowerCase().includes('back') || device?.label.toLowerCase().includes('rear') || false;\n\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n video.srcObject = stream;\n\n // Update video transform based on camera\n if (this.isBackCamera) {\n video.style.transform = \"none\";\n video.style.webkitTransform = \"none\";\n } else {\n video.style.transform = \"scaleX(-1)\";\n video.style.webkitTransform = \"scaleX(-1)\";\n }\n\n await video.play();\n } catch (error) {\n throw new Error(`Failed to swap to device ${options.deviceId}: ${error}`);\n }\n }\n\n async getAspectRatio(): Promise<{ aspectRatio: '4:3' | '16:9' }> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video) {\n throw new Error(\"camera is not running\");\n }\n\n const width = video.offsetWidth;\n const height = video.offsetHeight;\n\n if (width && height) {\n const ratio = width / height;\n // Check for portrait camera ratios: 4:3 -> 3:4, 16:9 -> 9:16\n if (Math.abs(ratio - (3 / 4)) < 0.01) {\n return { aspectRatio: '4:3' };\n }\n if (Math.abs(ratio - (9 / 16)) < 0.01) {\n return { aspectRatio: '16:9' };\n }\n }\n\n // Default to 4:3 if no specific aspect ratio is matched\n return { aspectRatio: '4:3' };\n }\n\n async setAspectRatio(options: { aspectRatio: '4:3' | '16:9'; x?: number; y?: number }): Promise<{\n width: number;\n height: number;\n x: number;\n y: number;\n }> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video) {\n throw new Error(\"camera is not running\");\n }\n\n if (options.aspectRatio) {\n const [widthRatio, heightRatio] = options.aspectRatio.split(':').map(Number);\n // For camera, use portrait orientation: 4:3 becomes 3:4, 16:9 becomes 9:16\n const ratio = heightRatio / widthRatio;\n \n // Get current position and size\n const rect = video.getBoundingClientRect();\n const currentWidth = rect.width;\n const currentHeight = rect.height;\n const currentRatio = currentWidth / currentHeight;\n \n let newWidth: number;\n let newHeight: number;\n \n if (currentRatio > ratio) {\n // Width is larger, fit by height and center horizontally\n newWidth = currentHeight * ratio;\n newHeight = currentHeight;\n } else {\n // Height is larger, fit by width and center vertically\n newWidth = currentWidth;\n newHeight = currentWidth / ratio;\n }\n \n // Calculate position\n let x: number, y: number;\n if (options.x !== undefined && options.y !== undefined) {\n // Use provided coordinates, ensuring they stay within screen boundaries\n x = Math.max(0, Math.min(options.x, window.innerWidth - newWidth));\n y = Math.max(0, Math.min(options.y, window.innerHeight - newHeight));\n } else {\n // Auto-center the view\n x = (window.innerWidth - newWidth) / 2;\n y = (window.innerHeight - newHeight) / 2;\n }\n \n video.style.width = `${newWidth}px`;\n video.style.height = `${newHeight}px`;\n video.style.left = `${x}px`;\n video.style.top = `${y}px`;\n video.style.position = 'absolute';\n\n return {\n width: Math.round(newWidth),\n height: Math.round(newHeight),\n x: Math.round(x),\n y: Math.round(y)\n };\n } else {\n video.style.objectFit = 'cover';\n const rect = video.getBoundingClientRect();\n return {\n width: Math.round(rect.width),\n height: Math.round(rect.height),\n x: Math.round(rect.left),\n y: Math.round(rect.top)\n };\n }\n }\n\n private createGridOverlay(gridMode: string): HTMLElement {\n const overlay = document.createElement(\"div\");\n overlay.style.position = \"absolute\";\n overlay.style.top = \"0\";\n overlay.style.left = \"0\";\n overlay.style.width = \"100%\";\n overlay.style.height = \"100%\";\n overlay.style.pointerEvents = \"none\";\n overlay.style.zIndex = \"10\";\n\n const divisions = gridMode === \"3x3\" ? 3 : 4;\n\n // Create SVG for grid lines\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.style.width = \"100%\";\n svg.style.height = \"100%\";\n svg.style.position = \"absolute\";\n svg.style.top = \"0\";\n svg.style.left = \"0\";\n\n // Create grid lines\n for (let i = 1; i < divisions; i++) {\n // Vertical lines\n const verticalLine = document.createElementNS(\"http://www.w3.org/2000/svg\", \"line\");\n verticalLine.setAttribute(\"x1\", `${(i / divisions) * 100}%`);\n verticalLine.setAttribute(\"y1\", \"0%\");\n verticalLine.setAttribute(\"x2\", `${(i / divisions) * 100}%`);\n verticalLine.setAttribute(\"y2\", \"100%\");\n verticalLine.setAttribute(\"stroke\", \"rgba(255, 255, 255, 0.5)\");\n verticalLine.setAttribute(\"stroke-width\", \"1\");\n svg.appendChild(verticalLine);\n\n // Horizontal lines\n const horizontalLine = document.createElementNS(\"http://www.w3.org/2000/svg\", \"line\");\n horizontalLine.setAttribute(\"x1\", \"0%\");\n horizontalLine.setAttribute(\"y1\", `${(i / divisions) * 100}%`);\n horizontalLine.setAttribute(\"x2\", \"100%\");\n horizontalLine.setAttribute(\"y2\", `${(i / divisions) * 100}%`);\n horizontalLine.setAttribute(\"stroke\", \"rgba(255, 255, 255, 0.5)\");\n horizontalLine.setAttribute(\"stroke-width\", \"1\");\n svg.appendChild(horizontalLine);\n }\n\n overlay.appendChild(svg);\n return overlay;\n }\n\n async setGridMode(options: { gridMode: GridMode }): Promise<void> {\n // Web implementation of grid mode would need to be implemented\n // For now, just resolve as a no-op\n console.warn(`Grid mode '${options.gridMode}' is not yet implemented for web platform`);\n }\n\n async getGridMode(): Promise<{ gridMode: GridMode }> {\n // Web implementation - default to none\n return { gridMode: 'none' };\n }\n\n async getPreviewSize(): Promise<{x: number, y: number, width: number, height: number}> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video) {\n throw new Error(\"camera is not running\");\n }\n return {\n x: video.offsetLeft,\n y: video.offsetTop,\n width: video.width,\n height: video.height\n };\n }\n async setPreviewSize(options: {x: number, y: number, width: number, height: number}): Promise<{\n width: number;\n height: number;\n x: number;\n y: number;\n }> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video) {\n throw new Error(\"camera is not running\");\n }\n video.style.left = `${options.x}px`;\n video.style.top = `${options.y}px`;\n video.width = options.width;\n video.height = options.height;\n\n return {\n width: options.width,\n height: options.height,\n x: options.x,\n y: options.y\n };\n }\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebPlugin } from \"@capacitor/core\";\n\nimport type {\n CameraDevice,\n CameraOpacityOptions,\n CameraPreviewFlashMode,\n CameraPreviewOptions,\n CameraPreviewPictureOptions,\n CameraPreviewPlugin,\n CameraSampleOptions,\n GridMode,\n FlashMode,\n LensInfo,\n} from \"./definitions\";\nimport { DeviceType } from \"./definitions\";\n\nconst DEFAULT_VIDEO_ID = \"capgo_video\";\nexport class CameraPreviewWeb extends WebPlugin implements CameraPreviewPlugin {\n /**\n * track which camera is used based on start options\n * used in capture\n */\n private isBackCamera = false;\n private currentDeviceId: string | null = null;\n private videoElement: HTMLVideoElement | null = null;\n private isStarted = false;\n\n constructor() {\n super();\n }\n\n async getSupportedPictureSizes(): Promise<any> {\n throw new Error(\n \"getSupportedPictureSizes not supported under the web platform\",\n );\n }\n\n async start(\n options: CameraPreviewOptions,\n ): Promise<{ width: number; height: number; x: number; y: number }> {\n if (options.aspectRatio && (options.width || options.height)) {\n throw new Error(\n \"Cannot set both aspectRatio and size (width/height). Use setPreviewSize after start.\",\n );\n }\n if (this.isStarted) {\n throw new Error(\"camera already started\");\n }\n\n this.isBackCamera = true;\n this.isStarted = false;\n const parent = document.getElementById(options?.parent || \"\");\n const gridMode = options?.gridMode || \"none\";\n\n if (options.position) {\n this.isBackCamera = options.position === \"rear\";\n }\n\n const video = document.getElementById(DEFAULT_VIDEO_ID);\n if (video) {\n video.remove();\n }\n const container = options.parent\n ? document.getElementById(options.parent)\n : document.body;\n if (!container) {\n throw new Error(\"container not found\");\n }\n this.videoElement = document.createElement(\"video\");\n this.videoElement.id = DEFAULT_VIDEO_ID;\n this.videoElement.className = options.className || \"\";\n this.videoElement.playsInline = true;\n this.videoElement.muted = true;\n this.videoElement.autoplay = true;\n\n container.appendChild(this.videoElement);\n if (options.toBack) {\n this.videoElement.style.zIndex = \"-1\";\n }\n\n if (options.width) {\n this.videoElement.width = options.width;\n }\n\n if (options.height) {\n this.videoElement.height = options.height;\n }\n\n if (options.x) {\n this.videoElement.style.left = `${options.x}px`;\n }\n // Create and add grid overlay if needed\n if (gridMode !== \"none\") {\n const gridOverlay = this.createGridOverlay(gridMode);\n gridOverlay.id = \"camera-grid-overlay\";\n parent?.appendChild(gridOverlay);\n }\n\n if (options.y) {\n this.videoElement.style.top = `${options.y}px`;\n }\n\n if (options.aspectRatio) {\n const [widthRatio, heightRatio] = options.aspectRatio\n .split(\":\")\n .map(Number);\n const ratio = widthRatio / heightRatio;\n\n if (options.width) {\n this.videoElement.height = options.width / ratio;\n } else if (options.height) {\n this.videoElement.width = options.height * ratio;\n }\n } else {\n this.videoElement.style.objectFit = \"cover\";\n }\n\n const constraints: MediaStreamConstraints = {\n video: {\n width: { ideal: this.videoElement.width || 640 },\n height: { ideal: this.videoElement.height || window.innerHeight },\n facingMode: this.isBackCamera ? \"environment\" : \"user\",\n },\n };\n\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n if (!stream) {\n throw new Error(\"could not acquire stream\");\n }\n if (!this.videoElement) {\n throw new Error(\"video element not found\");\n }\n this.videoElement.srcObject = stream;\n if (!this.isBackCamera) {\n this.videoElement.style.transform = \"scaleX(-1)\";\n }\n this.isStarted = true;\n return {\n width: this.videoElement.width,\n height: this.videoElement.height,\n x: this.videoElement.getBoundingClientRect().x,\n y: this.videoElement.getBoundingClientRect().y,\n };\n }\n\n private stopStream(stream: any) {\n if (stream) {\n const tracks = stream.getTracks();\n\n for (const track of tracks) track.stop();\n }\n }\n\n async stop(): Promise<void> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (video) {\n video.pause();\n\n this.stopStream(video.srcObject);\n\n video.remove();\n this.isStarted = false;\n }\n\n // Remove grid overlay if it exists\n const gridOverlay = document.getElementById(\"camera-grid-overlay\");\n gridOverlay?.remove();\n }\n\n async capture(options: CameraPreviewPictureOptions): Promise<any> {\n return new Promise((resolve, reject) => {\n const video = document.getElementById(\n DEFAULT_VIDEO_ID,\n ) as HTMLVideoElement;\n if (!video?.srcObject) {\n reject(new Error(\"camera is not running\"));\n return;\n }\n\n // video.width = video.offsetWidth;\n\n let base64EncodedImage;\n\n if (video && video.videoWidth > 0 && video.videoHeight > 0) {\n const canvas = document.createElement(\"canvas\");\n const context = canvas.getContext(\"2d\");\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n\n // flip horizontally back camera isn't used\n if (!this.isBackCamera) {\n context?.translate(video.videoWidth, 0);\n context?.scale(-1, 1);\n }\n context?.drawImage(video, 0, 0, video.videoWidth, video.videoHeight);\n\n if (options.saveToGallery) {\n // saveToGallery is not supported on web\n }\n\n if (options.withExifLocation) {\n // withExifLocation is not supported on web\n }\n\n if ((options.format || \"jpeg\") === \"jpeg\") {\n base64EncodedImage = canvas\n .toDataURL(\"image/jpeg\", (options.quality || 85) / 100.0)\n .replace(\"data:image/jpeg;base64,\", \"\");\n } else {\n base64EncodedImage = canvas\n .toDataURL(\"image/png\")\n .replace(\"data:image/png;base64,\", \"\");\n }\n }\n\n resolve({\n value: base64EncodedImage,\n exif: {},\n });\n });\n }\n\n async captureSample(_options: CameraSampleOptions): Promise<any> {\n return this.capture(_options);\n }\n\n async stopRecordVideo(): Promise<any> {\n throw new Error(\"stopRecordVideo not supported under the web platform\");\n }\n\n async startRecordVideo(_options: CameraPreviewOptions): Promise<any> {\n console.log(\"startRecordVideo\", _options);\n throw new Error(\"startRecordVideo not supported under the web platform\");\n }\n\n async getSupportedFlashModes(): Promise<{\n result: CameraPreviewFlashMode[];\n }> {\n throw new Error(\n \"getSupportedFlashModes not supported under the web platform\",\n );\n }\n\n async getHorizontalFov(): Promise<{\n result: any;\n }> {\n throw new Error(\"getHorizontalFov not supported under the web platform\");\n }\n\n async setFlashMode(_options: {\n flashMode: CameraPreviewFlashMode | string;\n }): Promise<void> {\n throw new Error(\n `setFlashMode not supported under the web platform${_options}`,\n );\n }\n\n async flip(): Promise<void> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video?.srcObject) {\n throw new Error(\"camera is not running\");\n }\n\n // Stop current stream\n this.stopStream(video.srcObject);\n\n // Toggle camera position\n this.isBackCamera = !this.isBackCamera;\n\n // Get new constraints\n const constraints: MediaStreamConstraints = {\n video: {\n facingMode: this.isBackCamera ? \"environment\" : \"user\",\n width: { ideal: video.videoWidth || 640 },\n height: { ideal: video.videoHeight || 480 },\n },\n };\n\n try {\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n video.srcObject = stream;\n\n // Update current device ID from the new stream\n const videoTrack = stream.getVideoTracks()[0];\n if (videoTrack) {\n this.currentDeviceId = videoTrack.getSettings().deviceId || null;\n }\n\n // Update video transform based on camera\n if (this.isBackCamera) {\n video.style.transform = \"none\";\n video.style.webkitTransform = \"none\";\n } else {\n video.style.transform = \"scaleX(-1)\";\n video.style.webkitTransform = \"scaleX(-1)\";\n }\n\n await video.play();\n } catch (error) {\n throw new Error(`Failed to flip camera: ${error}`);\n }\n }\n\n async setOpacity(_options: CameraOpacityOptions): Promise<any> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!!video && !!_options.opacity)\n video.style.setProperty(\"opacity\", _options.opacity.toString());\n }\n\n async isRunning(): Promise<{ isRunning: boolean }> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n return { isRunning: !!video && !!video.srcObject };\n }\n\n async getAvailableDevices(): Promise<{ devices: CameraDevice[] }> {\n if (!navigator.mediaDevices?.enumerateDevices) {\n throw new Error(\n \"getAvailableDevices not supported under the web platform\",\n );\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices();\n const videoDevices = devices.filter(\n (device) => device.kind === \"videoinput\",\n );\n\n // Group devices by position (front/back)\n const frontDevices: any[] = [];\n const backDevices: any[] = [];\n\n videoDevices.forEach((device, index) => {\n const label = device.label || `Camera ${index + 1}`;\n const labelLower = label.toLowerCase();\n\n // Determine device type based on label\n let deviceType: DeviceType = DeviceType.WIDE_ANGLE;\n let baseZoomRatio = 1.0;\n\n if (labelLower.includes(\"ultra\") || labelLower.includes(\"0.5\")) {\n deviceType = DeviceType.ULTRA_WIDE;\n baseZoomRatio = 0.5;\n } else if (\n labelLower.includes(\"telephoto\") ||\n labelLower.includes(\"tele\") ||\n labelLower.includes(\"2x\") ||\n labelLower.includes(\"3x\")\n ) {\n deviceType = DeviceType.TELEPHOTO;\n baseZoomRatio = 2.0;\n } else if (\n labelLower.includes(\"depth\") ||\n labelLower.includes(\"truedepth\")\n ) {\n deviceType = DeviceType.TRUE_DEPTH;\n baseZoomRatio = 1.0;\n }\n\n const lensInfo = {\n deviceId: device.deviceId,\n label,\n deviceType,\n focalLength: 4.25,\n baseZoomRatio,\n minZoom: 1.0,\n maxZoom: 1.0,\n };\n\n // Determine position and add to appropriate array\n if (labelLower.includes(\"back\") || labelLower.includes(\"rear\")) {\n backDevices.push(lensInfo);\n } else {\n frontDevices.push(lensInfo);\n }\n });\n\n const result: CameraDevice[] = [];\n\n if (frontDevices.length > 0) {\n result.push({\n deviceId: frontDevices[0].deviceId,\n label: \"Front Camera\",\n position: \"front\",\n lenses: frontDevices,\n isLogical: false,\n minZoom: Math.min(...frontDevices.map((d) => d.minZoom)),\n maxZoom: Math.max(...frontDevices.map((d) => d.maxZoom)),\n });\n }\n\n if (backDevices.length > 0) {\n result.push({\n deviceId: backDevices[0].deviceId,\n label: \"Back Camera\",\n position: \"rear\",\n lenses: backDevices,\n isLogical: false,\n minZoom: Math.min(...backDevices.map((d) => d.minZoom)),\n maxZoom: Math.max(...backDevices.map((d) => d.maxZoom)),\n });\n }\n\n return { devices: result };\n }\n\n async getZoom(): Promise<{\n min: number;\n max: number;\n current: number;\n lens: LensInfo;\n }> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video?.srcObject) {\n throw new Error(\"camera is not running\");\n }\n\n const stream = video.srcObject as MediaStream;\n const videoTrack = stream.getVideoTracks()[0];\n\n if (!videoTrack) {\n throw new Error(\"no video track found\");\n }\n\n const capabilities = videoTrack.getCapabilities() as any;\n const settings = videoTrack.getSettings() as any;\n\n if (!capabilities.zoom) {\n throw new Error(\"zoom not supported by this device\");\n }\n\n // Get current device info to determine lens type\n let deviceType: DeviceType = DeviceType.WIDE_ANGLE;\n let baseZoomRatio = 1.0;\n\n if (this.currentDeviceId) {\n const devices = await navigator.mediaDevices.enumerateDevices();\n const device = devices.find((d) => d.deviceId === this.currentDeviceId);\n if (device) {\n const labelLower = device.label.toLowerCase();\n if (labelLower.includes(\"ultra\") || labelLower.includes(\"0.5\")) {\n deviceType = DeviceType.ULTRA_WIDE;\n baseZoomRatio = 0.5;\n } else if (\n labelLower.includes(\"telephoto\") ||\n labelLower.includes(\"tele\") ||\n labelLower.includes(\"2x\") ||\n labelLower.includes(\"3x\")\n ) {\n deviceType = DeviceType.TELEPHOTO;\n baseZoomRatio = 2.0;\n } else if (\n labelLower.includes(\"depth\") ||\n labelLower.includes(\"truedepth\")\n ) {\n deviceType = DeviceType.TRUE_DEPTH;\n baseZoomRatio = 1.0;\n }\n }\n }\n\n const currentZoom = settings.zoom || 1;\n const lensInfo: LensInfo = {\n focalLength: 4.25,\n deviceType,\n baseZoomRatio,\n digitalZoom: currentZoom / baseZoomRatio,\n };\n\n return {\n min: capabilities.zoom.min || 1,\n max: capabilities.zoom.max || 1,\n current: currentZoom,\n lens: lensInfo,\n };\n }\n\n async setZoom(options: { level: number; ramp?: boolean }): Promise<void> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video?.srcObject) {\n throw new Error(\"camera is not running\");\n }\n\n const stream = video.srcObject as MediaStream;\n const videoTrack = stream.getVideoTracks()[0];\n\n if (!videoTrack) {\n throw new Error(\"no video track found\");\n }\n\n const capabilities = videoTrack.getCapabilities() as any;\n\n if (!capabilities.zoom) {\n throw new Error(\"zoom not supported by this device\");\n }\n\n const zoomLevel = Math.max(\n capabilities.zoom.min || 1,\n Math.min(capabilities.zoom.max || 1, options.level),\n );\n\n try {\n await videoTrack.applyConstraints({\n advanced: [{ zoom: zoomLevel } as any],\n });\n } catch (error) {\n throw new Error(`Failed to set zoom: ${error}`);\n }\n }\n\n async getFlashMode(): Promise<{ flashMode: FlashMode }> {\n throw new Error(\"getFlashMode not supported under the web platform\");\n }\n\n async getDeviceId(): Promise<{ deviceId: string }> {\n return { deviceId: this.currentDeviceId || \"\" };\n }\n\n async setDeviceId(options: { deviceId: string }): Promise<void> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video?.srcObject) {\n throw new Error(\"camera is not running\");\n }\n\n // Stop current stream\n this.stopStream(video.srcObject);\n\n // Update current device ID\n this.currentDeviceId = options.deviceId;\n\n // Get new constraints with specific device ID\n const constraints: MediaStreamConstraints = {\n video: {\n deviceId: { exact: options.deviceId },\n width: { ideal: video.videoWidth || 640 },\n height: { ideal: video.videoHeight || 480 },\n },\n };\n\n try {\n // Try to determine camera position from device\n const devices = await navigator.mediaDevices.enumerateDevices();\n const device = devices.find((d) => d.deviceId === options.deviceId);\n this.isBackCamera =\n device?.label.toLowerCase().includes(\"back\") ||\n device?.label.toLowerCase().includes(\"rear\") ||\n false;\n\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n video.srcObject = stream;\n\n // Update video transform based on camera\n if (this.isBackCamera) {\n video.style.transform = \"none\";\n video.style.webkitTransform = \"none\";\n } else {\n video.style.transform = \"scaleX(-1)\";\n video.style.webkitTransform = \"scaleX(-1)\";\n }\n\n await video.play();\n } catch (error) {\n throw new Error(`Failed to swap to device ${options.deviceId}: ${error}`);\n }\n }\n\n async getAspectRatio(): Promise<{ aspectRatio: \"4:3\" | \"16:9\" }> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video) {\n throw new Error(\"camera is not running\");\n }\n\n const width = video.offsetWidth;\n const height = video.offsetHeight;\n\n if (width && height) {\n const ratio = width / height;\n // Check for portrait camera ratios: 4:3 -> 3:4, 16:9 -> 9:16\n if (Math.abs(ratio - 3 / 4) < 0.01) {\n return { aspectRatio: \"4:3\" };\n }\n if (Math.abs(ratio - 9 / 16) < 0.01) {\n return { aspectRatio: \"16:9\" };\n }\n }\n\n // Default to 4:3 if no specific aspect ratio is matched\n return { aspectRatio: \"4:3\" };\n }\n\n async setAspectRatio(options: {\n aspectRatio: \"4:3\" | \"16:9\";\n x?: number;\n y?: number;\n }): Promise<{\n width: number;\n height: number;\n x: number;\n y: number;\n }> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video) {\n throw new Error(\"camera is not running\");\n }\n\n if (options.aspectRatio) {\n const [widthRatio, heightRatio] = options.aspectRatio\n .split(\":\")\n .map(Number);\n // For camera, use portrait orientation: 4:3 becomes 3:4, 16:9 becomes 9:16\n const ratio = heightRatio / widthRatio;\n\n // Get current position and size\n const rect = video.getBoundingClientRect();\n const currentWidth = rect.width;\n const currentHeight = rect.height;\n const currentRatio = currentWidth / currentHeight;\n\n let newWidth: number;\n let newHeight: number;\n\n if (currentRatio > ratio) {\n // Width is larger, fit by height and center horizontally\n newWidth = currentHeight * ratio;\n newHeight = currentHeight;\n } else {\n // Height is larger, fit by width and center vertically\n newWidth = currentWidth;\n newHeight = currentWidth / ratio;\n }\n\n // Calculate position\n let x: number, y: number;\n if (options.x !== undefined && options.y !== undefined) {\n // Use provided coordinates, ensuring they stay within screen boundaries\n x = Math.max(0, Math.min(options.x, window.innerWidth - newWidth));\n y = Math.max(0, Math.min(options.y, window.innerHeight - newHeight));\n } else {\n // Auto-center the view\n x = (window.innerWidth - newWidth) / 2;\n y = (window.innerHeight - newHeight) / 2;\n }\n\n video.style.width = `${newWidth}px`;\n video.style.height = `${newHeight}px`;\n video.style.left = `${x}px`;\n video.style.top = `${y}px`;\n video.style.position = \"absolute\";\n\n return {\n width: Math.round(newWidth),\n height: Math.round(newHeight),\n x: Math.round(x),\n y: Math.round(y),\n };\n } else {\n video.style.objectFit = \"cover\";\n const rect = video.getBoundingClientRect();\n return {\n width: Math.round(rect.width),\n height: Math.round(rect.height),\n x: Math.round(rect.left),\n y: Math.round(rect.top),\n };\n }\n }\n\n private createGridOverlay(gridMode: string): HTMLElement {\n const overlay = document.createElement(\"div\");\n overlay.style.position = \"absolute\";\n overlay.style.top = \"0\";\n overlay.style.left = \"0\";\n overlay.style.width = \"100%\";\n overlay.style.height = \"100%\";\n overlay.style.pointerEvents = \"none\";\n overlay.style.zIndex = \"10\";\n\n const divisions = gridMode === \"3x3\" ? 3 : 4;\n\n // Create SVG for grid lines\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.style.width = \"100%\";\n svg.style.height = \"100%\";\n svg.style.position = \"absolute\";\n svg.style.top = \"0\";\n svg.style.left = \"0\";\n\n // Create grid lines\n for (let i = 1; i < divisions; i++) {\n // Vertical lines\n const verticalLine = document.createElementNS(\n \"http://www.w3.org/2000/svg\",\n \"line\",\n );\n verticalLine.setAttribute(\"x1\", `${(i / divisions) * 100}%`);\n verticalLine.setAttribute(\"y1\", \"0%\");\n verticalLine.setAttribute(\"x2\", `${(i / divisions) * 100}%`);\n verticalLine.setAttribute(\"y2\", \"100%\");\n verticalLine.setAttribute(\"stroke\", \"rgba(255, 255, 255, 0.5)\");\n verticalLine.setAttribute(\"stroke-width\", \"1\");\n svg.appendChild(verticalLine);\n\n // Horizontal lines\n const horizontalLine = document.createElementNS(\n \"http://www.w3.org/2000/svg\",\n \"line\",\n );\n horizontalLine.setAttribute(\"x1\", \"0%\");\n horizontalLine.setAttribute(\"y1\", `${(i / divisions) * 100}%`);\n horizontalLine.setAttribute(\"x2\", \"100%\");\n horizontalLine.setAttribute(\"y2\", `${(i / divisions) * 100}%`);\n horizontalLine.setAttribute(\"stroke\", \"rgba(255, 255, 255, 0.5)\");\n horizontalLine.setAttribute(\"stroke-width\", \"1\");\n svg.appendChild(horizontalLine);\n }\n\n overlay.appendChild(svg);\n return overlay;\n }\n\n async setGridMode(options: { gridMode: GridMode }): Promise<void> {\n // Web implementation of grid mode would need to be implemented\n // For now, just resolve as a no-op\n console.warn(\n `Grid mode '${options.gridMode}' is not yet implemented for web platform`,\n );\n }\n\n async getGridMode(): Promise<{ gridMode: GridMode }> {\n // Web implementation - default to none\n return { gridMode: \"none\" };\n }\n\n async getPreviewSize(): Promise<{\n x: number;\n y: number;\n width: number;\n height: number;\n }> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video) {\n throw new Error(\"camera is not running\");\n }\n return {\n x: video.offsetLeft,\n y: video.offsetTop,\n width: video.width,\n height: video.height,\n };\n }\n async setPreviewSize(options: {\n x: number;\n y: number;\n width: number;\n height: number;\n }): Promise<{\n width: number;\n height: number;\n x: number;\n y: number;\n }> {\n const video = document.getElementById(DEFAULT_VIDEO_ID) as HTMLVideoElement;\n if (!video) {\n throw new Error(\"camera is not running\");\n }\n video.style.left = `${options.x}px`;\n video.style.top = `${options.y}px`;\n video.width = options.width;\n video.height = options.height;\n\n return {\n width: options.width,\n height: options.height,\n x: options.x,\n y: options.y,\n };\n }\n}\n"]}
|
package/dist/plugin.cjs.js
CHANGED
|
@@ -51,7 +51,9 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
51
51
|
if (video) {
|
|
52
52
|
video.remove();
|
|
53
53
|
}
|
|
54
|
-
const container = options.parent
|
|
54
|
+
const container = options.parent
|
|
55
|
+
? document.getElementById(options.parent)
|
|
56
|
+
: document.body;
|
|
55
57
|
if (!container) {
|
|
56
58
|
throw new Error("container not found");
|
|
57
59
|
}
|
|
@@ -84,7 +86,9 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
84
86
|
this.videoElement.style.top = `${options.y}px`;
|
|
85
87
|
}
|
|
86
88
|
if (options.aspectRatio) {
|
|
87
|
-
const [widthRatio, heightRatio] = options.aspectRatio
|
|
89
|
+
const [widthRatio, heightRatio] = options.aspectRatio
|
|
90
|
+
.split(":")
|
|
91
|
+
.map(Number);
|
|
88
92
|
const ratio = widthRatio / heightRatio;
|
|
89
93
|
if (options.width) {
|
|
90
94
|
this.videoElement.height = options.width / ratio;
|
|
@@ -94,7 +98,7 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
94
98
|
}
|
|
95
99
|
}
|
|
96
100
|
else {
|
|
97
|
-
this.videoElement.style.objectFit =
|
|
101
|
+
this.videoElement.style.objectFit = "cover";
|
|
98
102
|
}
|
|
99
103
|
const constraints = {
|
|
100
104
|
video: {
|
|
@@ -254,7 +258,7 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
254
258
|
throw new Error("getAvailableDevices not supported under the web platform");
|
|
255
259
|
}
|
|
256
260
|
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
257
|
-
const videoDevices = devices.filter(device => device.kind ===
|
|
261
|
+
const videoDevices = devices.filter((device) => device.kind === "videoinput");
|
|
258
262
|
// Group devices by position (front/back)
|
|
259
263
|
const frontDevices = [];
|
|
260
264
|
const backDevices = [];
|
|
@@ -264,15 +268,19 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
264
268
|
// Determine device type based on label
|
|
265
269
|
let deviceType = exports.DeviceType.WIDE_ANGLE;
|
|
266
270
|
let baseZoomRatio = 1.0;
|
|
267
|
-
if (labelLower.includes(
|
|
271
|
+
if (labelLower.includes("ultra") || labelLower.includes("0.5")) {
|
|
268
272
|
deviceType = exports.DeviceType.ULTRA_WIDE;
|
|
269
273
|
baseZoomRatio = 0.5;
|
|
270
274
|
}
|
|
271
|
-
else if (labelLower.includes(
|
|
275
|
+
else if (labelLower.includes("telephoto") ||
|
|
276
|
+
labelLower.includes("tele") ||
|
|
277
|
+
labelLower.includes("2x") ||
|
|
278
|
+
labelLower.includes("3x")) {
|
|
272
279
|
deviceType = exports.DeviceType.TELEPHOTO;
|
|
273
280
|
baseZoomRatio = 2.0;
|
|
274
281
|
}
|
|
275
|
-
else if (labelLower.includes(
|
|
282
|
+
else if (labelLower.includes("depth") ||
|
|
283
|
+
labelLower.includes("truedepth")) {
|
|
276
284
|
deviceType = exports.DeviceType.TRUE_DEPTH;
|
|
277
285
|
baseZoomRatio = 1.0;
|
|
278
286
|
}
|
|
@@ -283,10 +291,10 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
283
291
|
focalLength: 4.25,
|
|
284
292
|
baseZoomRatio,
|
|
285
293
|
minZoom: 1.0,
|
|
286
|
-
maxZoom: 1.0
|
|
294
|
+
maxZoom: 1.0,
|
|
287
295
|
};
|
|
288
296
|
// Determine position and add to appropriate array
|
|
289
|
-
if (labelLower.includes(
|
|
297
|
+
if (labelLower.includes("back") || labelLower.includes("rear")) {
|
|
290
298
|
backDevices.push(lensInfo);
|
|
291
299
|
}
|
|
292
300
|
else {
|
|
@@ -301,8 +309,8 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
301
309
|
position: "front",
|
|
302
310
|
lenses: frontDevices,
|
|
303
311
|
isLogical: false,
|
|
304
|
-
minZoom: Math.min(...frontDevices.map(d => d.minZoom)),
|
|
305
|
-
maxZoom: Math.max(...frontDevices.map(d => d.maxZoom))
|
|
312
|
+
minZoom: Math.min(...frontDevices.map((d) => d.minZoom)),
|
|
313
|
+
maxZoom: Math.max(...frontDevices.map((d) => d.maxZoom)),
|
|
306
314
|
});
|
|
307
315
|
}
|
|
308
316
|
if (backDevices.length > 0) {
|
|
@@ -312,8 +320,8 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
312
320
|
position: "rear",
|
|
313
321
|
lenses: backDevices,
|
|
314
322
|
isLogical: false,
|
|
315
|
-
minZoom: Math.min(...backDevices.map(d => d.minZoom)),
|
|
316
|
-
maxZoom: Math.max(...backDevices.map(d => d.maxZoom))
|
|
323
|
+
minZoom: Math.min(...backDevices.map((d) => d.minZoom)),
|
|
324
|
+
maxZoom: Math.max(...backDevices.map((d) => d.maxZoom)),
|
|
317
325
|
});
|
|
318
326
|
}
|
|
319
327
|
return { devices: result };
|
|
@@ -338,18 +346,22 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
338
346
|
let baseZoomRatio = 1.0;
|
|
339
347
|
if (this.currentDeviceId) {
|
|
340
348
|
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
341
|
-
const device = devices.find(d => d.deviceId === this.currentDeviceId);
|
|
349
|
+
const device = devices.find((d) => d.deviceId === this.currentDeviceId);
|
|
342
350
|
if (device) {
|
|
343
351
|
const labelLower = device.label.toLowerCase();
|
|
344
|
-
if (labelLower.includes(
|
|
352
|
+
if (labelLower.includes("ultra") || labelLower.includes("0.5")) {
|
|
345
353
|
deviceType = exports.DeviceType.ULTRA_WIDE;
|
|
346
354
|
baseZoomRatio = 0.5;
|
|
347
355
|
}
|
|
348
|
-
else if (labelLower.includes(
|
|
356
|
+
else if (labelLower.includes("telephoto") ||
|
|
357
|
+
labelLower.includes("tele") ||
|
|
358
|
+
labelLower.includes("2x") ||
|
|
359
|
+
labelLower.includes("3x")) {
|
|
349
360
|
deviceType = exports.DeviceType.TELEPHOTO;
|
|
350
361
|
baseZoomRatio = 2.0;
|
|
351
362
|
}
|
|
352
|
-
else if (labelLower.includes(
|
|
363
|
+
else if (labelLower.includes("depth") ||
|
|
364
|
+
labelLower.includes("truedepth")) {
|
|
353
365
|
deviceType = exports.DeviceType.TRUE_DEPTH;
|
|
354
366
|
baseZoomRatio = 1.0;
|
|
355
367
|
}
|
|
@@ -360,7 +372,7 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
360
372
|
focalLength: 4.25,
|
|
361
373
|
deviceType,
|
|
362
374
|
baseZoomRatio,
|
|
363
|
-
digitalZoom: currentZoom / baseZoomRatio
|
|
375
|
+
digitalZoom: currentZoom / baseZoomRatio,
|
|
364
376
|
};
|
|
365
377
|
return {
|
|
366
378
|
min: capabilities.zoom.min || 1,
|
|
@@ -386,7 +398,7 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
386
398
|
const zoomLevel = Math.max(capabilities.zoom.min || 1, Math.min(capabilities.zoom.max || 1, options.level));
|
|
387
399
|
try {
|
|
388
400
|
await videoTrack.applyConstraints({
|
|
389
|
-
advanced: [{ zoom: zoomLevel }]
|
|
401
|
+
advanced: [{ zoom: zoomLevel }],
|
|
390
402
|
});
|
|
391
403
|
}
|
|
392
404
|
catch (error) {
|
|
@@ -419,8 +431,11 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
419
431
|
try {
|
|
420
432
|
// Try to determine camera position from device
|
|
421
433
|
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
422
|
-
const device = devices.find(d => d.deviceId === options.deviceId);
|
|
423
|
-
this.isBackCamera =
|
|
434
|
+
const device = devices.find((d) => d.deviceId === options.deviceId);
|
|
435
|
+
this.isBackCamera =
|
|
436
|
+
(device === null || device === void 0 ? void 0 : device.label.toLowerCase().includes("back")) ||
|
|
437
|
+
(device === null || device === void 0 ? void 0 : device.label.toLowerCase().includes("rear")) ||
|
|
438
|
+
false;
|
|
424
439
|
const stream = await navigator.mediaDevices.getUserMedia(constraints);
|
|
425
440
|
video.srcObject = stream;
|
|
426
441
|
// Update video transform based on camera
|
|
@@ -448,15 +463,15 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
448
463
|
if (width && height) {
|
|
449
464
|
const ratio = width / height;
|
|
450
465
|
// Check for portrait camera ratios: 4:3 -> 3:4, 16:9 -> 9:16
|
|
451
|
-
if (Math.abs(ratio -
|
|
452
|
-
return { aspectRatio:
|
|
466
|
+
if (Math.abs(ratio - 3 / 4) < 0.01) {
|
|
467
|
+
return { aspectRatio: "4:3" };
|
|
453
468
|
}
|
|
454
|
-
if (Math.abs(ratio -
|
|
455
|
-
return { aspectRatio:
|
|
469
|
+
if (Math.abs(ratio - 9 / 16) < 0.01) {
|
|
470
|
+
return { aspectRatio: "16:9" };
|
|
456
471
|
}
|
|
457
472
|
}
|
|
458
473
|
// Default to 4:3 if no specific aspect ratio is matched
|
|
459
|
-
return { aspectRatio:
|
|
474
|
+
return { aspectRatio: "4:3" };
|
|
460
475
|
}
|
|
461
476
|
async setAspectRatio(options) {
|
|
462
477
|
const video = document.getElementById(DEFAULT_VIDEO_ID);
|
|
@@ -464,7 +479,9 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
464
479
|
throw new Error("camera is not running");
|
|
465
480
|
}
|
|
466
481
|
if (options.aspectRatio) {
|
|
467
|
-
const [widthRatio, heightRatio] = options.aspectRatio
|
|
482
|
+
const [widthRatio, heightRatio] = options.aspectRatio
|
|
483
|
+
.split(":")
|
|
484
|
+
.map(Number);
|
|
468
485
|
// For camera, use portrait orientation: 4:3 becomes 3:4, 16:9 becomes 9:16
|
|
469
486
|
const ratio = heightRatio / widthRatio;
|
|
470
487
|
// Get current position and size
|
|
@@ -500,22 +517,22 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
500
517
|
video.style.height = `${newHeight}px`;
|
|
501
518
|
video.style.left = `${x}px`;
|
|
502
519
|
video.style.top = `${y}px`;
|
|
503
|
-
video.style.position =
|
|
520
|
+
video.style.position = "absolute";
|
|
504
521
|
return {
|
|
505
522
|
width: Math.round(newWidth),
|
|
506
523
|
height: Math.round(newHeight),
|
|
507
524
|
x: Math.round(x),
|
|
508
|
-
y: Math.round(y)
|
|
525
|
+
y: Math.round(y),
|
|
509
526
|
};
|
|
510
527
|
}
|
|
511
528
|
else {
|
|
512
|
-
video.style.objectFit =
|
|
529
|
+
video.style.objectFit = "cover";
|
|
513
530
|
const rect = video.getBoundingClientRect();
|
|
514
531
|
return {
|
|
515
532
|
width: Math.round(rect.width),
|
|
516
533
|
height: Math.round(rect.height),
|
|
517
534
|
x: Math.round(rect.left),
|
|
518
|
-
y: Math.round(rect.top)
|
|
535
|
+
y: Math.round(rect.top),
|
|
519
536
|
};
|
|
520
537
|
}
|
|
521
538
|
}
|
|
@@ -567,7 +584,7 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
567
584
|
}
|
|
568
585
|
async getGridMode() {
|
|
569
586
|
// Web implementation - default to none
|
|
570
|
-
return { gridMode:
|
|
587
|
+
return { gridMode: "none" };
|
|
571
588
|
}
|
|
572
589
|
async getPreviewSize() {
|
|
573
590
|
const video = document.getElementById(DEFAULT_VIDEO_ID);
|
|
@@ -578,7 +595,7 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
578
595
|
x: video.offsetLeft,
|
|
579
596
|
y: video.offsetTop,
|
|
580
597
|
width: video.width,
|
|
581
|
-
height: video.height
|
|
598
|
+
height: video.height,
|
|
582
599
|
};
|
|
583
600
|
}
|
|
584
601
|
async setPreviewSize(options) {
|
|
@@ -594,7 +611,7 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
594
611
|
width: options.width,
|
|
595
612
|
height: options.height,
|
|
596
613
|
x: options.x,
|
|
597
|
-
y: options.y
|
|
614
|
+
y: options.y,
|
|
598
615
|
};
|
|
599
616
|
}
|
|
600
617
|
}
|