Monday, April 16, 2012

eglGetDisplay函数用法


eglGetDisplay():

Name

eglGetDisplay - return an EGL display connection
返回一个EGL显示连接。


C Specification

EGLDisplay eglGetDisplay(NativeDisplayType native_display)

Parameters

native_display
Specifies the display to connect to. EGL_DEFAULT_DISPLAY indicates the default display.
指定要连接的显示设备。EGL_DEFAULT_DISPLAY表示默认的显示设备。

Description

eglGetDisplay obtains the EGL display connection for the native display native_display.
为显示设备native_display取得一个EGL显示连接。


If display_id is EGL_DEFAULT_DISPLAY, a default display connection is returned.
display_idEGL_DEFAULT_DISPLAY,将返回一个默认的显示连接。


If no display connection matching native_display is available, EGL_NO_DISPLAY is returned. No error is generated.
若没有匹配native_display的显示连接可用,返回EGL_NO_DISPLAY。不会产生错误。


Use eglInitialize to initialize the display connection.
使用eglInitialize来初始化显示连接。


Copyright

Copyright © 2003 Silicon Graphics, Inc.
This document is licensed under the SGI Free Software B License. For details, seehttp://oss.sgi.com/projects/FreeB/.


See Also

eglInitialize

Tuesday, April 10, 2012

eglGetConfigAttrib函数用法



Name

eglGetConfigAttrib - return information about an EGL frame buffer configuration
返回一个EGL帧缓存配置的信息.


C Specification

EGLBoolean eglGetConfigAttrib(EGLDisplay display,
    EGLConfig config,
    EGLint attribute,
    EGLint * value)

Parameters

display
Specifies the EGL display connection.
指定EGL显示连接.
config
Specifies the EGL frame buffer configuration to be queried.
指定要查询的EGL帧缓存配置.
attribute
Specifies the EGL rendering context attribute to be returned.
指定要查询的EGL渲染上下文属性.
value
Returns the requested value.
返回查询得到的值.

Description

eglGetConfigAttrib returns in value the value of attribute for config. attribute can be one of the following:
函数返回配置config的属性attribute的值value.属性attribute的值可以是:


EGL_BUFFER_SIZE
Returns the depth of the color buffer. It is the sum of EGL_RED_SIZE, EGL_GREEN_SIZE,EGL_BLUE_SIZE, and EGL_ALPHA_SIZE.
返回颜色缓冲区的深度,其值是 EGL_RED_SIZE, EGL_GREEN_SIZE,EGL_BLUE_SIZE,  EGL_ALPHA_SIZE四个值的和.

EGL_RED_SIZE
Returns the number of bits of red stored in the color buffer.
返回颜色缓冲区中红色的位数.

EGL_GREEN_SIZE
Returns the number of bits of green stored in the color buffer.
返回颜色缓冲区中绿色的位数.

EGL_BLUE_SIZE
Returns the number of bits of blue stored in the color buffer.
返回颜色缓冲区中蓝色的位数.

EGL_ALPHA_SIZE
Returns the number of bits of alpha stored in the color buffer.
返回颜色缓冲区中alpha的位数.

EGL_CONFIG_CAVEAT
Returns the caveats for the frame buffer configuration. Possible caveat values are EGL_NONE,EGL_SLOW_CONFIG, and EGL_NON_CONFORMANT.
返回帧缓存配置的警告,可能的警告值为: EGL_NONE,EGL_SLOW_CONFIG,  EGL_NON_CONFORMANT

EGL_CONFIG_ID
Returns the ID of the frame buffer configuration.
返回帧缓存配置的ID.

EGL_DEPTH_SIZE
Returns the number of bits in the depth buffer.
返回深度缓存的位数.

EGL_LEVEL
Returns the frame buffer level. Level zero is the default frame buffer. Positive levels correspond to frame buffers that overlay the default buffer and negative levels correspond to frame buffers that underlay the default buffer.
返回帧缓存层次.层次0是默认的帧缓存.正数的层次对应默认缓存之上的帧缓存,负数的层次对应默认缓存之下的帧缓存.

