기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

안녕하세요. 안드로이드를 공부한지 얼마 안됐지만 열심히 해보고싶은 학생입니다.


안드로이드에서 화면출력 하는부분을 바꿔보고 싶은데요. LCD화면에서 반을 나눠서 상하를 뒤집어서

출력해보고싶습니다.

1   ->   2

2          1


이런식으로요.

제가 이것을 하려는 이유는 안드로이드의 화면 출력을 픽셀단위로 컨트롤 해보고싶어서 입니다.


테스트하기위해서 오드로이드 U3 보드를 사서 안드로이드는 4.4 kitkt으로 surfaceflinger 부분을 보고 있습니다.

메모리에 픽셀 데이터들을 그릴 때 위치를 바꿔서 그릴 수 있는 부분을 찾아보고있습니다.


frameworks/native/service/surfaceflinger 디렉토리 밑의 소스들을 열심히 보는데

서피스들이 수정되면 layer들에서 clip 부분을 추출해 내고 layer들 layer->draw 로 다시 그리더라고요.

그래서 draw를 할 때 위치를 바꿔서 draw 하도록 보고있는데 딱히 손쓸 위치가 잘 안보여서 난감합니다.


postFramebuffer 함수에서도 합성된 서피스를 HWComposer로 보내는데 odroid는 exynos4 여서 samsung slsi의

libhwc 디렉토리의 소스들을 사용하는것을 확인했습니다. 프레임버퍼 디바이스에서 fb_post를 호출해서 커널의

디바이스 드라이버에 접근하는것 같던데 프레임버퍼에 데이터를 쓸때도 시작주소와 lengh 값만 지정해서 dma로 전송하게 해서

메모리의 데이터값들을 상하로 뒤바꾸게 하기가 애매하였습니다.


서론이 길었는데요........ 제가 드리고 싶은 질문은 화면의 상하를 뒤바꾸도록 소스를 수정하기위해 제가 하고있던 접근방법이

맞는지와 혹시 틀리다면 어디부분을 공부하고 접근해야 하는지에 대해 알려주셨으면 합니다.


아 그리고 surfaceflinger 공부하면서 이해가 안갔던 부분이 있었는데, surfaceflinger 초기화 후 displayHardware 를 초기화 하면서 gralloc으로 프레임버퍼 메모리를 할당 하던데 안드로이드 커널의 프레임버퍼 디바이스를 register_framebuufer 할 때 메모리를 잡아 놓는것으로 알 고 있는데 왜 안드로이드에서도 프레임버퍼 메모리를 잡는지 이해가 안갑니다..


제가 개념이 잘 잡히지 않은 상태가 좀 산만하게 글을 쓴 거 같습니다... 양해 바라면서 ..답변 부탁드립니다.



고도리

2015.04.15 11:02:13
*.151.13.202

간단하게 설명을 드리면....


4412와 같은 경우, 즉, 하드웨어 카메라/동영상 가속기를 쓰는 cpu들을 지원하기 위하여

안드로이드는 hwcomposer라는 것을 만들었습니다.


1. 일반 gui용 메모리

2. 동영상/카메라용 메모리


이렇게 구분을 해 놓습니다.


원하시는 것을 하려고 하면 메모리 내용을 바궈야 합니다

즉, 위에서 말씀드린 두가지에 대해서 다 손대야 합니다.


1. 일반 gui용 메모리는 메모리 포인터가 명확합니다.

이 경우 큰 문제없이 손대실 수가 있습니다.

ex. 실제 framebuffer에서 손을 대도 됩니다.


2. camera/media의 경우

이 부분은 실제 하드웨어에서 사용하는 color format을 먼저 알아야 하고,

해당 메모리는 ion과 같은 DMA 지원 풀을 쓰기 때문에, 실제 커널에서 사용하는 DMA메모리

를 가져다 볼 수 있는 코드를 짜야 합니다.


그래야만 메모리를 손댈 수 있습니다.


워낙 복잡한 부분이 많은 부분이라 간단하게만 설명드립니다.

ImYeol

2015.04.16 08:08:43
*.141.6.65

답변 감사합니다. T^T 

한달 전쯤에 리눅스가 올라가 있는 라즈베리파이의 프레임버퍼 메모리 데이터를 바꿔서

성공한 적이 있어서 안드로이드도 비슷하겠지 했는데.. 훨씬 복잡하네요..

제가 아직 잘 이해가 안가는데...일반 GUI 데이터 일때gralloc을 통해 프레임버퍼 사이즈만큼 할당한 메모리에서 실제 프레임버퍼로 데이터가 이동되는건가요?

List of Articles
번호 제목 글쓴이 날짜 조회 수sort
6188 C100 보드 질문입니다 file [1] 이원우 2010-05-26 472
6187 device file 관련 문의 [1] 서정구 2010-08-28 472
6186 v210 보드 카메라 모듈 공제 관련 문의요 [1] 윤병진 2010-11-09 472
6185 v210용 android froyo source배포 관련 문의 [1] joejung 2010-11-24 472
6184 c100 Android 포팅관련질문입니다. 천하제일검 2011-03-14 472
6183 imx51 FEC Driver 새희망 2011-05-03 472
6182 사운드 드라이버 관련 최준원 2009-04-29 473
6181 128MB nand flash 를 사용할경우 문제될게 있나요?? [1] 조장현 2010-01-19 473
6180 XFree86 4.8.0 compile error file 최영진 2010-01-25 473
6179 이솝용 커널2.6.29/rootfs/u-boot 소스를 어디서 받을 수 있나요?? [2] 김정희 2010-02-10 473
6178 오드로이드 플랫폼 개발자용 밖에 안파네요? 그런건가요? [1] 거지깽깽이 2010-03-06 473
6177 [Odroid] MediaPlayer 소스좀 구할 수 있나요?? [1] 이종범 2010-03-19 473
6176 Soc문의입니다. [1] 강용근 2010-04-14 473
6175 6410보드 LCD 출력 문의입니다..^^ [1] 우우 2010-04-15 473
6174 OPENCORE 빌드 질문입니다 [1] 김성훈 2010-10-05 473
6173 V210 보드에 app 실행시 문제... 문의. file [2] 은재아빠 2010-11-04 473
6172 mmc card driver [1] 만봉부인 2010-11-24 473
6171 Android boot message only outputting Last Line [1] 양파링 2011-03-08 473
6170 device driver에서 vendor에 대해 궁금합니다. [1] 혜정아빠 2011-05-05 473
6169 arm-linux-gnueabi 기반 OS(우분투)가 올라가는 임베디드가 있나요?? [6] biokk 2016-12-04 473

사용자 로그인