2011-01-11 14 views

Odpowiedz

9

to powinno działać:

adb pull /dev/graphics/fb0 fb0 
ffmpeg -vframes 1 -vcodec rawvideo -f rawvideo -pix_fmt rgb32 -s 320x480 -i fb0 -f image2 -vcodec png image.png 
+0

Gdzie to oszczędza? – XXX

+1

Sprawdziło się dla mnie, nie trzeba dodawać -vframes 1 –

+0

Otrzymuję to jako błąd: [image2 @ 0x2405c40] Nie można uzyskać nazwy pliku ramki numer 2 od wzorca 'image.png' (albo ustaw updatefirst lub użyj wzorca takiego jak % 03d we wzorcu nazw plików) av_interleaved_write_frame(): Niepoprawny argument – Santhanam

3

Jeśli masz przywileje administratora.

  1. skopiuj dane z fb0 do innego pliku, np.

    cat fb0 > tmp 
    
  2. W tym momencie nadal nie można otworzyć nowego pliku. , ponieważ struktura danych pliku nie może spełnić żadnego formatu pliku obrazu. Potrzebne jest więc zdekodowanie. W tym pliku co dwa bajty opisują piksel. wyższe 5 ugryzienia reprezentują czerwony kolor, dolne 5bitów przedstawia niebieski kolor, a reszta środkowe 6 ugryzień jest zielone. możesz użyć powyższych informacji, aby zbudować BMP i każdy inny widoczny plik.

+0

to jest to, czego oczekujemy od prawdziwego programisty :) – christian

4

Rozwiązanie Nebkata działa czasami, ale pracując nad narzędziem testowym Dollop, nauczyłem się, że nie ma uniwersalnego sposobu na tworzenie obrazu bezpośrednio z fb0. Motorola Droid 2 używa RGB 32. Huawei Ascend używa RGB 565. Samsung Captivate nie używa ani nie wydaje się umieszczać całego ekranu w buforze.

+0

Wszystko, co musisz zrobić, to zmienić rgb32 w cokolwiek używasz. – nebkat

+0

Tak, potrzeba zmiany kodowania i wymiarów będzie oczywiste dla większości czytelników, teraz, gdy zwróciłem uwagę, że nie wszystkie urządzenia mają to samo kodowanie. Podejście FFmpeg nie zadziała jednak w przypadku Captivate i innych podobnych. –

+0

Dzięki! Emulator Jellybean (Android 4.2) używał rgb565. – BVB

1

Użytkownik może chcieć wymienić -pix_fmt rgb32 na -pix_fmt rgb565le dla urządzeń 16-bitowych.

1

Jeśli nie jesteś pewien co do formatu Twojego bufora ramki urządzenie może iteracyjne ffmpeg obsługiwanych formatów następująco:

for fmt in $(ffmpeg -pix_fmts|cut -d " " -f 2); do ffmpeg -vcodec rawvideo -f rawvideo -pix_fmt $fmt -s 320x480 -i fb0 -f image2 -vcodec png /tmp/image-$fmt.png; done 

Miniatury rezultatu są również rodzajem artystycznej.

Powiązane problemy