44
55package io .flutter .plugins .camera .features .resolution ;
66
7- import android .annotation .TargetApi ;
87import android .hardware .camera2 .CaptureRequest ;
98import android .media .CamcorderProfile ;
10- import android .media .EncoderProfiles ;
11- import android .os .Build ;
129import android .util .Size ;
1310import androidx .annotation .VisibleForTesting ;
1411import io .flutter .plugins .camera .CameraProperties ;
1512import io .flutter .plugins .camera .features .CameraFeature ;
16- import java .util .List ;
1713
1814/**
1915 * Controls the resolutions configuration on the {@link android.hardware.camera2} API.
2521public class ResolutionFeature extends CameraFeature <ResolutionPreset > {
2622 private Size captureSize ;
2723 private Size previewSize ;
28- private CamcorderProfile recordingProfileLegacy ;
29- private EncoderProfiles recordingProfile ;
24+ private CamcorderProfile recordingProfile ;
3025 private ResolutionPreset currentSetting ;
3126 private int cameraId ;
3227
@@ -56,11 +51,7 @@ public ResolutionFeature(
5651 *
5752 * @return Resolution information to configure the {@link android.hardware.camera2} API.
5853 */
59- public CamcorderProfile getRecordingProfileLegacy () {
60- return this .recordingProfileLegacy ;
61- }
62-
63- public EncoderProfiles getRecordingProfile () {
54+ public CamcorderProfile getRecordingProfile () {
6455 return this .recordingProfile ;
6556 }
6657
@@ -109,29 +100,19 @@ public void updateBuilder(CaptureRequest.Builder requestBuilder) {
109100 }
110101
111102 @ VisibleForTesting
112- static Size computeBestPreviewSize (int cameraId , ResolutionPreset preset )
113- throws IndexOutOfBoundsException {
103+ static Size computeBestPreviewSize (int cameraId , ResolutionPreset preset ) {
114104 if (preset .ordinal () > ResolutionPreset .high .ordinal ()) {
115105 preset = ResolutionPreset .high ;
116106 }
117- if (Build .VERSION .SDK_INT >= 31 ) {
118- EncoderProfiles profile =
119- getBestAvailableCamcorderProfileForResolutionPreset (cameraId , preset );
120- List <EncoderProfiles .VideoProfile > videoProfiles = profile .getVideoProfiles ();
121- EncoderProfiles .VideoProfile defaultVideoProfile = videoProfiles .get (0 );
122107
123- return new Size (defaultVideoProfile .getWidth (), defaultVideoProfile .getHeight ());
124- } else {
125- @ SuppressWarnings ("deprecation" )
126- CamcorderProfile profile =
127- getBestAvailableCamcorderProfileForResolutionPresetLegacy (cameraId , preset );
128- return new Size (profile .videoFrameWidth , profile .videoFrameHeight );
129- }
108+ CamcorderProfile profile =
109+ getBestAvailableCamcorderProfileForResolutionPreset (cameraId , preset );
110+ return new Size (profile .videoFrameWidth , profile .videoFrameHeight );
130111 }
131112
132113 /**
133114 * Gets the best possible {@link android.media.CamcorderProfile} for the supplied {@link
134- * ResolutionPreset}. Supports SDK < 31.
115+ * ResolutionPreset}.
135116 *
136117 * @param cameraId Camera identifier which indicates the device's camera for which to select a
137118 * {@link android.media.CamcorderProfile}.
@@ -140,7 +121,7 @@ static Size computeBestPreviewSize(int cameraId, ResolutionPreset preset)
140121 * @return The best possible {@link android.media.CamcorderProfile} that matches the supplied
141122 * {@link ResolutionPreset}.
142123 */
143- public static CamcorderProfile getBestAvailableCamcorderProfileForResolutionPresetLegacy (
124+ public static CamcorderProfile getBestAvailableCamcorderProfileForResolutionPreset (
144125 int cameraId , ResolutionPreset preset ) {
145126 if (cameraId < 0 ) {
146127 throw new AssertionError (
@@ -183,74 +164,13 @@ public static CamcorderProfile getBestAvailableCamcorderProfileForResolutionPres
183164 }
184165 }
185166
186- @ TargetApi (Build .VERSION_CODES .S )
187- public static EncoderProfiles getBestAvailableCamcorderProfileForResolutionPreset (
188- int cameraId , ResolutionPreset preset ) {
189- if (cameraId < 0 ) {
190- throw new AssertionError (
191- "getBestAvailableCamcorderProfileForResolutionPreset can only be used with valid (>=0) camera identifiers." );
192- }
193-
194- String cameraIdString = Integer .toString (cameraId );
195-
196- switch (preset ) {
197- // All of these cases deliberately fall through to get the best available profile.
198- case max :
199- if (CamcorderProfile .hasProfile (cameraId , CamcorderProfile .QUALITY_HIGH )) {
200- return CamcorderProfile .getAll (cameraIdString , CamcorderProfile .QUALITY_HIGH );
201- }
202- case ultraHigh :
203- if (CamcorderProfile .hasProfile (cameraId , CamcorderProfile .QUALITY_2160P )) {
204- return CamcorderProfile .getAll (cameraIdString , CamcorderProfile .QUALITY_2160P );
205- }
206- case veryHigh :
207- if (CamcorderProfile .hasProfile (cameraId , CamcorderProfile .QUALITY_1080P )) {
208- return CamcorderProfile .getAll (cameraIdString , CamcorderProfile .QUALITY_1080P );
209- }
210- case high :
211- if (CamcorderProfile .hasProfile (cameraId , CamcorderProfile .QUALITY_720P )) {
212- return CamcorderProfile .getAll (cameraIdString , CamcorderProfile .QUALITY_720P );
213- }
214- case medium :
215- if (CamcorderProfile .hasProfile (cameraId , CamcorderProfile .QUALITY_480P )) {
216- return CamcorderProfile .getAll (cameraIdString , CamcorderProfile .QUALITY_480P );
217- }
218- case low :
219- if (CamcorderProfile .hasProfile (cameraId , CamcorderProfile .QUALITY_QVGA )) {
220- return CamcorderProfile .getAll (cameraIdString , CamcorderProfile .QUALITY_QVGA );
221- }
222- default :
223- if (CamcorderProfile .hasProfile (cameraId , CamcorderProfile .QUALITY_LOW )) {
224- return CamcorderProfile .getAll (cameraIdString , CamcorderProfile .QUALITY_LOW );
225- }
226-
227- throw new IllegalArgumentException (
228- "No capture session available for current capture session." );
229- }
230- }
231-
232- private void configureResolution (ResolutionPreset resolutionPreset , int cameraId )
233- throws IndexOutOfBoundsException {
167+ private void configureResolution (ResolutionPreset resolutionPreset , int cameraId ) {
234168 if (!checkIsSupported ()) {
235169 return ;
236170 }
237-
238- if (Build .VERSION .SDK_INT >= 31 ) {
239- recordingProfile =
240- getBestAvailableCamcorderProfileForResolutionPreset (cameraId , resolutionPreset );
241- List <EncoderProfiles .VideoProfile > videoProfiles = recordingProfile .getVideoProfiles ();
242-
243- EncoderProfiles .VideoProfile defaultVideoProfile = videoProfiles .get (0 );
244- captureSize = new Size (defaultVideoProfile .getWidth (), defaultVideoProfile .getHeight ());
245- } else {
246- @ SuppressWarnings ("deprecation" )
247- CamcorderProfile camcorderProfile =
248- getBestAvailableCamcorderProfileForResolutionPresetLegacy (cameraId , resolutionPreset );
249- recordingProfileLegacy = camcorderProfile ;
250- captureSize =
251- new Size (recordingProfileLegacy .videoFrameWidth , recordingProfileLegacy .videoFrameHeight );
252- }
253-
171+ recordingProfile =
172+ getBestAvailableCamcorderProfileForResolutionPreset (cameraId , resolutionPreset );
173+ captureSize = new Size (recordingProfile .videoFrameWidth , recordingProfile .videoFrameHeight );
254174 previewSize = computeBestPreviewSize (cameraId , resolutionPreset );
255175 }
256176}
0 commit comments