搜索
首页 电脑/网络 程序设计

android源码里有哪些比较好的算法或框架推荐?

android源码里有哪些比较好的算法或框架推荐?

全部回答

匿名用户

2013-08-22

83 0
    Android中对于图形界面以及多媒体的相关操作比较容易实现。而且对于大多数手机用户来说,他们主要也就是根据这些方面的功能来对系统那个进行修改。我们可以通过本文介绍的Android多媒体框架的源码解读,来具体分析一下这方面的基本知识。
     Android多媒体框架的代码在以下目录中:external/opencore/。  这个目录是Android多媒体框架的根目录,其中包含的子目录如下所示:   * android:这里面是一个上层的库,它基于PVPlayer和PVAuthor的SDK实现了一个为Android使用的Player和Author。
     * baselibs:包含数据结构和线程安全等内容的底层库   * codecs_v2:这是一个内容较多的库,主要包含编解码的实现,以及一个OpenMAX的实现   * engines:包含PVPlayer和PVAuthor引擎的实现   * extern_libs_v2:包含了khronos的OpenMAX的头文件   * fileformats:文件格式的据具体解析(parser)类   * nodes:编解码和文件解析的各个node类。
       * oscl:操作系统兼容库   * pvmi: 输入输出控制的抽象接口   * protocols:主要是与网络相关的RTSP、RTP、HTTP等协议的相关内容   * pvcommon:pvcommon库文件的Android。
  mk文件,没有源文件。   * pvplayer:pvplayer库文件的Android。  mk文件,没有源文件。   * pvauthor:pvauthor库文件的Android。
  mk文件,没有源文件。   * tools_v2:编译工具以及一些可注册的模块。   Splitter的定义与初始化   以wav的splitter为例,在fileformats目录下有解析wav文件格式的pvwavfileparser。
    cpp文件,在nodes目录下有pvmf_wavffparser_factory。cpp,pvmf_wavffparser_node。h, pvmf_wavffparser_port。
  h等文件。   我们由底往上看,vwavfileparser。cpp中的PV_Wav_Parser类有InitWavParser(),GetPCMData(),RetrieveFileInfo()等解析wav格式的成员函数,此类应该就是最终的解析类。
    我们搜索PV_Wav_Parser类被用到的地方可知,在PVMFWAVFFParserNode类中有PV_Wav_Parser的一个指针成员变量。   再搜索可知,PVMFWAVFFParserNode类是通过PVMFWAVFFParserNodeFactory的CreatePVMFWAVFFParserNode()成员函数生成的。
    而CreatePVMFWAVFFParserNode()函数是在PVPlayerNodeRegistry::PVPlayerNodeRegistry()类构造函数中通过PVPlayerNodeInfo类被注册到Oscl_Vector 的vector中,在这个构造函数中,AMR,mp3等node也是同样被注册的。
       由上可知,Android多媒体框架中对splitter的管理也是与ffmpeg等类似,都是在框架的初始化时注册的,只不过Opencore注册的是每个splitter的factory函数。
     综述一下splitter的定义与初始化过程:   每个splitter都在fileformats目录下有个对应的子目录,其下有各自的解析类。     每个splitter都在nodes目录下有关对应的子目录,其下有各自的统一接口的node类和node factory类。
     播放引擎PVPlayerEngine类中有PVPlayerNodeRegistry iPlayerNodeRegistry成员变量。     在PVPlayerNodeRegistry的构造函数中,将 AMR, AAC, MP3等splitter的输入与输出类型标示和node factory类中的create node与release delete接口通过PVPlayerNodeInfo类push到Oscl_Vector iType成员变量中。
       当前Splitter的匹配过程   PVMFStatus PVPlayerNodeRegistry::QueryRegistry(PVMFFormatType& aInputType, PVMFFormatType& aOutputType, Oscl_Vector& aUuids)函数的功能是根据输入类型和输出类型,在已注册的node vector中寻找是否有匹配的node,有的话传回其唯一识别标识PVUuid。
       从QueryRegistry这个函数至底向上搜索可得到,在android中splitter的匹配过程如下:   android_media_MediaPlayer。
  cpp之中定义了一个JNINativeMethod(JAVA本地调用方法)类型的数组gMethods,供java代码中调用MultiPlayer类的setDataSource成员函数时找到对应的c++函数   1。
    {"setDataSource", "(Ljava/lang/String;)V", (void *)   android_media_MediaPlayer_setDataSource},   2。
  static void android_media_MediaPlayer_setDataSource   (JNIEnv *env, jobject thiz, jstring path)   此函数中先得到当前的MediaPlayer实例,然后调用其setDataSource函数,传入路径   3。
    status_t MediaPlayer::setDataSource(const char *url)   此函数通过调getMediaPlayerService()先得到当前的MediaPlayerService, const sp& service(getMediaPlayerService());   然后新建一个IMediaPlayer变量, sp player(service->create(getpid(), this, fd, offset, length));   在sp MediaPlayerService::create(pid_t pid, const sp& client, const char* url)中   调status_t MediaPlayerService::Client::setDataSource(const char *url)函数,Client是MediaPlayerService的一个内部类。
       在MediaPlayerService::Client::setDataSource中,调sp MediaPlayerService::Client::createPlayer(player_type playerType)   生成一个继承自MediaPlayerBase的PVPlayer实例。
       以上就是对Android多媒体框架的源代码的解读。

