2011-05-09 12 views
7

Piszę aplikację, w której zezwalam użytkownikowi na przechwytywanie wideo przy użyciu aparatu telefonicznego. Używam własnego kodu do nagrania wideo w przeciwieństwie do Androidów wbudowanych w aplikację aparatu.Jak uzyskać obsługiwane rozdzielczości kamer wideo w systemie Android?

Wszystko działa poprawnie, ale muszę mieć dostęp do listy obsługiwanych rozdzielczości kamer, aby w czasie wykonywania móc wybrać, której z nich użyć. Szukam czegoś takiego jak getSupportedPictureSizes(), ale dla wideo. Android 3.0 ma tę funkcjonalność, ale szukam czegoś dla wersji 2.2.

W tej chwili używam CamcorderProfile.QUALITY_HIGH/QUALITY_LOW, ale to daje mi tylko dwie opcje i na telefonach, na których testowałem, rozmiary plików są na każdym skrajności. (QUALITY_LOW wynosi 216 kb/s, a QUALITY_HIGH jest> 3 MB/s)

Każda pomoc będzie bardzo doceniona, Dziękujemy!

Odpowiedz

9

Czy próbowałeś użyć klasy getSupportedVideoSizes() method z klasy Camera.Parameters?

public List<Camera.Size> getSupportedVideoSizes() 

Ta metoda zwraca listę obiektów o rozmiarze. Zwróci ona null, jeśli kamera nie ma osobnego podglądu i wyjścia wideo. The answer here oznacza, że ​​po jego zwróceniu null możesz użyć listy getSupportedPreviewSizes().

+1

Dzięki! ale niestety nie zostało to zaimplementowane aż do API 11 (Android 3) i jestem na API 8 (2.2). Zauważyłem, że tamtej nocy i zajęło mi pół godziny przekleństwa, aby dowiedzieć się, że to nie było w moim api. – jln646v

+0

OK Myślę, że to wymyśliłem. Wygląda na to, że działa poprawnie na telefonach, z którymi testowałem. – jln646v

+0

Próbowałem tego na Nexusie S z Androidem 4.0.3, i * zawsze * zwraca zero! –

5

OK Myślę, że to wymyśliłem. Wygląda na to, że działa poprawnie na telefonach, na których testowałem.

List<Size> tmpList = camera.getParameters().getSupportedPreviewSizes(); 

    final List<Size> sizeList = new Vector<Size>(); 

    //compair the apsect ratio of the candidate sizes against the real ratio 
    Double aspectRatio = (Double.valueOf(getWindowManager().getDefaultDisplay().getHeight())/getWindowManager().getDefaultDisplay().getWidth()); 
    for(int i=0; i<tmpList.size(); i++){ 
     Double tmpRatio = Double.valueOf(tmpList.get(i).height)/tmpList.get(i).width; 
     if(Math.abs(aspectRatio - tmpRatio) < .15){ 
      sizeList.add(tmpList.get(i)); 
     } 
    } 
+0

Działa to tylko w niektórych telefonach. Mój HTC Desire Z ulegnie awarii po ustawieniu wielu trybów wymienionych przez tę metodę. –

+0

@ jln646v, czy to rozwiązanie nadal działa? – Felix

+0

Wierzę, że jest to kod, którego wciąż używam. Na niektórych urządzeniach (wydaje się, że urządzenia Motorolla to robią) getSupportedPreviewSizes() wydaje się zwracać niektóre rozmiary, które nie będą działać, powodując uszkodzenie wideo zielonymi liniami i innymi. Jakie masz problemy? – jln646v

Powiązane problemy