![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 56
zhangxinjieli3
专注于andriod camera开发
展开
-
设计模式读书笔记
希望通过记录一些关键点做到实际开发中能够得心应手。状态模式这个模式可能工作中会遇到,将可以互换的行为封装起来,然后使用委托的方法,决定使用哪一个行为,状态基转移场景这种设计会大量新增状态类,对于一些复杂场景会非常管用;对一些简单场景,比如状态里面只有一个处理函数,状态基转换也比较简单,顺序递增,可能只需要封装函数即可。int state = 0;switch (state) { case 0: DoStateStart(); break;原创 2022-05-29 22:09:58 · 237 阅读 · 0 评论 -
Camera HAL Service流程总结
目录前言一、HIDL接口1.CameraProvier1.setCallback(ICameraProviderCallback callback)2.getVendorTags3.getCameraIdList4.isSetTorchModeSupported5.getCameraDeviceInterface_V3_x2.CameraDevice1.getResou...原创 2022-04-30 23:41:30 · 2798 阅读 · 2 评论 -
Camera Framework Service流程总结
文章目前言 本文主要记录些Camera Servie的一些问题的理解,对几个问题进行讨论,一些参考Camera Service一、代码位置向上暴露的接口具体实现二、关系类图三、问题讨论1.Buffer是在哪分配的,它是怎么轮转的 1.Buffer的数量status_t Camera3Device::HalInterface::configureStreams(const came.........原创 2022-04-28 23:19:02 · 927 阅读 · 0 评论 -
Camera Framework Client流程总结
文主要一起看下之前一篇app demo涉及的一些接口函数原创 2022-04-22 23:46:58 · 476 阅读 · 0 评论 -
高通CamX架构分析
参考资料:1、https://www.cnblogs.com/programandriod/p/13868585.html该文档中的高价值点有介绍file: vendor/qcom/proprietary/camx/src/csl/hw/camxsyncmanager.cpp2、https://www.zhihu.com/people/hei-niu-o原创 2021-03-14 13:34:17 · 545 阅读 · 0 评论 -
编码总结
1、分层 对外接口函数和内部调用函数一定要分好层次,对外接口函数内不要再去调用对外接口函数,如果出现这种情况,就说明函数设计有问题,需要将公共部分独立成内部调用,否则就可能出现各种问题。 形如 class A { public: void getOut() { AutoLoc原创 2018-04-03 00:39:23 · 167 阅读 · 0 评论 -
android::sp和boost::shared_ptr设计模式区别
两者都是采用引用计数的方式实现的智能指针,但是两者所使用的设计模式确实不同的。boost::shared_ptr使用组合的实现方式, class shared_ptr { private: boost::detail::shared_count pn; // reference counter }; 任何对象都可以用shared_ptr来维护android:...原创 2018-05-29 23:45:09 · 1458 阅读 · 0 评论 -
C++11常用语法
1、Lamda函数 在工作中Lamda函数的一个使用场景:一个函数中重复代码比较多,并且需要减少圈复杂度,又不想独立成函数(上下文不够清晰,函数抽象也比较蹩脚),这时候Lamda函数就派上用场了。 C++11提供了对匿名函数的支持,称为Lambda函数(也叫Lambda表达式). Lambda表达式具体形式如下: capture->return-type{body} 如果......原创 2018-06-27 07:46:44 · 267 阅读 · 0 评论 -
section使用方法
几年之前,看到关于section的使用百思不得其解,最近又重新探究了。 形如: struct A { int a; int b; };A attribute((used, section(“test”))) a; A attribute((used, section(“test”))) b;extern “C” attribute((visibility(“h...原创 2018-08-08 03:34:27 · 8963 阅读 · 0 评论 -
android::CallStack代码分析
android::CallStack用于代码分析C++代码架构经常特别复杂,可以使用android::CallStack将调用栈打印出来基本用法:#inclucde<utils/CallStack.h>#include<utils/Log.h>android::CallStack stack;stack.update();stack.dump(1); //输.原创 2018-09-20 00:20:56 · 4664 阅读 · 0 评论 -
hidl相关数据类型Return
在hidl相关接口接口调用时候,看到了一个数据类型Returnhttp://androidxref.com/8.0.0_r4/xref/system/libhidl/base/include/hidl/Status.h在编码中可以借鉴其设计有时候函数返回值需要返回多个状态,比如:1、有没有调用成功 2、调用成功之后的返回值,所以可以仿照Return的定义,用来包装返回值,同时增加成员函数i...原创 2019-01-06 21:51:46 · 1396 阅读 · 0 评论 -
Android Thread使用注意事项
通过继承android::Thread,可以轻松定义一个自己想要的线程。 例如: class MyThread : public android::Thread { public: virtual bool threadLoop(); //重写threadLoop方法 }; 问题关键我应该怎么实例化呢? 1、栈上定义,MyThread instance(); 2、堆上定义...原创 2018-02-08 08:14:06 · 958 阅读 · 0 评论 -
探究std::stringstream
string myStr(“98 99 999”); stringstream strStream; strStream>>myStr; int a, b, c; strStream>>a>>b>>c; a = 98 b = 99 c = 999; 这都比较好理解 ,但正好有个变量是unsigned char类型的。 char d; strStream>>d; printf(“d原创 2016-11-10 23:59:37 · 532 阅读 · 0 评论 -
顺序链表插入
顺序链表插入一个简单实现 struct ListNode { ListNode* next; int value; };ListNode* insertList(ListNode* head, ListNode* node) { ListNode* start = head; ListNode* pre = start; for(; star原创 2017-12-26 23:39:32 · 848 阅读 · 0 评论 -
从编译原理理解数组名
参考文章: http://blog.chinaunix.net/uid-27004869-id-3301282.html编译器在做词法分析和语法分析的时候,遇到一个数组的定义,就会把数组的有关信息汇集在一个叫做“内情向量”或“信息向量”的表格中,其中的信息包括数组的类型,维数,各维的上、下边界,以及数组的首地址,然后将这个“内情向量”相关信息存储在符号表中。 数组定义后位置就是固定的,因此其首地原创 2016-03-24 23:54:36 · 1607 阅读 · 0 评论 -
探究fork函数
问题起源:在看mediaserver进程的创建时,它用fork函数创建了子进程跑log的service.从而想研究一下fork函数怎么会出现两个返回值这么神奇的事情。 示例代码: int main() { pid_t pid; pid = fork(); if(pid == 0) { sleep(2); printf(“chlid\n原创 2016-04-19 23:16:18 · 177 阅读 · 0 评论 -
探究mmap
关于内存映射mmap的原理介绍非常多,之所以想了解mmap的原因是看到进程间通信,使用mmap内存映射实现消息队列。 1、相关链接 http://blog.csdn.net/joejames/article/details/37958017 里面提到了内核空间和用户空间的概念,好久不看内核先关的书籍,有点遗忘。 里面提到read/write会出现两次拷贝,第一次拷贝是将文件拷贝到内核空间,第原创 2016-04-22 22:11:26 · 242 阅读 · 0 评论 -
探究struct对齐
一直犯了一个想当然的错误 struct A { int a; char b; }; 一直认为a是四字节对齐,b是1字节对齐,所以A的size是5个字节。 struct A自身也需要对齐,是4字节对齐,所以A的size是8个字节。 参考:http://blog.chinaunix.net/uid-14802518-id-2784907.html原创 2016-11-02 22:58:30 · 223 阅读 · 0 评论 -
探究std::string
今天写了一句 static std::string myString = NULL; 直接崩溃了,太大意了。std::string的构造函数 string(const char* s) 里面会调用strlen(s),直接crash原创 2016-10-26 22:47:07 · 194 阅读 · 0 评论 -
C++编程思想之虚函数
通过动态库dlsym一个类,如果这个类有虚函数,外面引用的头文件和类中定义的头文件虚函数声明顺序不一样,会不会有问题? 例如: DynamicLib.h class A { virtual int funcA() = 0; virtual int funcB() = 0; virtual int funcC() = 0; };class B : public原创 2017-08-04 22:09:10 · 293 阅读 · 0 评论 -
C++编程思想之运算符重载
class A { public: int* a; public: operator bool() { if(a != NULL) return true; else return false; } }int main() { A aa; i原创 2017-08-10 22:44:58 · 170 阅读 · 0 评论 -
函数指针
函数指针的声明和定义,原创 2017-08-25 19:58:42 · 143 阅读 · 0 评论 -
探究printf
对printf的探究始于几个问题 1、 short a, b; printf(“a=%d b=%d”, a, b); %d是用来打印有符号整型int类型,那它这样打印会不会有问题,比如寻址越界,但是发现其实都能够打印正常,所以应该不会有寻址越界问题。 2、printf的实现原理究竟是怎样的,它是如何实现可变参数的。 现在我们仍然采用汇编语言以及阅读printf源码来解决疑问。 type原创 2016-04-15 23:35:03 · 328 阅读 · 0 评论 -
定位crash问题
使用反汇编精确到一条汇编指令 addr2line可以精确到哪一行代码,但是一行代码可能对应多条指令,所以如果条件允许的话,拿到带有符号表的算法库,反汇编到具体指令。 工作中出现一个crash,首先定位到具体语句 mDevice->getPixFmt(frameMsg->mFrame, &frameFmt); 如果单看这条语句,涉及两个指针,那究竟是哪个指针有问题,通过反汇编+上下文,我们可以原创 2017-09-16 09:32:53 · 302 阅读 · 0 评论 -
编译和链接
我们经常说编译不过,这里的编译应该是个笼统的大的概念。 参考博文: http://blog.chinaunix.net/uid-26548237-id-3839979.html 编译生成的的是汇编语言,.S文件,可以编译命令g++ -s 汇编生成的是目标文件, .o文件,g++ -o,o的意思应该是object,目标的意思 链接是将各个目标文件.o组装起来。 每个目标文件还提供了三个表:原创 2016-03-30 23:31:12 · 215 阅读 · 0 评论