2013-08-22

53 0
你可以去csdn或者博客园网站上找找看,那边有很多开源的代码的。

2013-08-22

84 0
    Android中对于图形界面以及多媒体的相关操作比较容易实现。而且对于大多数手机用户来说,他们主要也就是根据这些方面的功能来对系统那个进行修改。我们可以通过本文介绍的Android多媒体框架的源码解读,来具体分析一下这方面的基本知识。
     Android多媒体框架的代码在以下目录中:external/opencore/。  这个目录是Android多媒体框架的根目录,其中包含的子目录如下所示:   * android:这里面是一个上层的库,它基于PVPlayer和PVAuthor的SDK实现了一个为Android使用的Player和Author。
     * baselibs:包含数据结构和线程安全等内容的底层库   * codecs_v2:这是一个内容较多的库,主要包含编解码的实现,以及一个OpenMAX的实现   * engines:包含PVPlayer和PVAuthor引擎的实现   * extern_libs_v2:包含了khronos的OpenMAX的头文件   * fileformats:文件格式的据具体解析(parser)类   * nodes:编解码和文件解析的各个node类。
       * oscl:操作系统兼容库   * pvmi: 输入输出控制的抽象接口   * protocols:主要是与网络相关的RTSP、RTP、HTTP等协议的相关内容   * pvcommon:pvcommon库文件的Android。
  mk文件,没有源文件。   * pvplayer:pvplayer库文件的Android。  mk文件,没有源文件。   * pvauthor:pvauthor库文件的Android。
  mk文件,没有源文件。   * tools_v2:编译工具以及一些可注册的模块。   Splitter的定义与初始化   以wav的splitter为例,在fileformats目录下有解析wav文件格式的pvwavfileparser。
    cpp文件,在nodes目录下有pvmf_wavffparser_factory。cpp,pvmf_wavffparser_node。h, pvmf_wavffparser_port。
  h等文件。   我们由底往上看,vwavfileparser。cpp中的PV_Wav_Parser类有InitWavParser(),GetPCMData(),RetrieveFileInfo()等解析wav格式的成员函数,此类应该就是最终的解析类。
    我们搜索PV_Wav_Parser类被用到的地方可知,在PVMFWAVFFParserNode类中有PV_Wav_Parser的一个指针成员变量。   再搜索可知,PVMFWAVFFParserNode类是通过PVMFWAVFFParserNodeFactory的CreatePVMFWAVFFParserNode()成员函数生成的。
    而CreatePVMFWAVFFParserNode()函数是在PVPlayerNodeRegistry::PVPlayerNodeRegistry()类构造函数中通过PVPlayerNodeInfo类被注册到Oscl_Vector 的vector中,在这个构造函数中,AMR,mp3等node也是同样被注册的。
       由上可知,Android多媒体框架中对splitter的管理也是与ffmpeg等类似,都是在框架的初始化时注册的,只不过Opencore注册的是每个splitter的factory函数。
     综述一下splitter的定义与初始化过程:   每个splitter都在fileformats目录下有个对应的子目录,其下有各自的解析类。     每个splitter都在nodes目录下有关对应的子目录,其下有各自的统一接口的node类和node factory类。
     播放引擎PVPlayerEngine类中有PVPlayerNodeRegistry iPlayerNodeRegistry成员变量。     在PVPlayerNodeRegistry的构造函数中,将 AMR, AAC, MP3等splitter的输入与输出类型标示和node factory类中的create node与release delete接口通过PVPlayerNodeInfo类push到Oscl_Vector iType成员变量中。
       当前Splitter的匹配过程   PVMFStatus PVPlayerNodeRegistry::QueryRegistry(PVMFFormatType& aInputType, PVMFFormatType& aOutputType, Oscl_Vector& aUuids)函数的功能是根据输入类型和输出类型,在已注册的node vector中寻找是否有匹配的node,有的话传回其唯一识别标识PVUuid。
       从QueryRegistry这个函数至底向上搜索可得到,在android中splitter的匹配过程如下:   android_media_MediaPlayer。
  cpp之中定义了一个JNINativeMethod(JAVA本地调用方法)类型的数组gMethods,供java代码中调用MultiPlayer类的setDataSource成员函数时找到对应的c++函数   1。
    {"setDataSource", "(Ljava/lang/String;)V", (void *)   android_media_MediaPlayer_setDataSource},   2。
  static void android_media_MediaPlayer_setDataSource   (JNIEnv *env, jobject thiz, jstring path)   此函数中先得到当前的MediaPlayer实例,然后调用其setDataSource函数,传入路径   3。
    status_t MediaPlayer::setDataSource(const char *url)   此函数通过调getMediaPlayerService()先得到当前的MediaPlayerService, const sp& service(getMediaPlayerService());   然后新建一个IMediaPlayer变量, sp player(service->create(getpid(), this, fd, offset, length));   在sp MediaPlayerService::create(pid_t pid, const sp& client, const char* url)中   调status_t MediaPlayerService::Client::setDataSource(const char *url)函数,Client是MediaPlayerService的一个内部类。
       在MediaPlayerService::Client::setDataSource中,调sp MediaPlayerService::Client::createPlayer(player_type playerType)   生成一个继承自MediaPlayerBase的PVPlayer实例。
       以上就是对Android多媒体框架的源代码的解读。

