android
文章平均质量分 61
HUI的技术笔记
这个作者很懒,什么都没留下…
展开
-
Android HIDL和hwservicemanager
这些自动生成的文件可用来构建客户端/服务器实现链接到的共享库。用于构建此共享库的 Android.bp 文件由 hardware/interfaces/update-makefiles.sh 脚本自动生成。每次将新软件包添加到 hardware/interfaces 或在现有软件包中添加/移除 .hal 文件时,都必须重新运行该脚本,以确保生成的共享库是最新的。进程会按名称和版本号跟踪设备上正在运行的已注册 HIDL 接口,务器可以按名称注册 HIDL 接口实现,而客户端则可以按名称和版本号请求服务实现。原创 2022-12-23 22:03:55 · 2138 阅读 · 0 评论 -
codec2 BlockPool:unreadable libraries
使用CreateCodec2BlockPool创建codec2的block pool会报:unreadable libraries原创 2022-07-30 16:58:13 · 391 阅读 · 0 评论 -
MediaCodec的数据类型和使用方式
使用Input Surface时,没有可访问的输入buffer,因为buffer会自动从输入到Surface传递到编解码器。调用dequeueInputBuffer将引发`IllegalStateException`,getInputBuffers()返回一个不能写入的伪ByteBuffer[]数组。原创 2022-06-19 17:46:28 · 848 阅读 · 2 评论 -
gstreamer中解析生成android的csd-0和csd-1
在Android中,使用codec的时候,通常要先配置csd数据,全称codec specific data,通常从datasource里面都能获得,对应csd-0:SPS数据,csd-1:PPS数据,并且Android硬解码只接受AnnexB格式的数据。所以,在gstreamer中使用Android codec的时候,要配置csd-0和csd-1给codec,就先要从caps里面拿到codec_data,然后进行解析,如果不是annexb格式的数据,就要做一个buffer转换。...原创 2022-06-17 21:23:03 · 1423 阅读 · 0 评论 -
codec2的使用
创建block pool使用CreateCodec2BlockPool创建codec2的block pool会报错,这段代码在CCodecBufferChannel中可以找到:std::shared_ptr<C2AllocatorStore> store = GetCodec2PlatformAllocatorStore();int poolMask = GetCodec2PoolMask();C2PlatformAllocatorStore::id_t preferredLinearI原创 2022-05-16 14:53:27 · 850 阅读 · 0 评论 -
从codec2play熟悉codec2
首先,Codec2Client::CreateFromService中通过hidl ServiceManager获取ServiceManager对象,然后通过listManifestByInterface接口,查询平台的component installce name,然后返回name合集,根据name创建创建Codec2Client对象client,SetPreferredCodec2ComponentStore将client设置到gPreferredComponentStore,后面创建componen原创 2022-05-05 16:17:43 · 2167 阅读 · 0 评论 -
Lambda 表达式
简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。原创 2022-04-25 11:03:46 · 289 阅读 · 0 评论 -
Codec2Client::createComponent过程分析
Codec2Client类继承于Codec2ConfigurableClient父类,它可以创建component,创建与component相关联的interface,是Codec2 HIDL的client实现。原创 2022-04-24 17:47:28 · 3253 阅读 · 2 评论 -
android Codec-specific data
android Codec-specific data在CCodec中,CCodecBufferChannel::onWorkDone回调的时候处理csd buffervoid CCodecBufferChannel::onWorkDone( std::unique_ptr<C2Work> work, const sp<AMessage> &outputFormat, const C2StreamInitDataInfo::output *原创 2022-03-24 19:33:02 · 3054 阅读 · 0 评论 -
codec2中的函数命名后缀vb & nb & sm
在codec2代码中看到函数名后面带着后缀vb,nb,sm等,想知道这个缩写的意思,就从代码里面找了下,这些缩写的解释都在代码的注释里面可以找到,vb,nb从字面意思看很好理解,sm不是很直观,但是结合vb,nb,sm应该就是momentarily blockingvirtual c2_status_t query_vb( const std::vector<C2Param*> &stackParams, const std::vector<C2Param::In原创 2022-03-18 13:37:12 · 1342 阅读 · 0 评论 -
android MediaPlayer架构
MediaPlayer C++实现在libmedia里面,和MediaPlayer.java对应起来,这两者之间通过jni实现android_media_MediaPlayer.cpp联系起来,setDataSource的时候,MediaPlayer会先获取MediaplayerService,然后通过service的create创建MediaPlayerService::Client,MediaPlayer中的mPlayer就是创建的MediaPlayerService::Client对象。BP(b原创 2022-03-10 21:11:25 · 4546 阅读 · 0 评论 -
codec2中的std::lock_guard和std::weak_ptr
std::lock_guard这个类是一个互斥量的包装类,用来提供自动为互斥量上锁和解锁的功能,简化了多线程编程。static std::mutex mutex;static std::weak_ptr<C2ComponentStore> platformStore;std::lock_guard<std::mutex> lock(mutex);std::shared_ptr<C2ComponentStore> store = platformStore.原创 2022-01-14 13:40:18 · 163 阅读 · 0 评论 -
opencv格式转换
rgb2nv12在某些场景中,需要rgb_nv12的image数据,查了下没有rgb到rgb_nv12的直接转换,尝试了下先转换rgb到yuv_i420,然后再转换到rgb_nv12是可以的。Mat yuv, nv12rgb;cv::cvtColor(rgb, yuv, cv::COLOR_RGB2YUV_I420);cv::cvtColor(yuv, nv12rgb, cv::COLOR_YUV2RGB_NV12);...原创 2021-06-02 20:03:41 · 1512 阅读 · 1 评论 -
编译openjdk11
起因android启用asan编译后,碰到在jni里面crash的问题,任何一个jni api都会crash,然后根据错误搜索后,发现下面这篇讲了编译jdk的办法,然后就尝试编译openjdk10,最后编译成功的是openjdk11-1,简单记录下过程,说不定也会有人碰到类似问题。How to use AddressSanitizer with Java[ https://blog.gypsyengineer.com/en/security/running-java-with-addresssani原创 2021-04-30 21:03:59 · 735 阅读 · 1 评论 -
android11升级分区存储之后保存视频文件
忽然发现原来的测试程序中直接通过FileOutputStream获取FileDescriptor的代码不能用了: String date = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); String name = "/sdcard/DCIM/Camera/VID_" + date + ".mp4"; try { FileOut原创 2021-04-30 20:36:12 · 1399 阅读 · 8 评论 -
android studio中使用asan检测内存问题
ASan 是一种基于编译器的快速检测工具,用于检测原生代码中的内存错误。ASan 可以检测以下问题:堆栈和堆缓冲区上溢/下溢 释放之后的堆使用情况 超出范围的堆栈使用情况 重复释放/错误释放build.gradle参考android官网的说明,在模块的 build.gradle 中增加arguments:android { defaultConfig { externalNativeBuild { cmake { ..原创 2021-03-29 14:29:22 · 1463 阅读 · 9 评论 -
build.gradle和CMakeLists.txt间的变量传递
想把build.gradle里面的信息传递到cmake,可以通过argument来做,如下示例: externalNativeBuild { cmake { cppFlags "-std=c++11" arguments "-DCMAKE_BUILD_TYPE=Release", "-DPRODUCT_DIR=snpe-1.40",原创 2021-03-08 19:22:59 · 1033 阅读 · 0 评论 -
MediaCodec的总结
MediaCodec的总结参考:android MediaCodecMediaCodec的api支持三种数据类型编解码器处理三种数据:压缩数据、原始音频数据和原始视频数据。所有三种类型的数据都可以使用ByteBuffer进行处理,但是您应该使用原始视频数据的surface来提高编解码器的性能。Surface使用native video buffer,而无需将它们映射或复制到ByteBuffers;因此,它的效率更高。在使用Surface时,通常无法访问原始视频数据,但可以使用ImageReader原创 2021-03-05 17:08:13 · 1662 阅读 · 0 评论 -
ndk-build的简单用法
ndk build最简单的一条ndk build命令:ndk-build APP_BUILD_SCRIPT=Android.mk NDK_PROJECT_PATH=./ APP_PLATFORM=android-24 APP_ABI=armeabi-v7a指定下面的几个参数给ndk-build脚本,就可以直接根据andorid.mk来编译了:APP_BUILD_SCRIPT NDK_PROJECT_PATH APP_PLATFORM APP_ABI参数说明NDK_PROJECT原创 2020-12-29 13:39:03 · 881 阅读 · 0 评论 -
非常方便的一个Linux timer c11实现
void start(int interval, std::function<void()> task);void startOnce(int delay, std::function<void()> task);这个timer的实现是通过std::thread实现,start函数是启动一个无限循环的timer,直到调用stop结束,_try_to_expire是stop的条件,如果_try_to_expire一直为false,就每次sleep给定的时间段后执行一次task。.原创 2020-10-20 20:56:46 · 316 阅读 · 0 评论 -
在android studio中使用cmake
在build.gradle里面添加externalNativeBuild项就可以使用cmakedefaultConfig { externalNativeBuild { cmake { cppFlags "-std=c++11" arguments "-DCMAKE_BUILD_TYPE=Release" } }} externalNativeBuild { cmake原创 2020-06-10 08:29:50 · 1554 阅读 · 2 评论 -
build.gradle按条件编译与cmake配置
在build.gradle里面通过productFlavors就可以方便的实现不同的编译方案。flavorDimensions定义维度flavorDimensions 从单词字面理解知道是 “风味维度”,是需要结合 “产品风味(即productFlavors)” 来一起使用的。flavorDimensions 的使用会定义出维度,供接下来的 productFlavors 使用。android { // 省略其他参数 flavorDimensions('abi', 'version')原创 2020-06-10 08:18:46 · 1925 阅读 · 0 评论 -
编译android 64位openssl库
下载最新版本的opensslgit clonehttps://github.com/openssl/openssl.git创建编译脚本文件:#!/bin/bash# git checkout OpenSSL_1_1_1-stable# refer to NOTE.ANDROIDexport ANDROID_NDK_ROOT=/home/hui/tools/android-...原创 2020-03-18 15:36:32 · 582 阅读 · 0 评论 -
Android 4.0 gallery2 生成video thumbnail的过程
通过print callstack得知gallery里面获得thumbnail 是通过LocalVideo.requestImage往下调用的: com.android.gallery3d.data.LocalVideo.requestImage(LocalVideo.java:143)com.android.gallery3d.ui.AlbumSlidingWindow$原创 2012-09-11 23:31:47 · 7228 阅读 · 3 评论 -
webm EBML文件头分析
EBML element分析webm格式,主要是对ebml element的理解,EBML是类似于XML那样的层次化结构,每一个元素都有它的ID、值,在二进制存储中每个元素的排列是ID,长度,值Element IDs (also called EBML IDs) are outlined as follows, beginning with the ID itself, followe原创 2013-01-08 16:53:22 · 15298 阅读 · 2 评论 -
android 4.0 cts
首先shell脚本变了,4.0里面叫cts-tradefed$ ./cts-tradefed --helpCTS-tradefed host version 4.0.3_r3CTS-tradefed is the test harness for running the Android Compatibility Suite, built on top of the tradefed fr原创 2012-09-11 23:16:26 · 2687 阅读 · 1 评论