EGL_MAX_PBUFFER_WIDTH
Returns the maximum width of a pixel buffer surface in pixels.
返回像素缓冲区的最大宽度,以像素为单位.

EGL_MAX_PBUFFER_HEIGHT
Returns the maximum height of a pixel buffer surface in pixels.
返回像素缓冲区的最大高度,以像素为单位.

EGL_MAX_PBUFFER_PIXELS
Returns the maximum size of a pixel buffer surface in pixels.
返回像素缓冲区surface的最大size,以像素为单位.

EGL_NATIVE_RENDERABLE
Returns EGL_TRUE if native rendering APIs can render into the surface, EGL_FALSE otherwise.
如果native的渲染API能够渲染到surface,则返回EGL_TRUE;否则返回EGL_FALSE.

EGL_NATIVE_VISUAL_ID
Returns the ID of the associated native visual.
返回关联的native visualID.

EGL_NATIVE_VISUAL_TYPE
Returns the type of the associated native visual.
返回关联的native visual的类型.

EGL_PRESERVED_RESOURCES
Returns EGL_TRUE if resources are preserved across power management events, EGL_FALSE otherwise.
如果在电源管理过程中,资源被保留,返回EGL_TRUE,否则返回EGL_FALSE.

EGL_SAMPLE_BUFFERS
Returns the number of multisample buffers.
返回多采样缓存的个数.

EGL_SAMPLES
Returns the number of samples per pixel.
返回每个像素的采样个数.

EGL_STENCIL_BITS
Returns the number of bits in the stencil buffer.
返回模板缓冲区的位数.

EGL_SURFACE_TYPE
Returns the types of supported EGL surfaces.
返回支持的EGL surface类型.

EGL_TRANSPARENT_TYPE
Returns the type of supported transparency. Possible transparency values are: EGL_NONE, andEGL_TRANSPARENT_RGB.
返回支持的透明类型.可能的值为EGL_NONEEGL_TRANSPARENT_RGB.

EGL_TRANSPARENT_RED
Returns the transparent red value.
返回透明的红色的值。

EGL_TRANSPARENT_GREEN
Returns the transparent green value.
返回透明的绿色的值。

EGL_TRANSPARENT_BLUE
Returns the transparent blue value.
返回透明的蓝色的值。

Errors

EGL_FALSE is returned on failure, EGL_TRUE otherwise. value is not modified when EGL_FALSE is returned.
如果失败则返回EGL_FALSE,否则返回EGL_TRUE。如果返回EGL_FALSE,那么值value将不会被改变。


EGL_BAD_DISPLAY is generated if display is not an EGL display connection.
如果display不是EGL显示连接,将生成EGL_BAD_DISPLAY错误.


EGL_NOT_INITIALIZED is generated if display has not been initialized.
如果显示display没有被初始化,将生成EGL_NOT_INITIALIZED错误。


EGL_BAD_CONFIG is generated if config is not an EGL frame buffer configuration.
如果配置config不是一个EGL帧缓存配置,生成EGL_BAD_CONFIG错误。


EGL_BAD_ATTRIBUTE is generated if attribute is not a valid frame buffer configuration attribute.
如果属性attribute不是合法的帧缓存配置属性,将会生成EGL_BAD_ATTRIBUTE错误。


Copyright

Copyright © 2003 Silicon Graphics, Inc.
This document is licensed under the SGI Free Software B License. For details, seehttp://oss.sgi.com/projects/FreeB/.

See Also

eglChooseConfig, eglGetConfigs

Friday, April 6, 2012

SurfaceTexture in Android



public class SurfaceTexture

Class Overview
Captures frames from an image stream as an OpenGL ES texture.
从一个图像流中捕获图像帧作为OpenGL ES纹理。

