1.å¦ä½å¨Androidä¸å®ç°FrameBufferåOverlayçblend
2.EBI主要任务
å¦ä½å¨Androidä¸å®ç°FrameBufferåOverlayçblend
1.SurfaceFlingeræ¯ä¸ä¸ªæå¡ï¼ä¸»è¦æ¯è´è´£åæåçªå£çSurfaceï¼ç¶åéè¿OpenGLESæ¾ç¤ºå°FrameBufferä¸ã
2.DisplayHardwareæ¯å¯¹æ¾ç¤ºè®¾å¤çæ½è±¡ï¼å æ¬FrameBufferåOverlayãå è½½FrameBufferåOverlayæ件ï¼å¹¶åå§åOpenGLES:
view plain
mNativeWindow = new FramebufferNativeWindow();
framebuffer_device_t const * fbDev = mNativeWindow->getDevice();
if (hw_get_module(OVERLAY_HARDWARE_MODULE_ID,驱s驱 &module) == 0) {
overlay_control_open(module, &mOverlayEngine);
}
surface = eglCreateWindowSurface(display, config, mNativeWindow.get(), NULL);
eglMakeCurrent(display, surface, surface, context);
3.FramebufferNativeWindow æ¯framebuffer çæ½è±¡ï¼å®è´è´£å è½½libgrallocï¼å¹¶æå¼framebuffer设å¤ãFramebufferNativeWindow并ä¸ç´æ¥ä½¿ç¨ framebufferï¼èæ¯èªå·±å建äºä¸¤ä¸ªBufferï¼
queueBufferè´è´£æ¾ç¤ºä¸ä¸ªBufferå°å±å¹ä¸ï¼å®è°ç¨fb->postå»æ¾ç¤ºã
dequeueBufferè·åä¸ä¸ªç©ºé²çBufferï¼ç¨æ¥å¨åå°ç»å¶ã
è¿ä¸¤ä¸ªå½æ°ç±eglSwapBuffersè°è¿æ¥ï¼è°å°
view plain
egl_window_surface_v2_t::swapBuffersï¼
nativeWindow->queueBuffer(nativeWindow, buffer);
nativeWindow->dequeueBuffer(nativeWindow, &buffer);
4.msm7k/liboverlayæ¯Overlayçå®ç°ï¼ä¸å ¶å®å¹³å°ä¸åçæ¯ï¼é«éå¹³å°ä¸çOverlay并ä¸æ¯æä¾ä¸ä¸ªframebuffer设å¤ï¼èéè¿fb0çioctlæ¥å®ç°çï¼ioctlå为两类æä½ï¼
OverlayControlChannelç¨äºè®¾ç½®åæ°ï¼æ¯å¦è®¾ç½®Overlayçä½ç½®ï¼å®½åº¦åé«åº¦ï¼
view plain
bool OverlayControlChannel::setPosition(int x, int y, uint_t w, uint_t h) {
ov.dst_rect.x = x;
ov.dst_rect.y = y;
ov.dst_rect.w = w;
ov.dst_rect.h = h;
ioctl(mFD, MSMFB_OVERLAY_SET, &ov);
}
OverlayDataChannelç¨äºæ¾ç¤ºOverlayï¼å ¶ä¸æéè¦çå½æ°å°±æ¯queueBuffer:
view plain
bool OverlayDataChannel::queueBuffer(uint_t offset) {
mOvData.data.offset = offset;
ioctl(mFD, MSMFB_OVERLAY_PLAY, odPtr))
}
5.msm7k/libgralloc æ¯æ¾ç¤ºç¼åçæ½è±¡ï¼å æ¬framebufferåæ®éSurfaceçBufferãframebufferåªæ¯/dev/graphic/fb0çå è£ ï¼SurfaceçBufferåæ¯å¯¹/dev/pmemãashmemåGPUå å(msm_hw3dm)çå è£ ï¼å®çç®æ 主è¦æ¯æ¹ä¾¿ç¡¬ä»¶å éï¼å 为 DMAä¼ è¾ä½¿ç¨ç©çå°åï¼è¦æ±å åå¨ç©çå°åä¸è¿ç»ã
6.msm7k/libcopybitè¿æ¯2Då éåºï¼ä¸»è¦è´è´£Surfaceçæ伸ãæ转ååæçæä½ãå®æ两ç§å®ç°æ¹å¼ï¼
copybit.cpp: åºäºfb0çioctl(MSMFB_BLIT)çå®ç°ã
copybit_c2d.cpp: åºäºkgslçå®ç°ï¼åªæ¯å¯¹libC2D2.soçå è£ ï¼libC2D2.soåºè¯¥æ¯ä¸å¼æºçã
7.pmem
misc/pmem.c: 对ç©çå åç管çï¼ç®æ³åç¨æ·ç©ºé´çæ¥å£ã
board-msm7x.cå®ä¹äºç©çå åç缺ç大å°ï¼
view plain
#define MSM_PMEM_MDP_SIZE 0x1B
#define MSM_PMEM_ADSP_SIZE 0xB
#define MSM_PMEM_AUDIO_SIZE 0x5B
#define MSM_FB_SIZE 0x
#define MSM_GPU_PHYS_SIZE SZ_2M
#define PMEM_KERNEL_EBI1_SIZE 0x1C
msm_msm7x2x_allocate_memory_regionsåé å 大åå åç¨äºç»pmemåäºæ¬¡åé ã
8.KGSL
Kernel Graphics System Layer (KGSL)ï¼3Då¾å½¢å é驱å¨ç¨åºï¼æºä»£ç drivers/gpu/msmç®å½ä¸ï¼å®æ¯å¯¹GPUçå è£ ï¼ç»OpenGLES 2.0æä¾æ½è±¡çæ¥å£ã
9.msm_hw3dm
è¿ä¸ªæå¨å æ ¸ä¸æ²¡ææ¾å°ç¸å ³ä»£ç ã
.msm_fb
msm_fb.c: framebuffer, overlayåblitçç¨æ·æ¥å£ã
mdp_dma.c: å¯¹å ·ä½æ¾ç¤ºè®¾å¤çå è£ ï¼æä¾ä¸¤ç§framebufferæ´æ°çæ¹å¼ï¼
mdp_refresh_screenï¼ å®æ¶æ´æ°ã
mdp_dma_pan_update: éè¿pan display主å¨æ´æ°ã
mdp_dma_lcdc.cï¼é对LCDå®ç°çæ¾ç¤ºè®¾å¤ï¼mdp_lcdc_updateç¨æ´æ°framebufferã
EBI主要任务
EBI的主要任务在于全面推动科学界的生物科学发展。首先,动源动它致力于建立和维护一个开放的驱s驱生物学数据库,这个平台提供免费的动源动有师傅最新版本源码数据和生物信息服务,为科学研究者提供了存储和探索生物学数据的驱s驱必要工具,从而加速了科技进步的动源动足球直播系统源码步伐。
其次,驱s驱EBI通过深入的动源动生物信息学基础研究,不断探索未知的驱s驱生物学领域,为理论突破和技术创新提供了强大的动源动驱动力。它不仅是驱s驱知识的储存库,更是动源动知识创新的源泉。
对于生物学研究的驱s驱via源码怎么编辑参与者,无论处于哪个专业层次,动源动EBI都提供全方位的驱s驱生物信息学培训,帮助他们提升技能,最新棋牌商业源码更好地理解和利用生物数据,提升科研效率。
此外,神马源码官网EBI还扮演着桥梁的角色,它支持将科研领域的尖端科技成果转化为实际应用,特别是引导这些技术进入工业界,以推动经济社会的可持续发展。
最后,EBI承担着协调欧洲生物数据资源的重要职责,确保数据的整合和流通,使得整个欧洲的生物研究能够共享资源,共同进步。