3

J'observe un étrange problème visuel lorsque j'utilise un GLSurfaceView pour afficher un aperçu de la caméra sur Android.Problème de couleur de l'aperçu de la caméra Android (rouge et bleu sont échangés)

Les rouges et les bleus semblent être intervertis dans le fil de prévisualisation de la caméra - les verts semblent ok. Voir la capture d'écran ci-dessous.

enter image description here

Je ne suis voyant ce problème sur quelques appareils (toutes les variantes du Samsung Galaxy S4).

Le problème survient uniquement lors de l'utilisation de certaines résolutions - 720x960 vers le haut est bien, tout ce qui est en dessous de ce problème présente le problème (par exemple 640x480).

Le problème se produit à la fois sur la caméra avant et arrière.

La question est reproductible dans l'application de l'échantillon Grafika (en supposant que vous avez une pratique Samsung Galaxy S4) en changeant la ligne 185 de CameraCaptureActivity.java comme ceci:

// openCamera(1280, 720);  // change this ... 
    openCamera(640, 480);  // to this 

je besoin d'encoder H264 à 640x480. J'ai pensé que je pourrais contourner le problème en utilisant une résolution plus élevée (même format) mais en réglant mon encodeur à 640x480 - malheureusement, cela conduit à un flux vidéo blocky horrible, probablement dû au rééchantillonnage.

Répondre

1

basée sur des essais & erreur (et des indices trouvés in this answer et here) J'ai pu comprendre que cela est dû en activant la fonctionnalité de soupçon d'enregistrement:

params.setRecordingHint(true); // this causes the problem 

je aussi avoir quelques problèmes de ratio d'aspect qui ont été résolus en éteignant cela. Il semble donc que Samsung ait foiré la fonctionnalité setRecordingHint au niveau du pilote ou du matériel. Il est intéressant de noter que si la valeur "video-size" n'est pas documentée, alors je suis capable de résoudre le problème ET de garder setRecordingHint sous tension.

params.set("video-size", "640x480"); 

Je ne sais pas ce que cela fait par rapport à:

params.setPreviewSize(640, 480); 

ou

params.setPictureSize(640, 480); 

mais il est clairement un impact. Cependant, comme cela semble être non documenté et que la désactivation de setRecordingHint ne semble pas affecter les performances, je pense que désactiver setRecordingHint.

+0

Cela est vrai, lorsque setRecordingHint est défini sur true dans certaines résolutions, il provoque également un problème d'écran vert. – RxRead