The image stream may come from either camera preview or video decode. A SurfaceTexture may be used in place of a SurfaceHolder when specifying the output destination of a Camera or MediaPlayer object. Doing so will cause all the frames from the image stream to be sent to the SurfaceTexture object rather than to the device's display. When updateTexImage() is called, the contents of the texture object specified when the SurfaceTexture was created are updated to contain the most recent image from the image stream. This may cause some frames of the stream to be skipped.
图像流可以来自照相机预览或视频解码。当指定CameraMediaPlayer对象的输出目标时,SurfaceTexture可以取代SurfaceHolder,这样将使得从图像流中得到的所有帧都输出到SurfaceTexture对象,而不是用于在设备上显示。当调用updateTexImage()时,用来创建SurfaceTexture的纹理对象内容被更新为包含图像流中最近的图片。这可能会使得流中的某些帧被跳过。

When sampling from the texture one should first transform the texture coordinates using the matrix queried via getTransformMatrix(float[]). The transform matrix may change each time updateTexImage() is called, so it should be re-queried each time the texture image is updated. This matrix transforms traditional 2D OpenGL ES texture coordinate column vectors of the form (s, t, 0, 1) where s and t are on the inclusive interval [0, 1] to the proper sampling location in the streamed texture. This transform compensates for any properties of the image stream source that cause it to appear different from a traditional OpenGL ES texture. For example, sampling from the bottom left corner of the image can be accomplished by transforming the column vector (0, 0, 0, 1) using the queried matrix, while sampling from the top right corner of the image can be done by transforming (1, 1, 0, 1).
当对纹理进行采样的时候,应该首先使用getTransformMatrix(float[])查询得到的矩阵来变换纹理坐标。每次调用updateTexImage()的时候,可能会导致变换矩阵发生变化,因此在纹理图像更新时需要重新查询。该矩阵将传统的2D OpenGL ES纹理坐标列向量(s,t,0,1),其中st[0,1],变换为纹理中对应的采样位置。该变换补偿了图像流中任何可能导致与传统OpenGL ES纹理有差异的属性。例如,从图像的左下角开始采样,可以通过使用查询得到的矩阵来变换列向量(0,0,0,1),而从右上角采样可以通过变换(1,1,0,1)来得到。

The texture object uses the GL_TEXTURE_EXTERNAL_OES texture target, which is defined by the GL_OES_EGL_image_external OpenGL ES extension. This limits how the texture may be used. Each time the texture is bound it must be bound to the GL_TEXTURE_EXTERNAL_OES target rather than the GL_TEXTURE_2D target. Additionally, any OpenGL ES 2.0 shader that samples from the texture must declare its use of this extension using, for example, an "#extension GL_OES_EGL_image_external : require" directive. Such shaders must also access the texture using the samplerExternalOES GLSL sampler type.
纹理对象使用GL_TEXTURE_EXTERNAL_OES作为纹理目标,其是OpenGL ES扩展GL_OES_EGL_image_external定义的。这种纹理目标会对纹理的使用方式造成一些限制。每次纹理绑定的时候,都要绑定到GL_TEXTURE_EXTERNAL_OES,而不是GL_TEXTURE_2D。而且,任何需要从纹理中采样的OpenGL ES 2.0 shader都需要声明其对此扩展的使用,例如,使用指令”#extension GL_OES_EGL_image_external:require”。这些shader也必须使用samplerExternalOES采样方式来访问纹理。

SurfaceTexture objects may be created on any thread. updateTexImage() may only be called on the thread with the OpenGL ES context that contains the texture object. The frame-available callback is called on an arbitrary thread, so unless special care is taken updateTexImage() should not be called directly from the callback.
SurfaceTexture对象可以在任何线程里创建。updateTexImage()只能在包含纹理对象的OpenGL ES上下文所在的线程里创建。可以得到帧信息的回调可以在任何线程被调用,因此在没有做必要的保护的情况下,updateTexImage()不应该直接从回调函数中调用。

Summary

Nested Classes
interface  SurfaceTexture.OnFrameAvailableListener     Callback interface for being notified that a new stream frame is available. 当新的帧流可用时通知该回调接口。
class         SurfaceTexture.OutOfResourcesException     Exception thrown when a surface couldn't be created or resized  当无法创建surface或调整surface尺寸时,抛出异常。

