android多媒体框架开发,Android多媒体框架3月变化

【IT168 技术文档】Android的核心代码在3月底有一了一次比较重大的改动,尤其是多媒体方面的改动比较大,主要的目的是为了更好的实现Camcorder,以及进一步实现Video Telephony。这些改动也是软、硬件协调、结构和性能折中的一个结果。在此做出一些说明,希望中国的关心Android技术的网友进一步了解Android发展的历程。

1 ISurface接口的改动

ISurface是一个给下层的C++/C代码访问Surface的接口,在JAVA层看不到这一层的逻辑,在以前ISurface接口是比较简单的。

classISurface :publicIInterface

{public:

DECLARE_META_INTERFACE(Surface);

virtual status_t registerBuffers(intw,inth,inthstride,intvstride,

PixelFormat format,constsp&heap)=0;

virtualvoidpostBuffer(ssize_t offset)=0;//one-wayvirtualvoidunregisterBuffers()=0;

virtual spcreateOverlay(

uint32_t w, uint32_t h, int32_t format)=0;

};

其中createOverlay()其实表示的使用Overlay时候的接口,一般使用硬件的多个FrameBuffer来实现。这个接口类似一个“旁路”,直接绕过了SurfaceFlinger访问下层的显示硬件,和其他的接口没有什么关系。

主要的改动是registerBuffers()的改动,增加了一个ISurface ::BufferHeap类。

classBufferHeap {enum{/*rotate source image 90 degrees*/ROT_90=HAL_TRANSFORM_ROT_90,

};

BufferHeap(uint32_t w, uint32_t h,

int32_t hor_stride, int32_t ver_stride,

PixelFormat format,constsp&heap);

BufferHeap(uint32_t w, uint32_t h,

int32_t hor_stride, int32_t ver_stride,

PixelFormat format, uint32_t transform, uint32_t flags,constsp&heap);/*......*/};

registerBuffers()的改动在于使用了新的BufferHeap接口:

事实上,BufferHeap()的第一个构造函数与以前没有改动的接口从功能上是相同的。BufferHeap()的第二个构造函数增加了transform和flags两个参数,可以提供更灵活的操作方式,比如使用ROT_90来设置旋转。

从操作上,本改动在功能改动不大的情况下却着实涉及了不少的内容,从PVPlayer的显示输出的Surface MIO,SurfaceFlinger的一些实现,Camera服务中的实现。由于ISurface主要用于Playback的输出和Camera / Video Telephony的preview,走的是下层的数据流,因此这个改动不会影响JAVA上层的内容。

本次改动的来龙去脉是,以前的ISurface是不支持Overlay的接口,自从年前Overlay接口的确定后,为实现硬件的输出提供了方法。但是使用Overlay则不能使用SurfaceFlinger的2D处理功能,这次接口则增强了ISurface非Overlay接口的功能。比如让其具有了旋转的功能,这样在PVPlayer等输出显示的时候,就有一个方式可以控制显示的方向。

virtual status_t registerBuffers(constBufferHeap&buffers)=0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值