Compare commits
	
		
			3 Commits
		
	
	
		
			eyenov/pre
			...
			031aa9d43a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 031aa9d43a | ||
| fcf5fe70f3 | |||
| 0329e7976d | 
| @@ -133,8 +133,8 @@ android { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   compileOptions { |   compileOptions { | ||||||
|     sourceCompatibility JavaVersion.VERSION_1_8 |     sourceCompatibility JavaVersion.VERSION_17 | ||||||
|     targetCompatibility JavaVersion.VERSION_1_8 |     targetCompatibility JavaVersion.VERSION_17 | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   externalNativeBuild { |   externalNativeBuild { | ||||||
|   | |||||||
| @@ -1,4 +1,3 @@ | |||||||
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" | <manifest xmlns:android="http://schemas.android.com/apk/res/android"> | ||||||
|           package="com.mrousavy.camera"> |  | ||||||
|  |  | ||||||
| </manifest> | </manifest> | ||||||
|   | |||||||
| @@ -72,6 +72,10 @@ class CameraView(context: Context) : | |||||||
|   var zoom: Float = 1f // in "factor" |   var zoom: Float = 1f // in "factor" | ||||||
|   var exposure: Double = 1.0 |   var exposure: Double = 1.0 | ||||||
|   var orientation: Orientation = Orientation.PORTRAIT |   var orientation: Orientation = Orientation.PORTRAIT | ||||||
|  |       set(value) { | ||||||
|  |         field = value | ||||||
|  |         previewView.orientation = value | ||||||
|  |       } | ||||||
|   var enableZoomGesture = false |   var enableZoomGesture = false | ||||||
|     set(value) { |     set(value) { | ||||||
|       field = value |       field = value | ||||||
|   | |||||||
| @@ -10,6 +10,7 @@ import com.mrousavy.camera.types.CodeScannerOptions | |||||||
| import com.mrousavy.camera.types.Orientation | import com.mrousavy.camera.types.Orientation | ||||||
| import com.mrousavy.camera.types.PixelFormat | import com.mrousavy.camera.types.PixelFormat | ||||||
| import com.mrousavy.camera.types.ResizeMode | import com.mrousavy.camera.types.ResizeMode | ||||||
|  | import android.util.Log | ||||||
| import com.mrousavy.camera.types.Torch | import com.mrousavy.camera.types.Torch | ||||||
| import com.mrousavy.camera.types.VideoStabilizationMode | import com.mrousavy.camera.types.VideoStabilizationMode | ||||||
|  |  | ||||||
| @@ -182,6 +183,7 @@ class CameraViewManager : ViewGroupManager<CameraView>() { | |||||||
|   fun setOrientation(view: CameraView, orientation: String?) { |   fun setOrientation(view: CameraView, orientation: String?) { | ||||||
|     if (orientation != null) { |     if (orientation != null) { | ||||||
|       val newMode = Orientation.fromUnionValue(orientation) |       val newMode = Orientation.fromUnionValue(orientation) | ||||||
|  |       Log.i(TAG, "Orientation set to: $newMode") | ||||||
|       view.orientation = newMode |       view.orientation = newMode | ||||||
|     } else { |     } else { | ||||||
|       view.orientation = Orientation.PORTRAIT |       view.orientation = Orientation.PORTRAIT | ||||||
|   | |||||||
| @@ -312,7 +312,7 @@ class CameraSession(private val context: Context, private val cameraManager: Cam | |||||||
|         enableHdr |         enableHdr | ||||||
|       ) |       ) | ||||||
|       outputs.add(output) |       outputs.add(output) | ||||||
|       // Size is usually landscape, so we flip it here |  | ||||||
|       previewView?.setSurfaceSize(size.width, size.height, deviceDetails.sensorOrientation) |       previewView?.setSurfaceSize(size.width, size.height, deviceDetails.sensorOrientation) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -36,6 +36,13 @@ class PreviewView(context: Context, callback: SurfaceHolder.Callback) : | |||||||
|         updateLayout() |         updateLayout() | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  |   var orientation: Orientation = Orientation.PORTRAIT | ||||||
|  |       set(value) { | ||||||
|  |         if (field != value) { | ||||||
|  |           Log.i(TAG, "View Orientation changed: $field -> $value") | ||||||
|  |           field = value | ||||||
|  |         } | ||||||
|  |       } | ||||||
|   private var inputOrientation: Orientation = Orientation.LANDSCAPE_LEFT |   private var inputOrientation: Orientation = Orientation.LANDSCAPE_LEFT | ||||||
|     set(value) { |     set(value) { | ||||||
|       if (field != value) { |       if (field != value) { | ||||||
| @@ -101,6 +108,11 @@ class PreviewView(context: Context, callback: SurfaceHolder.Callback) : | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   private fun getSize(contentSize: Size, containerSize: Size, resizeMode: ResizeMode): Size { |   private fun getSize(contentSize: Size, containerSize: Size, resizeMode: ResizeMode): Size { | ||||||
|  |     var contentSize = contentSize | ||||||
|  |     // Swap dimensions if orientation is landscape | ||||||
|  |     if (orientation.isLandscape()) { | ||||||
|  |       contentSize = Size(contentSize.height, contentSize.width) | ||||||
|  |     } | ||||||
|     val contentAspectRatio = contentSize.width.toDouble() / contentSize.height |     val contentAspectRatio = contentSize.width.toDouble() / contentSize.height | ||||||
|     val containerAspectRatio = containerSize.width.toDouble() / containerSize.height |     val containerAspectRatio = containerSize.width.toDouble() / containerSize.height | ||||||
|     if (!(contentAspectRatio > 0 && containerAspectRatio > 0)) { |     if (!(contentAspectRatio > 0 && containerAspectRatio > 0)) { | ||||||
| @@ -128,11 +140,11 @@ class PreviewView(context: Context, callback: SurfaceHolder.Callback) : | |||||||
|   override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { |   override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { | ||||||
|     super.onMeasure(widthMeasureSpec, heightMeasureSpec) |     super.onMeasure(widthMeasureSpec, heightMeasureSpec) | ||||||
|  |  | ||||||
|     val viewSize = Size(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.getSize(heightMeasureSpec)) |     val measuredViewSize = Size(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.getSize(heightMeasureSpec)) | ||||||
|     val surfaceSize = size.rotatedBy(inputOrientation) |     val surfaceSize = size.rotatedBy(inputOrientation) | ||||||
|     val fittedSize = getSize(surfaceSize, viewSize, resizeMode) |     val fittedSize = getSize(surfaceSize, measuredViewSize, resizeMode) | ||||||
|  |  | ||||||
|     Log.i(TAG, "PreviewView is $viewSize, rendering $surfaceSize content ($inputOrientation). Resizing to: $fittedSize ($resizeMode)") |     Log.i(TAG, "PreviewView is $measuredViewSize rendering $surfaceSize orientation ($orientation). Resizing to: $fittedSize ($resizeMode)") | ||||||
|     setMeasuredDimension(fittedSize.width, fittedSize.height) |     setMeasuredDimension(fittedSize.width, fittedSize.height) | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user