Public Constructors
SurfaceTexture(int texName)
Construct a new SurfaceTexture to stream images to a given OpenGL texture.
构造新的源自图像流的SurfaceTexture到给定的OpenGL纹理。

Public Methods
long getTimestamp()
Retrieve the timestamp associated with the texture image set by the most recent call to updateTexImage.
提取最近调用的updateTexImage()为纹理图像设置的时间戳。

void  getTransformMatrix(float[] mtx)
Retrieve the 4x4 texture coordinate transform matrix associated with the texture image set by the most recent call to updateTexImage.
提取最近调用的updateTexImage()为纹理图像设置的4×4的纹理坐标变换矩阵。

void  release()
release() frees all the buffers and puts the SurfaceTexture into the 'abandoned' state.
释放所有的缓冲区,将SurfaceTexture置为abandoned状态。

void  setDefaultBufferSize(int width, int height)
Set the default size of the image buffers.
设置默认的图像缓冲区大小。

void  setOnFrameAvailableListener(SurfaceTexture.OnFrameAvailableListener l)
Register a callback to be invoked when a new image frame becomes available to the SurfaceTexture.
注册一个回调函数,当新一帧图像对SurfaceTexture可用时调用。

void  updateTexImage()
Update the texture image to the most recent frame from the image stream.
更新纹理图像为从图像流中提取的最近一帧。

Protected Methods
void  finalize()
Invoked when the garbage collector has detected that this instance is no longer reachable.

[Expand]
Inherited Methods
 From class java.lang.Object
Public Constructors

public SurfaceTexture (int texName)

Since: API Level 11
Construct a new SurfaceTexture to stream images to a given OpenGL texture.
构造新的源自图像流的SurfaceTexture到给定的OpenGL纹理。

Parameters

texName the OpenGL texture object name (e.g. generated via glGenTextures)
texNameOpenGL纹理对象名字,如通过glGenTextures创建的。
Public Methods

public long getTimestamp ()

Since: API Level 14
Retrieve the timestamp associated with the texture image set by the most recent call to updateTexImage. This timestamp is in nanoseconds, and is normally monotonically increasing. The timestamp should be unaffected by time-of-day adjustments, and for a camera should be strictly monotonic but for a MediaPlayer may be reset when the position is set. The specific meaning and zero point of the timestamp depends on the source providing images to the SurfaceTexture. Unless otherwise specified by the image source, timestamps cannot generally be compared across SurfaceTexture instances, or across multiple program invocations. It is mostly useful for determining time offsets between subsequent frames.
提取最近调用的updateTexImage()为纹理图像设置的时间戳。该时间戳以纳秒为单位,通常是单调递增的。该时间戳不应受日立时间影响,对camera应该是严格单调的,但是对MediaPlayer来说,设置播放位置时可能会重置。时间戳的特殊含义以及零点位置取决于为SurfaceTexture提供图像的源。除非图像源有特殊说明,时间戳不应该在不同的SurfaceTexture实例之间,或多个程序调用之间进行比较。它主要应该用于在后续帧之间决定时间间隔。

public void getTransformMatrix (float[] mtx)

Since: API Level 11
Retrieve the 4x4 texture coordinate transform matrix associated with the texture image set by the most recent call to updateTexImage. This transform matrix maps 2D homogeneous texture coordinates of the form (s, t, 0, 1) with s and t in the inclusive range [0, 1] to the texture coordinate that should be used to sample that location from the texture. Sampling the texture outside of the range of this transform is undefined. The matrix is stored in column-major order so that it may be passed directly to OpenGL ES via the glLoadMatrixf or glUniformMatrix4fv functions.
提取最近调用的updateTexImage()为纹理图像设置的4×4的纹理坐标变换矩阵。该变换矩阵将2D的其次纹理坐标(s,t,0,1)st[0,1]变换为对应的用于从纹理中采样的纹理坐标。在本变换的范围之外对纹理进行采样时未定义的行为。矩阵列主序存储,可以通过glLoadMatrixf()glUniformMatrix4fv()函数直接传递给OpenGL ES