2013-08-22

83 0
    Android中对于图形界面以及多媒体的相关操作比较容易实现。而且对于大多数手机用户来说,他们主要也就是根据这些方面的功能来对系统那个进行修改。我们可以通过本文介绍的Android多媒体框架的源码解读,来具体分析一下这方面的基本知识。
     Android多媒体框架的代码在以下目录中:external/opencore/。  这个目录是Android多媒体框架的根目录,其中包含的子目录如下所示:   * android:这里面是一个上层的库,它基于PVPlayer和PVAuthor的SDK实现了一个为Android使用的Player和Author。
     * baselibs:包含数据结构和线程安全等内容的底层库   * codecs_v2:这是一个内容较多的库,主要包含编解码的实现,以及一个OpenMAX的实现   * engines:包含PVPlayer和PVAuthor引擎的实现   * extern_libs_v2:包含了khronos的OpenMAX的头文件   * fileformats:文件格式的据具体解析(parser)类   * nodes:编解码和文件解析的各个node类。
       * oscl:操作系统兼容库   * pvmi: 输入输出控制的抽象接口   * protocols:主要是与网络相关的RTSP、RTP、HTTP等协议的相关内容   * pvcommon:pvcommon库文件的Android。
  mk文件,没有源文件。   * pvplayer:pvplayer库文件的Android。  mk文件,没有源文件。   * pvauthor:pvauthor库文件的Android。
  mk文件,没有源文件。   * tools_v2:编译工具以及一些可注册的模块。   Splitter的定义与初始化   以wav的splitter为例,在fileformats目录下有解析wav文件格式的pvwavfileparser。
    cpp文件,在nodes目录下有pvmf_wavffparser_factory。cpp,pvmf_wavffparser_node。h, pvmf_wavffparser_port。
  h等文件。   我们由底往上看,vwavfileparser。cpp中的PV_Wav_Parser类有InitWavParser(),GetPCMData(),RetrieveFileInfo()等解析wav格式的成员函数,此类应该就是最终的解析类。
    我们搜索PV_Wav_Parser类被用到的地方可知,在PVMFWAVFFParserNode类中有PV_Wav_Parser的一个指针成员变量。   再搜索可知,PVMFWAVFFParserNode类是通过PVMFWAVFFParserNodeFactory的CreatePVMFWAVFFParserNode()成员函数生成的。
    而CreatePVMFWAVFFParserNode()函数是在PVPlayerNodeRegistry::PVPlayerNodeRegistry()类构造函数中通过PVPlayerNodeInfo类被注册到Oscl_Vector 的vector中,在这个构造函数中,AMR,mp3等node也是同样被注册的。
       由上可知,Android多媒体框架中对splitter的管理也是与ffmpeg等类似,都是在框架的初始化时注册的,只不过Opencore注册的是每个splitter的factory函数。
     综述一下splitter的定义与初始化过程:   每个splitter都在fileformats目录下有个对应的子目录,其下有各自的解析类。     每个splitter都在nodes目录下有关对应的子目录,其下有各自的统一接口的node类和node factory类。
     播放引擎PVPlayerEngine类中有PVPlayerNodeRegistry iPlayerNodeRegistry成员变量。     在PVPlayerNodeRegistry的构造函数中,将 AMR, AAC, MP3等splitter的输入与输出类型标示和node factory类中的create node与release delete接口通过PVPlayerNodeInfo类push到Oscl_Vector iType成员变量中。
       当前Splitter的匹配过程   PVMFStatus PVPlayerNodeRegistry::QueryRegistry(PVMFFormatType& aInputType, PVMFFormatType& aOutputType, Oscl_Vector& aUuids)函数的功能是根据输入类型和输出类型,在已注册的node vector中寻找是否有匹配的node,有的话传回其唯一识别标识PVUuid。
       从QueryRegistry这个函数至底向上搜索可得到,在android中splitter的匹配过程如下:   android_media_MediaPlayer。
  cpp之中定义了一个JNINativeMethod(JAVA本地调用方法)类型的数组gMethods,供java代码中调用MultiPlayer类的setDataSource成员函数时找到对应的c++函数   1。
    {"setDataSource", "(Ljava/lang/String;)V", (void *)   android_media_MediaPlayer_setDataSource},   2。
  static void android_media_MediaPlayer_setDataSource   (JNIEnv *env, jobject thiz, jstring path)   此函数中先得到当前的MediaPlayer实例,然后调用其setDataSource函数,传入路径   3。
    status_t MediaPlayer::setDataSource(const char *url)   此函数通过调getMediaPlayerService()先得到当前的MediaPlayerService, const sp& service(getMediaPlayerService());   然后新建一个IMediaPlayer变量, sp player(service->create(getpid(), this, fd, offset, length));   在sp MediaPlayerService::create(pid_t pid, const sp& client, const char* url)中   调status_t MediaPlayerService::Client::setDataSource(const char *url)函数,Client是MediaPlayerService的一个内部类。
       在MediaPlayerService::Client::setDataSource中,调sp MediaPlayerService::Client::createPlayer(player_type playerType)   生成一个继承自MediaPlayerBase的PVPlayer实例。
       以上就是对Android多媒体框架的源代码的解读。

