Enviar pesquisa
Carregar
Surface flingerservice(서피스플링거서비스초기화 ics)
•
1 gostou
•
1,729 visualizações
F
fefe7270
Seguir
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 12
Recomendados
Surface flingerservice(그래픽 공유 버퍼 생성 및 등록)
Surface flingerservice(그래픽 공유 버퍼 생성 및 등록)
fefe7270
Surface flingerservice(서피스 플링거 연결)
Surface flingerservice(서피스 플링거 연결)
fefe7270
Surface flingerservice(서피스 플링거 연결 ics)
Surface flingerservice(서피스 플링거 연결 ics)
fefe7270
Surface flingerservice(서피스 상태 변경 및 출력 요청)
Surface flingerservice(서피스 상태 변경 및 출력 요청)
fefe7270
Surface flingerservice(서피스 플링거 연결 jb)
Surface flingerservice(서피스 플링거 연결 jb)
fefe7270
Surface flingerservice(서피스플링거서비스초기화 jb)
Surface flingerservice(서피스플링거서비스초기화 jb)
fefe7270
Surface flingerservice(서피스 상태 변경 jb)
Surface flingerservice(서피스 상태 변경 jb)
fefe7270
Surface flingerservice(서피스 출력 요청 jb)
Surface flingerservice(서피스 출력 요청 jb)
fefe7270
Recomendados
Surface flingerservice(그래픽 공유 버퍼 생성 및 등록)
Surface flingerservice(그래픽 공유 버퍼 생성 및 등록)
fefe7270
Surface flingerservice(서피스 플링거 연결)
Surface flingerservice(서피스 플링거 연결)
fefe7270
Surface flingerservice(서피스 플링거 연결 ics)
Surface flingerservice(서피스 플링거 연결 ics)
fefe7270
Surface flingerservice(서피스 상태 변경 및 출력 요청)
Surface flingerservice(서피스 상태 변경 및 출력 요청)
fefe7270
Surface flingerservice(서피스 플링거 연결 jb)
Surface flingerservice(서피스 플링거 연결 jb)
fefe7270
Surface flingerservice(서피스플링거서비스초기화 jb)
Surface flingerservice(서피스플링거서비스초기화 jb)
fefe7270
Surface flingerservice(서피스 상태 변경 jb)
Surface flingerservice(서피스 상태 변경 jb)
fefe7270
Surface flingerservice(서피스 출력 요청 jb)
Surface flingerservice(서피스 출력 요청 jb)
fefe7270
JavaScript 로 서버사이드 개발을 가능하게 하는 Node.JS 의 모듈을 관리하는 NPM, 그리고 서버 어플리케이션을 개발하는데 도움을 주는 Express.JS 를 살펴봅니다.
Startup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JS
Circulus
JavaScript 과정의 5번쨰 시간으로, 객체에 대해 알아보고 실습해 봅니다. 이번시간에 배워볼 객체는 다음과 같습니다. - Date - RegExp - Object - Global
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Circulus
모델링 연습한 내용 리뷰 자료입니다.
모델링 연습 리뷰
모델링 연습 리뷰
beom kyun choi
NDC2015 C++11 고급 기능 - Crow에 사용된 기법 중심으로 발표 자료 이전 발표에서 Middleware 구현 부분이 일부 수정되었습니다.
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
Jaeseung Ha
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?
NAVER D2
2014년 JCO 컨퍼런스 14회, 객체 지향 발들이기 세션 발표 자료.
객체 지향 발담그기 JCO 컨퍼런스 14회
객체 지향 발담그기 JCO 컨퍼런스 14회
beom kyun choi
http://github.com/ipkn/crow Crow 프로젝트에서 사용한 C++11 기법들을 실제 구현에 대한 설명을 포함하여 자세히 설명한 발표자료입니다. C++11 features used in Crow video: http://youtu.be/MixS9c3mE6U https://vimeo.com/119627253
20150212 c++11 features used in crow
20150212 c++11 features used in crow
Jaeseung Ha
DAPP Programming
Blockchain 4th dapp programming
Blockchain 4th dapp programming
ihpark92
KGC 2012 강연. Boost 라이브러리 중 Asio를 사용한 네트웍 프로그래밍 및 비동기 프로그래밍 소개
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
흥배 최
이더리움 연구회 정기 발표회, 세션5 - web3.js와 Node.js 를 사용한 dApp 개발
세션5. web3.js와 Node.js 를 사용한 dApp 개발
세션5. web3.js와 Node.js 를 사용한 dApp 개발
Jay JH Park
안드로이드 스터디 Jni 발표 자료 Rev05 송형주
안드로이드 스터디 Jni 발표 자료 Rev05 송형주
iamhjoo (송형주)
Smart Contract Programming
Blockchain 3rd smart contract programming
Blockchain 3rd smart contract programming
ihpark92
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
상현 조
Javascript 교육자료 pdf
Javascript 교육자료 pdf
Javascript 교육자료 pdf
Hyosang Hong
windows7에서 텐서플로우 및 텐서보드 처리 하기
Jupyter notebok tensorboard 실행하기_20160706
Jupyter notebok tensorboard 실행하기_20160706
Yong Joon Moon
CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
상현 조
[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11
흥배 최
GCGC- CGCII 서버 엔진에 적용된 기술 (4) 효율적인 다중 쓰레드 처리를 위한 Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
상현 조
Clean code appendix 1
Clean code appendix 1
HyeonSeok Choi
이 자료는 이영록강사님이 2011년 iOS 개발자 포럼에서 발표한 내용을 약간 개선하고 정리한 자료입니다. iOS의 메모리관리 기법은 retain count라고 하는 독특하면서도 효율적인 방법을 사용하며 최근에 발표된 Xcode에서는 Automatic Reference Counting(ARC) 기법을 통해 release를 사용하에 객체를 소거하는 불편함을 많이 개선하였습니다. 본 자료에서는 이러한 점에 대한 비교적 상세한 설명을 담고 있습니다.
iOS 메모리관리
iOS 메모리관리
Changwon National University
Surface flingerservice(서피스플링거서비스초기화)
Surface flingerservice(서피스플링거서비스초기화)
fefe7270
Android audio system(audiopolicy_manager)
Android audio system(audiopolicy_manager)
fefe7270
Mais conteúdo relacionado
Mais procurados
JavaScript 로 서버사이드 개발을 가능하게 하는 Node.JS 의 모듈을 관리하는 NPM, 그리고 서버 어플리케이션을 개발하는데 도움을 주는 Express.JS 를 살펴봅니다.
Startup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JS
Circulus
JavaScript 과정의 5번쨰 시간으로, 객체에 대해 알아보고 실습해 봅니다. 이번시간에 배워볼 객체는 다음과 같습니다. - Date - RegExp - Object - Global
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Circulus
모델링 연습한 내용 리뷰 자료입니다.
모델링 연습 리뷰
모델링 연습 리뷰
beom kyun choi
NDC2015 C++11 고급 기능 - Crow에 사용된 기법 중심으로 발표 자료 이전 발표에서 Middleware 구현 부분이 일부 수정되었습니다.
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
Jaeseung Ha
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?
NAVER D2
2014년 JCO 컨퍼런스 14회, 객체 지향 발들이기 세션 발표 자료.
객체 지향 발담그기 JCO 컨퍼런스 14회
객체 지향 발담그기 JCO 컨퍼런스 14회
beom kyun choi
http://github.com/ipkn/crow Crow 프로젝트에서 사용한 C++11 기법들을 실제 구현에 대한 설명을 포함하여 자세히 설명한 발표자료입니다. C++11 features used in Crow video: http://youtu.be/MixS9c3mE6U https://vimeo.com/119627253
20150212 c++11 features used in crow
20150212 c++11 features used in crow
Jaeseung Ha
DAPP Programming
Blockchain 4th dapp programming
Blockchain 4th dapp programming
ihpark92
KGC 2012 강연. Boost 라이브러리 중 Asio를 사용한 네트웍 프로그래밍 및 비동기 프로그래밍 소개
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
흥배 최
이더리움 연구회 정기 발표회, 세션5 - web3.js와 Node.js 를 사용한 dApp 개발
세션5. web3.js와 Node.js 를 사용한 dApp 개발
세션5. web3.js와 Node.js 를 사용한 dApp 개발
Jay JH Park
안드로이드 스터디 Jni 발표 자료 Rev05 송형주
안드로이드 스터디 Jni 발표 자료 Rev05 송형주
iamhjoo (송형주)
Smart Contract Programming
Blockchain 3rd smart contract programming
Blockchain 3rd smart contract programming
ihpark92
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
상현 조
Javascript 교육자료 pdf
Javascript 교육자료 pdf
Javascript 교육자료 pdf
Hyosang Hong
windows7에서 텐서플로우 및 텐서보드 처리 하기
Jupyter notebok tensorboard 실행하기_20160706
Jupyter notebok tensorboard 실행하기_20160706
Yong Joon Moon
CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
상현 조
[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11
흥배 최
GCGC- CGCII 서버 엔진에 적용된 기술 (4) 효율적인 다중 쓰레드 처리를 위한 Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
상현 조
Clean code appendix 1
Clean code appendix 1
HyeonSeok Choi
이 자료는 이영록강사님이 2011년 iOS 개발자 포럼에서 발표한 내용을 약간 개선하고 정리한 자료입니다. iOS의 메모리관리 기법은 retain count라고 하는 독특하면서도 효율적인 방법을 사용하며 최근에 발표된 Xcode에서는 Automatic Reference Counting(ARC) 기법을 통해 release를 사용하에 객체를 소거하는 불편함을 많이 개선하였습니다. 본 자료에서는 이러한 점에 대한 비교적 상세한 설명을 담고 있습니다.
iOS 메모리관리
iOS 메모리관리
Changwon National University
Mais procurados
(20)
Startup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JS
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
모델링 연습 리뷰
모델링 연습 리뷰
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?
객체 지향 발담그기 JCO 컨퍼런스 14회
객체 지향 발담그기 JCO 컨퍼런스 14회
20150212 c++11 features used in crow
20150212 c++11 features used in crow
Blockchain 4th dapp programming
Blockchain 4th dapp programming
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
세션5. web3.js와 Node.js 를 사용한 dApp 개발
세션5. web3.js와 Node.js 를 사용한 dApp 개발
안드로이드 스터디 Jni 발표 자료 Rev05 송형주
안드로이드 스터디 Jni 발표 자료 Rev05 송형주
Blockchain 3rd smart contract programming
Blockchain 3rd smart contract programming
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
Javascript 교육자료 pdf
Javascript 교육자료 pdf
Jupyter notebok tensorboard 실행하기_20160706
Jupyter notebok tensorboard 실행하기_20160706
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
GCGC- CGCII 서버 엔진에 적용된 기술 (4) - Executing System
Clean code appendix 1
Clean code appendix 1
iOS 메모리관리
iOS 메모리관리
Destaque
Surface flingerservice(서피스플링거서비스초기화)
Surface flingerservice(서피스플링거서비스초기화)
fefe7270
Android audio system(audiopolicy_manager)
Android audio system(audiopolicy_manager)
fefe7270
Android audio system(오디오 출력-트랙생성)
Android audio system(오디오 출력-트랙생성)
fefe7270
Android audio system(audioplicy_service)
Android audio system(audioplicy_service)
fefe7270
SurfaceFlinger is a vital system service in Android system, responsible for the composting all the application and system layer and displaying them. In this slide,we looked in detail how surfaceFlinger was designed from Design Pattern's perspective.
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
Bin Chen
"Android's Multimedia Framework" presentation
Android's Multimedia Framework
Android's Multimedia Framework
Opersys inc.
Android audio system(audioflinger)
Android audio system(audioflinger)
fefe7270
Android audio system(audio_hardwareinterace)
Android audio system(audio_hardwareinterace)
fefe7270
Destaque
(8)
Surface flingerservice(서피스플링거서비스초기화)
Surface flingerservice(서피스플링거서비스초기화)
Android audio system(audiopolicy_manager)
Android audio system(audiopolicy_manager)
Android audio system(오디오 출력-트랙생성)
Android audio system(오디오 출력-트랙생성)
Android audio system(audioplicy_service)
Android audio system(audioplicy_service)
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
Android's Multimedia Framework
Android's Multimedia Framework
Android audio system(audioflinger)
Android audio system(audioflinger)
Android audio system(audio_hardwareinterace)
Android audio system(audio_hardwareinterace)
Semelhante a Surface flingerservice(서피스플링거서비스초기화 ics)
Samsung Open Source Conference 2015. Linux Kernel Boot process link: http://www.soscon.net/index.asp
Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
Mario Cho
android NDK JNI
Android ndk jni 설치및 연동
Android ndk jni 설치및 연동
Sangon Lee
Windows VIA C/C++ 4장
04 프로세스
04 프로세스
ssuser3fb17c
mango100(s5pc100) http://cafe.naver.com/embeddedcrazyboys
망고100 보드로 놀아보자 14
망고100 보드로 놀아보자 14
종인 전
The content of Linux for seminar
Linux 강의자료 ed10
Linux 강의자료 ed10
hungrok
Effective c++(chapter 5,6)
Effective c++(chapter 5,6)
문익 장
리눅스 시스템에서 태스크 관리를 어떻게 수행하는 지를 정리하였습니다. '리눅스 커널 내부구조' 를 참고하여 작성하였습니다.
리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리
Seungyong Lee
수원 안드로이드 스터디 안드로이드 구조와 원리 세미나 자료
안드로이드 플랫폼 설명
안드로이드 플랫폼 설명
Peter YoungSik Yun
Java Virtual Machine의 내부 구조, method call stack, java byte code를 읽기 위해 opcode 이해를 다룬다.
Java Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte Code
Javajigi Jaesung
7가지 동시성 모델 데이터 병렬성 아꿈사 발표 자료
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성
HyeonSeok Choi
Jdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamic
knight1128
KGC2008 강연
C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발
흥배 최
[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp
진현 조
KGC 2012 에서 발표한 내용입니다. 질문이 있으시면 메일이나 트윗 주세요.
Html5+js with game engine cocos2d-html5 분석 @KGC2012
Html5+js with game engine cocos2d-html5 분석 @KGC2012
Chanho Song
NDC 2017 발표 슬라이드 시연 영상 링크: https://youtu.be/e9Tv3jkmqKk 게임 내 정보를 추가 구현이나 패치 없이 실시간으로 수집할 수 있다면 어떨까요? 이런 아이디어를 실제로 가능하게 구현한 NEXON ZERO 발표 슬라이드 입니다.
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
Jaeseung Ha
C#, C#기초, 문법익히기
Ai C#세미나
Ai C#세미나
Astin Choi
node.js 관련 기초 세미나 자료.
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs
기동 이
c#
Manage book project
Manage book project
Ann Byung Hyun
**** 도서관 프로그램 완성 ㅋ(서버(관리자), 클라이언트) 2015/7/22 ~ 2015/8/6 (약 2주) 개발자 : 안병현, 한골드 @한정수 사용한 언어 : 개발자 - JAVA JDK 1.8(Swing, Socket) : 한정수 - C#(WPF) : 안병현 - C/C++(Socket, DLL-Socket) : 안병현, 한정수 * 기능 관리자 (도서 추가/도서 검색/신청 도서 구입/고객 추가/고객 찾기/가입 허가/지출 및 수입 확인) 클라이언트 (도서 검색/대여/반납/도서 신청/회원 가입/로그인) * Linux(Server) - Cent OS Release 6.1 - Mysql(5.1.73, RDB) - GCC version-4.4.7 *VM으로 돌리지 않음. * 구성 1. JAVA(Swing, Socket) 자바 Swing에 Socket으로 서버소켓과 연결하여 입력된 명령(Command)에 따라 서버에서 해당하는 데이터를 송수신함. 2. C# C# 소스에서는 주로 UI를 만들기 위한 소스를 만들었고, 소켓 통신을 C에 의존하였음. 이른 바인딩으로 C/C++로 만든 DLL을 참조하였고, 마찬가지로 입력된 명령에 따라 서버에서 해당하는 데이터를 송수신함. 3. C(리눅스 서버측) -1 JAVA 자바와 통신하는 소스는 do~while 구문으로 하나의 명령에 하나의 소켓으로 일대일 방식으로 구성 * 구분자 '/' -2 C# C#과 통신하는 소스는 while 구문으로 해당 클라이언트에 하나의 쓰레드를 할당하였고, 전체 클라이언트 소켓관리는 int형 배열을 만들어 관리함. * 구분자 ',' * 권장 사양 - JDK 설치 - .NET Framework 설치 - Windows 지원하는 OS * 생각해니까 굉장히 쓸모 없는 도서관 프로그램임 * 포트 포워딩을 하지않아서 그런지 다른 네트워크 망에서는 리눅스 서버에 접근하지 못함(방화벽을 허물어도 안됨 ㅅㅂ..) + C/C++로 DLL 어셈블리 만드는게 처음이라서 개짜증났음. 게다가 C가 CLS에 맞지 않아서 자료형 맞추려다 보니 미치는줄 + Server socket 예제가 채팅만 줠라게 많아서 미치는줄
Manage book project
Manage book project
Ann Byung Hyun
webgl 소모임 1기 1첫째시간
Bs webgl소모임001 uniform버전
Bs webgl소모임001 uniform버전
Seonki Paik
Semelhante a Surface flingerservice(서피스플링거서비스초기화 ics)
(20)
Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
Android ndk jni 설치및 연동
Android ndk jni 설치및 연동
04 프로세스
04 프로세스
망고100 보드로 놀아보자 14
망고100 보드로 놀아보자 14
Linux 강의자료 ed10
Linux 강의자료 ed10
Effective c++(chapter 5,6)
Effective c++(chapter 5,6)
리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리
안드로이드 플랫폼 설명
안드로이드 플랫폼 설명
Java Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte Code
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성
Jdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamic
C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발
[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp
Html5+js with game engine cocos2d-html5 분석 @KGC2012
Html5+js with game engine cocos2d-html5 분석 @KGC2012
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
Ai C#세미나
Ai C#세미나
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Manage book project
Manage book project
Manage book project
Manage book project
Bs webgl소모임001 uniform버전
Bs webgl소모임001 uniform버전
Mais de fefe7270
Stagefright recorder part1
Stagefright recorder part1
fefe7270
Camera camcorder framework overview(ginger bread)
Camera camcorder framework overview(ginger bread)
fefe7270
C++정리 스마트포인터
C++정리 스마트포인터
fefe7270
Android audio system(pcm데이터출력준비-서비스서버)
Android audio system(pcm데이터출력준비-서비스서버)
fefe7270
Android audio system(pcm데이터출력요청-서비스클라이언트)
Android audio system(pcm데이터출력요청-서비스클라이언트)
fefe7270
Android audio system(오디오 출력-트랙활성화)
Android audio system(오디오 출력-트랙활성화)
fefe7270
Android audio system(오디오 플링거 서비스 초기화)
Android audio system(오디오 플링거 서비스 초기화)
fefe7270
Mais de fefe7270
(7)
Stagefright recorder part1
Stagefright recorder part1
Camera camcorder framework overview(ginger bread)
Camera camcorder framework overview(ginger bread)
C++정리 스마트포인터
C++정리 스마트포인터
Android audio system(pcm데이터출력준비-서비스서버)
Android audio system(pcm데이터출력준비-서비스서버)
Android audio system(pcm데이터출력요청-서비스클라이언트)
Android audio system(pcm데이터출력요청-서비스클라이언트)
Android audio system(오디오 출력-트랙활성화)
Android audio system(오디오 출력-트랙활성화)
Android audio system(오디오 플링거 서비스 초기화)
Android audio system(오디오 플링거 서비스 초기화)
Surface flingerservice(서피스플링거서비스초기화 ics)
1.
SurfaceFlingerService (서피스플링거서비스초기화_ICS)
박철희 1
2.
1.Surfaceflinger 전체 구조
SurfaceFlinger ANativeWindow *EGL Graphic Hwcomposer FramebufferNativeWindow Client buffer EGLSurface layer1 OpenGL ES NativeBuffer API Front buffer layer2 NativeBuffer layer3 back buffer Android mapping kernel Overlay Module FrameBuffer Front buffer Lcd Pannel back buffer *EGL:Embedded Graphic Library 2
3.
2.SurfaceFlinger 클래스의 인스턴스
생성 Systemserver.java public class SystemServer { public static void main(String[] args) { System.loadLibrary("android_servers"); init1(args); } native public static void init1(String[] args); } Com_android_server_systemserser.cpp static JNINativeMethod gMethods[] = { /* name, signature, funcPtr */ { "init1", "([Ljava/lang/String;)V", (void*) android_server_SystemServer_init1 }, }; static void android_server_SystemServer_init1(JNIEnv* env, jobject clazz) { system_init(); } System_init.cpp extern "C" status_t system_init() { SurfaceFlinger::instantiate(); SensorService::instantiate(); jclass clazz = env->FindClass("com/android/server/SystemServer"); jmethodID methodId = env->GetStaticMethodID(clazz, "init2", "()V"); env->CallStaticVoidMethod(clazz, methodId); } 3
4.
2.SurfaceFlinger 클래스의 인스턴스
생성 Pthread_create 2 3 Thread Run() _threadLoop() Refbase 4 1회호출 5 반복호출 1 SurfaceFlinger onFirstRef() ReadyToRun() ThreadLoop() RefBase.cpp void RefBase::incStrong(const void* id) const{ const_cast<RefBase*>(this)->onFirstRef(); } SurfaceFlinger..cpp void SurfaceFlinger::onFirstRef() { run("SurfaceFlinger", PRIORITY_URGENT_DISPLAY); 1 // Wait for the main thread to be done with its initialization mReadyToRunBarrier.wait(); ReadyToRun 함수에서 mReadyToRunBarrier.open()가 불릴때 까지 기다린다. } 4
5.
2.SurfaceFlinger 클래스의 인스턴스
생성 Threads.cpp status_t Thread::run(const char* name, int32_t priority, size_t stack){ res = androidCreateRawThreadEtc (_threadLoop,this, name, priority, stack, &mThread); } 2 int androidCreateRawThreadEtc(){ int result = pthread_create(&thread, &attr, (android_pthread_entry)entryFunction, userData); } 3 int Thread::_threadLoop(void* user) { do { bool result; if (first) { first = false; self->mStatus = self->readyToRun(); 4 } else{ result = self->threadLoop(); 5 } } } 5
6.
2.SurfaceFlinger 클래스의 인스턴스
생성-readyToRun() SurfacefFlinger.cpp status_t SurfaceFlinger::readyToRun() ( 1.메인 디스 플레이 초기화 // initialize the main display GraphicPlane& plane(graphicPlane(dpy)); DisplayHardware* const hw = new DisplayHardware(this, dpy); plane.setDisplayHardware(hw); 2. 디스 플레이 공유 메모리 생성 // create the shared control-block mServerHeap = new MemoryHeapBase(4096, MemoryHeapBase::READ_ONLY, "SurfaceFlinger read-only heap"); mServerCblk = static_cast<surface_flinger_cblk_t*>(mServerHeap->getBase()); new(mServerCblk) surface_flinger_cblk_t; 3. initialize the shared control block mServerCblk->connected |= 1<<dpy; display_cblk_t* dcblk = mServerCblk->displays + dpy; memset(dcblk, 0, sizeof(display_cblk_t)); 4.open GL ES 초기화 // Initialize OpenGL|ES glPixelStorei(GL_UNPACK_ALIGNMENT, 4); glPixelStorei(GL_PACK_ALIGNMENT, 4); glEnableClientState(GL_VERTEX_ARRAY); 5.onfirstref()에서 기다리고 있는 thread에 signal 보냄. mReadyToRunBarrier.open(); 6.부트 애니메이션 시작 // start boot animation property_set("ctl.start", "bootanim"); /system/bin/bootanimation 프로세스 실행. } 6
7.
3.메인 디스플레이 초기화
1.GraphicPlane& plane(graphicPlane(dpy)); 디스플레이의 정보를 가지는 graphicplane calss type의 변수를 만들고(plane), 그 변수는 mGraphicPlanes[[0]을 가리킨다. GraphicPlane& plane(graphicPlane(dpy)); //dpy=0; GraphicPlane& SurfaceFlinger::graphicPlane(int dpy) { return const_cast<GraphicPlane&>(const_cast<SurfaceFlinger const *>(this)->graphicPlane(dpy)); } const GraphicPlane& SurfaceFlinger::graphicPlane(int dpy) const { const GraphicPlane& plane(mGraphicPlanes[dpy]); return plane; } 2. DisplayHardware* const hw = new DisplayHardware(this, dpy); DisplayHardware를 생성하고, EGL Main surface 생성, hwcomposer 생성 한다. DisplayHardware::DisplayHardware(..): DisplayHardwareBase(flinger, dpy),mFlinger(flinger), mFlags(0), mHwc(0) { init(dpy); } void DisplayHardware::init(uint32_t dpy) { 1. framebuffer에 buffer(front,back)를 할당하고, 그와 mapping되는 nativebuffer type의 buffer 생성 함. mNativeWindow = new FramebufferNativeWindow(); 7
8.
3.메인 디스플레이 초기화 FramebufferNativeWindow::FramebufferNativeWindow() {
if (hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module) == 0) { gralloc.msm8960.so 를 load해서 err = framebuffer_open(module, &fbDev); framebuffer device를 open하고 framebuffer에 접근할 수 있는 변수를 fbDev에 저장한다. Hardware/libhardware/include/hardware/fb.h static inline int framebuffer_open(const struct hw_module_t* module, struct framebuffer_device_t** device) { return module->methods->open(module, GRALLOC_HARDWARE_FB0, (struct hw_device_t**)device); } "fb0" err = gralloc_open(module, &grDev); 그래픽 버퍼 할당 device를 open하고 ,device에 접근 할 수 있는 변수를 grDev에 저장한다. Hardware/libhardware/include/hardware/gralloc.h static inline int gralloc_open(const struct hw_module_t* module, struct alloc_device_t** device) { return module->methods->open(module, GRALLOC_HARDWARE_GPU0, (struct hw_device_t**)device); } “gpu0” for (i = 0; i < mNumBuffers; i++) { buffers[i] = new NativeBuffer( fbDev->width, fbDev->height, fbDev->format, GRALLOC_USAGE_HW_FB); } framebuffer를 가리키는 Nativebuffer 구조체를 생성한다. Nativebuffer의 그래픽 버퍼가 프레임 버퍼에 매핑되어 있다는 의미 8
9.
3.메인 디스플레이 초기화 for
(i = 0; i < mNumBuffers; i++) 프레임 버퍼에 메모리를 할당한다는 의미 { err = grDev->alloc(grDev, fbDev->width, fbDev->height, fbDev->format, GRALLOC_USAGE_HW_FB, &buffers[i]->handle, &buffers[i]->stride); } Nativebuffer 와 mapping된 framebuffer에 메모리를 할당한다. (buffer의 handle이 할당된 메모리를 가리키게 된다(&buffers[i]->handle)) ANativeWindow::setSwapInterval = setSwapInterval; int FramebufferNativeWindow::lockBuffer(..){ ANativeWindow::dequeueBuffer = dequeueBuffer; framebuffer_device_t* fb = self->fbDev; ANativeWindow::lockBuffer = lockBuffer; fb-> lockBuffer(fb, index); ANativeWindow::queueBuffer = queueBuffer; } … ANativeWindow method와 framebuffer method를 mapping한다. (ANativeWindow Type의 surface에서 lockbuffer를 호출하면, FramebufferNativeWindow 의 lockbuffer가 호출된다.) } 3. plane.setDisplayHardware(hw); 생성한 displayHardware의 정보들을 GraphicPlane class에 설정해 준다.(withd,height,orientation) void GraphicPlane::setDisplayHardware(DisplayHardware *hw) { mHw = hw; const float w = hw->getWidth(); const float h = hw->getHeight(); GraphicPlane::orientationToTransfrom(displayOrientation, w, h,&mDisplayTransform); } 9
10.
3.메인 디스플레이 초기화
2.EGL Surface type의 main surface를 생성 한다. surface = eglCreateWindowSurface(display, config, mNativeWindow.get(), NULL); 3.HW Compser를 초기화 한다. mHwc = new HWComposer(mFlinger); hwc_module_t HAL_MODULE_INFO_SYM = { if (mHwc->initCheck() == NO_ERROR) { common: { mHwc->setFrameBuffer(mDisplay, mSurface); tag: HARDWARE_MODULE_TAG, EGL Surfae를 hwcomposer의 buffer로 설정 함. version_major: 1, } version_minor: 0, } id: HWC_HARDWARE_MODULE_ID, name: "Sample hwcomposer module", HWComposer::HWComposer(const sp<SurfaceFlinger>& flinger) author: "The Android Open Source Project", : mFlinger(flinger), methods: &hwc_module_methods, mModule(0), mHwc(0), mList(0), mCapacity(0), } mNumOVLayers(0), mNumFBLayers(0), }; mDpy(EGL_NO_DISPLAY), mSur(EGL_NO_SURFACE) { int err = hw_get_module(HWC_HARDWARE_MODULE_ID, &mModule); if (err == 0) { err = hwc_open(mModule, &mHwc); if (err == 0) { static inline int hwc_open(const struct hw_module_t* module, if (mHwc->registerProcs) { hwc_composer_device_t** device) mCBContext.hwc = this; { mCBContext.procs.invalidate = &hook_invalidate; return module->methods->open(module, mHwc->registerProcs(mHwc, &mCBContext.procs); HWC_HARDWARE_COMPOSER, } (struct hw_device_t**)device); } } } } static struct hw_module_methods_t hwc_module_methods = { open: hwc_device_open }; 10
11.
3.메인 디스플레이 초기화 static
int hwc_device_open(const struct hw_module_t* module, const char* name,struct hw_device_t** device) { dev->mOverlayLibObject = new overlay::Overlay(); overlay 생성 dev->previousOverlayHandle = NULL; dev->hwcOverlayStatus = HWC_OVERLAY_CLOSED; dev->device.common.tag = HARDWARE_DEVICE_TAG; dev->device.common.version = 0; dev->device.common.module = const_cast<hw_module_t*>(module); dev->device.common.close = hwc_device_close; dev->device.prepare = hwc_prepare; dev->device.set = hwc_set; dev->device.registerProcs = hwc_registerProcs; dev->device.enableHDMIOutput = hwc_enableHDMIOutput; *device = &dev->device.common; } hwc_module_t hwc_device_t hw_module_t hw_device_t module id HWC_HARDWARE_MODULE_ close hwc_device_close ID methods hwc_module_methods 생성 prepare hwc_prepare set hwc_set registerProcs hwc_registerProcs hwc_module_methods mOverlayLibObject new overlay open hwc_device_open 11
12.
4.디스플레이 공유 메모리
생성 및 초기화 1. mServerHeap = new MemoryHeapBase(4096, MemoryHeapBase::READ_ONLY, "SurfaceFlinger read-only heap"); 디스플레이의 정보를 공유할 디스플레이 공유 메모리 생성 2. mServerCblk = static_cast<surface_flinger_cblk_t*>(mServerHeap->getBase()); 생성된 공유 메모리의 시작점을 얻어 옴. 3. new(mServerCblk) surface_flinger_cblk_t; 시작점에 surface_flinger_cblk_t를 생성하고, mServerCblk 멤버 변수가 가리킴. 4. mServerCblk->connected |= 1<<dpy; connected 변수에 연결된 display의 식별번호를 저장(1개인 경우 0x00000001, 두개인 경우 0x00000011) 5. display_cblk_t* dcblk = mServerCblk->displays + dpy; memset(dcblk, 0, sizeof(display_cblk_t)); dcblk->w = plane.getWidth(); dcblk->h = plane.getHeight(); dcblk->format = f; dcblk->orientation = ISurfaceComposer::eOrientationDefault; display_cblk_t 를 생성하고 displayhardware 구조체 value로 초기화 함. 디스플레이 공유 메모리 surface_flinger_cblk_t surfaceflinger connected mServerCblk Dislay_cblk_t dcblk w,h:프레임 버퍼 너비,높이 Density,fps Format,orientation Xdpi,ydpi 12