Parameters

mtx  the array into which the 4x4 matrix will be stored. The array must have exactly 16 elements.
mtx用于存储4×4矩阵。该矩阵必须是16个元素。

public void release ()
Since: API Level 14
release() frees all the buffers and puts the SurfaceTexture into the 'abandoned' state. Once put in this state the SurfaceTexture can never leave it. When in the 'abandoned' state, all methods of the ISurfaceTexture interface will fail with the NO_INIT error. Note that while calling this method causes all the buffers to be freed from the perspective of the the SurfaceTexture, if there are additional references on the buffers (e.g. if a buffer is referenced by a client or by OpenGL ES as a texture) then those buffer will remain allocated. Always call this method when you are done with SurfaceTexture. Failing to do so may delay resource deallocation for a significant amount of time.
释放所有的缓冲区,将SurfaceTexture置为abandoned状态。一旦进入此状态,SurfaceTexture将不会离开此状态。一旦进入abandoned状态,ISurfaceTexture接口的所有方法都将返回NO_INIT错误。注意:调用此方法时,从SurfaceTexture的角度看,所有的缓冲区都被释放,如果仍然有其他的到缓冲区的引用(如,一缓冲区被客户端引用,或者被OpenGL ES作为纹理引用),那么该缓冲区将仍存在。当使用完SurfaceTexture之后,一定要调用此方法,否则将会导致资源重新分配被延误很长时间。

public void setDefaultBufferSize (int width, int height)

Since: API Level 15
Set the default size of the image buffers. The image producer may override the buffer size, in which case the producer-set buffer size will be used, not the default size set by this method. Both video and camera based image producers do override the size. This method may be used to set the image size when producing images with Canvas (via lockCanvas(Rect)), or OpenGL ES (via an EGLSurface). The new default buffer size will take effect the next time the image producer requests a buffer to fill. For Canvas this will be the next time lockCanvas(Rect) is called. For OpenGL ES, the EGLSurface should be destroyed (via eglDestroySurface), made not-current (via eglMakeCurrent), and then recreated (via eglCreateWindowSurface) to ensure that the new default size has taken effect. The width and height parameters must be no greater than the minimum of GL_MAX_VIEWPORT_DIMS and GL_MAX_TEXTURE_SIZE (see glGetIntegerv). An error due to invalid dimensions might not be reported until updateTexImage() is called.
设置默认的图像缓冲区大小。图像提供者可能会重写缓冲区大小,这时,将使用新的缓冲区大小,而不是默认大小。基于视频和camera的图像生产者都会重写缓冲区大小。该方法可以用于设置使用Canvas(通过lockCanvas(Rect))来产生图像,或通过OpenGL ES(通过EGLSurface)来产生图像时图像的大小。新的默认缓冲区大小将会在下一次图像生产者请求填充一块缓冲区时生效。对Canvas来说,是下一次调用lockCanvas(Rect);对OpenGL ESEGLSurface应该被销毁(通过eglDestroySurface),变成非当前的(通过eglMakeCurrent),然后在重新创建(通过eglCreateWindowSurface),以保证新的默认大小生效。widthheight参数值应该不大于GL_MAX_VIEWPORT_DIMSGL_MAX_TEXTURE_SIZE(参见glGetIntegerv)。不合理的尺寸所引起的错误在updateTexImage()被调用之前不会被报告。

public void setOnFrameAvailableListener (SurfaceTexture.OnFrameAvailableListener l)

Since: API Level 11
Register a callback to be invoked when a new image frame becomes available to the SurfaceTexture. Note that this callback may be called on an arbitrary thread, so it is not safe to call updateTexImage() without first binding the OpenGL ES context to the thread invoking the callback.
注册一个回调函数,当新一帧图像对SurfaceTexture可用时调用。注意:该回调可能在任何线程被调用,因此在事先不绑定OpenGL ES上下文到调用该回调的线程就调用updateTexImage()是不安全的。