匿名用户

2013-08-22

84 0
    Android设计模式系列(4)--SDK源码之模板方法模式 模板方法,和单例模式是我认为GOF的23中最简单的两种模式。 但是我个人对模板方法的经典思想特别推崇,虽然模板方法在大对数情况下并不被推荐使用,但是这种通过父类调用子类的方法,使用继承来改变算法的一部分,是面向对象的一种基本认识。
     打比方说父亲有很多理想,就行医救人吧,但是父亲医术不行,只能靠儿子,儿子长大后遵从父亲大志,春风拂面,妙手回春,实现了父亲的理想,儿子做的事情早在出生前就定下来了,是父亲之前久定好的模板。
   认识到模板方法的这种思想,父类可以让未知的子类去做它本身可能完成的不好或者根本完成不了的事情,对框架学习大有帮助。   本文以View中的draw方法为例,展开分析。
   模板方法,TemplateMethod,光是学习这个模式,就会对你产生长远影响的一个模式。

类似问题换一批

热点推荐

热度TOP

相关推荐
加载中...

热点搜索 换一换

电脑/网络
程序设计
电脑装机
操作系统/系统故障
硬件
笔记本电脑
百度
互联网
反病毒
软件
程序设计
程序设计
数据库
C/C++
VB
JAVA相关
C#/.NET
VC++
汇编语言
其他编程语言
举报
举报原因(必选):
取消确定举报