2017-04-26 1 views
0

Je veux mettre en œuvre une application pour enregistrer 60 fps avec un temps d'exposition fixe. En tant qu'appareil, j'ai le Google Pixel. Depuis son application de caméra native peut faire 60 fps et il a le niveau matériel LEVEL_3, je pensais que ce ne sera pas un problème, mais je ne peux pas le faire fonctionner. Avec getSupportedPreviewFpsRange() (de l'appareil photo api) je reçois les gammes [15, 15], [24, 24], [7, 30], [30, 30] et avec getHighSpeedVideoFpsRangesFor (de camera2 api) je reçois les gammes [30, 120], [120, 120], [30, 240], [240, 240], [240, 240]. Quand je mets [60, 60] à CONTROL_AE_TARGET_FPS_RANGE j'obtiens l'erreur "la gamme de Fps [60, 60] dans la demande n'est pas une gamme fps à grande vitesse soutenue".Comment utiliser api camera2 Android pour enregistrer 60 fps vidéo avec un temps d'exposition fixe

Est-il même possible pour une application personnalisée d'enregistrer une vidéo à 60 fps?

Si non, comment est-il de 120 fps? (J'ai 120 images par seconde travail d'enregistrement, mais quand je mis CONTROL_AE_MODE hors tension et régler manuellement la SENSOR_EXPOSURE_TIME et SENSOR_SENSITIVITY, le taux de trame réduit à nouveau à 30 images par seconde)

Répondre

2

60fps enregistrement sur Pixel peut être fait dans les paramètres de capture normale - prendre regardez CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, et créez simplement une session de capture normale. Vous devrez faire attention et ne pas mettre trop haut d'une résolution que vos sorties, car 60fps ne peut pas être fait au-dessus de 1080p, si je me souviens bien.

Vous pouvez confirmer que via le StreamConfigurationMap pour les tailles/formats que vous visez à utiliser.

+0

thx Eddy, j'ai réussi à atteindre 60 fps par enregistrement vidéo et même par capture YUV (avec résolution 1920x1080). Ce fut une surprise avec YUV, parce que j'ai vérifié la durée de la trame minale pour YUV_420_88 à la fois pour la plus grande taille (4048x3036) et la plus petite taille (160x120) et ils étaient 33333333 ns. Mais pour la taille (1920x1080) c'est en effet 16666666 ns. Mais lorsque je règle manuellement le temps d'exposition et la valeur de ios avec les réglages 'CONTROL_AE_MODE' et' CONTROL_MODE' désactivés, la fréquence d'images chute de nouveau à 30 fps: Ai-je fait quelque chose de mal? Ou fonctionne 60fps seulement avec l'exposition automatique? – Jian

+0

Avez-vous défini la durée du cadre (https://developer.android.com/reference/android/hardware/camera2/CaptureRequest.html#SENSOR_FRAME_DURATION)? C'est le troisième contrôle manuel; vous devez régler cela à 60fps sur votre propre. La valeur par défaut est probablement 1/30s, pas 1/60s. –

+0

oui J'ai défini 'SENSOR_FRAME_DURATION' à 16666666, ce qui correspond exactement à la valeur' getOutputMinFrameDuration (ImageFormat.YUV_420_888, new Size (1920, 1080)) '. J'ai fait les étapes que vous avez décrites ici [stackoverflow.com/questions/28293078/how-to-control-iso-manually-in-camera2-android](http://stackoverflow.com/questions/28293078/how- to-control-iso-manual-in-camera2-android) à la fois pour la session de prévisualisation et la session de capture, ils ont tous deux chuté à 30 fps. – Jian