public void updateTexImage ()

Since: API Level 11
Update the texture image to the most recent frame from the image stream. This may only be called while the OpenGL ES context that owns the texture is bound to the thread. It will implicitly bind its texture to the GL_TEXTURE_EXTERNAL_OES texture target.
更新纹理图像为从图像流中提取的最近一帧。只有在拥有该纹理的OpenGL ES上下文被绑定到线程之后调用。隐式绑定该纹理到GL_TEXTURE_EXTERNAL_OES纹理目标。
Protected Methods

protected void finalize ()

Since: API Level 11
Invoked when the garbage collector has detected that this instance is no longer reachable. The default implementation does nothing, but this method can be overridden to free resources.

Note that objects that override finalize are significantly more expensive than objects that don't. Finalizers may be run a long time after the object is no longer reachable, depending on memory pressure, so it's a bad idea to rely on them for cleanup. Note also that finalizers are run on a single VM-wide finalizer thread, so doing blocking work in a finalizer is a bad idea. A finalizer is usually only necessary for a class that has a native peer and needs to call a native method to destroy that peer. Even then, it's better to provide an explicit close method (and implement Closeable), and insist that callers manually dispose of instances. This works well for something like files, but less well for something like a BigInteger where typical calling code would have to deal with lots of temporaries. Unfortunately, code that creates lots of temporaries is the worst kind of code from the point of view of the single finalizer thread.

If you must use finalizers, consider at least providing your own ReferenceQueue and having your own thread process that queue.

Unlike constructors, finalizers are not automatically chained. You are responsible for calling super.finalize() yourself.

Uncaught exceptions thrown by finalizers are ignored and do not terminate the finalizer thread. See Effective Java Item 7, "Avoid finalizers" for more.

Throws

Throwable        

Wednesday, March 21, 2012

昨天去听了“it龙门阵 - 模式识别在移动互联网上的应用”讲座

活动邀请了盛大创新院单霆和腾讯研究院陈波,由于时间关系,只听到了后半部分腾讯的演讲,演讲主要内容总结:
战略:开放平台,平台之上创新,共同盈利。
模式:扬长避短,最大化利用终端和云端的能力。
问题:依赖网络,数据隐私。
已有服务:手写识别,语音识别,人脸识别,文字识别,条形码识别。
价值:提供技术服务和支持,改善产品体验;增加产品亮点-SDK和云服务两种模式可共存
创新应用:
1. 语音登录,人脸认证;
2. 听歌搜歌,音乐分类;
3. 互动娱乐;
4. 增强现实。

一点小思考:
1. 用户和数据是基础,应用和平台是依托。
这个道理其实大家都懂,如果没有用户,互联网就会失去意义;如果没有数据,应用也就不会有价值;如果没有平台,应用便无处安放。整个链条,任何一个环节出了问题,整个生态系统就无法建立。

2. 以创新推动产品,以产品推广创新:产品设计应着眼于技术的长处做扩展。
很多产品中的创新最开始都不是为了这个产品而进行的创新活动,比如陀螺仪,是典型的军用转民用的例子。为什么不为了产品而创新呢?风险。步子大了会扯到蛋啊,具体事例就不用举了吧-望天,乔教主我很仰慕你的。但是如果一项新技术已经成型,就可以去推动产品为用户提供更好的体验,而在此过程中,创新也依托产品进行了推广。但是,任何一项新技术都不可能是十全十美的,这个时候就需要扬长避短,尽量去发掘利用技术的长处,设计产品的时候尽量利用这些长处,并且主动规避短处可能会带来的风险。

