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

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


안드로이드에서 화면출력 하는부분을 바꿔보고 싶은데요. 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
번호 제목 글쓴이 날짜 조회 수
6188 Exynos4412에서 16 KHz Sound 파일이 빠르게 재생되는 문제 [13] 이동희 2015-05-20 493
6187 리눅스 디버깅 메세지 [1] 하하호호하하 2015-05-14 240
6186 휴대폰을 임베디드보드처럼 사용가능한가요? [1] pedor11 2015-05-09 479
6185 qt가 directFB를 사용하도록 했습니다. [2] 김아무개 2015-05-08 312
6184 i2c에러 [3] 머슴과마님 2015-04-28 1173
6183 kernel booting 오류 문의. [3] 마빡 2015-04-20 880
6182 S3C6410에서 NAND Flash K9K8G08U0D에서 K9K8G08U0E 변경시 [1] 이동희 2015-04-15 494
6181 kernel booting 오류 문의 드립니다. [9] 마빡 2015-04-15 416
» 안드로이드 surfaceflinger 질문입니다. [2] ImYeol 2015-04-14 410
6179 [android] SystemProperties.set() 적용 되지 않는 문제점 [2] rion110 2015-04-08 345
6178 android native system service 실행 file [2] rion110 2015-04-06 286
6177 안드로이드 USB 카메라와 버튼입력 동시에 받는 문제 [2] 아라라라기 2015-04-03 513
6176 S5PV210 에서 Overlay Layer적용 [1] jameskody 2015-04-03 233
6175 s5pv310에 emmc version적용 [4] 수위타자 2015-03-26 412
6174 realtek rt5633 codec을 포팅하려고합니다 질문좀요 [3] 문철민 2015-03-21 1077
6173 Wi-Fi Power Save Mode 관련 질문 [2] blue0sky 2015-03-19 368
6172 네비바 삭제 질문드립니다. 하하호호하하 2015-03-17 233
6171 DDR2 OCD 설정하는 방법 좀 조언 부탁드립니다. file 션한물 2015-03-16 261
6170 USB2Serial와 /dev/ttyUXB관련 문의드립니다. [1] 어떤이의꿈 2015-03-12 240
6169 Exynos4412를 watchdong timer를 이용해서 reset을 했습니다. [3] 혜민아빠 2015-03-06 307

사용자 로그인