3. 最大化利用终端和云端能力:终端 – sensors输入 + 交互;云端运算 + 存储 + 交互);
终端和云端靠着网络连接在一起,网络这一层目前我们能做的还不多,用户在有wifi 的地方自然会主动使用wifi,在只有3g的地方自然会使用3g,或者我们默默的帮他们做这 些决定也是没有问题的。
于是重点就在两个端点上了。终端,可以是pc,可以是手机,可以是pad,kindle等等等等,其能力多种多样,但是和云端比起来,其更适合做一些轻量级的工作,比如sensors的输入,摄像头抓取的图像或者视频啊,gps获取的地理位置信息啊,麦克风录制的声音啊,人们随手在屏幕上画的画啊编写的文档啊等等这些;再比如交互,用户简单的编辑啊,上传啊,下载啊,分享啊,删除啊,根据各种信息打电话发短信啊等等等等。当然,终端也可以进行一定量的计算,权衡利弊,尽在您手。
而云端呢,最重要的自然是运算能力和存储能力,我们可以把一些原始数据或者中间数据传过来,在云上计算之后直接把结果回传给端,由端来做显示;而存储呢,很多应用可能需要大量的数据,比如模式识别中所需要的众多样本库啊,这个一般都很庞大,而且一般只有计算的时候才会需要,当然,用户请求需要回传的时候也不是没有。再比如音乐啊电影啊,用户的终端只能播放720p的电影,你给他传个1080p的没有意义,回头端上解码缩放计算量也不小,不如直接给他个720p的。
至于云端的交互,不能说没有。比如应用需要做同步啊什么的,这应该算交互。

4. 需要考虑:
网络依赖如何处理离线:这就需要权衡一下,端的计算能力和存储能力日益增强,如何利用这些以达到一定程度的离线使用也是需要考虑的问题。
数据隐私用户自己控制是否可分享?这只是其中一种方式,但是总觉得不够彻底。
终端耗电如何优化:智能机一天一充带几块电池都很司空见惯,移动电源也越来越发达,但是不能因此就对此不做理会。移动用户的零碎时间是最宝贵的资源,但是如果用户发现我等一班公交用了下应用和云做了点交互手机就没电了,我想很多人再度打开这个应用的概率都会变小的吧。
流程分割数据采集和简单交互、计算在终端,样本数据和复杂运算、交互在云端:这个就是流程设计的问题,结合应用需求再根据终端的能力进行自适应分割。
数据使用 – 变现……这是一个永久的话题。

杂七杂八:
现在摄像头是一个很宝贵的资源,pinterest等应用的成功很是说明了这一点。利用摄像头可以做的事情很多,手势识别,人脸定位,目标跟踪,动作跟踪,还有文字识别,拍照翻译啊,字幕啊,名片啊,条形码啊等等,绝大多数信息都可以通过拍照或者视频捕获,而你如何提取这些信息,使用这些信息则成为难点。

以ics上应用为例,比如人脸解锁,虽然其发布会现场搞砸了,但是我们都能理解,那光线条件太差了嘛;比如gtalk中的趣味聊天,想要大眼睛,没问题!想要尖鼻头,没问题…识别出了五官,加持各种变换就可以了。这就是扬技术之长避技术之短的典型案例。

再说说AR,不管是概念还是炒作,你不得不承认这确实是趋势。世界本来就是虚虚实实,真真假假的。Layar及其相关应用是一个例子,以wallit为例,用户拍张照片,我们利用位置信息,图片中的建筑物信息来确定地点,并把该处的留言墙呈现给用户。用户可以留言,可以传照片,可以与朋友互动等等。我们自己来管理这些墙,这样信息就可控了,并且有良好的可扩展性。至于盈利模式,据称其希望与商家达成合作,比如星巴克,你想有面墙么?拿钱来。成效么,我们可以拭目以待。

好吧,维持俺一贯的作风,手指敲累了就停笔。

Thursday, March 15, 2012

New Start

自从M$关闭其live space之后,我着实伤心了一段时间。之前的资料也没有备份,虽然读者只有不知何时才会想起来去翻一翻的我自己,不过还是觉得少了点什么似的。

游游荡荡了这么久,终归还是想找个地方,想念叨念叨的时候就能念叨念叨,不管是生活上的还是技术上的,现实中的还是理想国里的,开心的还是伤心的…总之,我就把这里当作我的涂鸦本好了。
恩,暂时先这么多吧。我会努力的,各方面。