C++格式要求

1. 头文件
1.1. Self-contained 头文件
头文件以.h结尾
用来插入文本的文件以.inc结尾(作为文本插入到代码某处)+(或者,文件内容实际上是其它头文件的特定平台(platform-specific)扩展部)

1.4. 内联函数
只有当函数只有 10 行甚至更少时才将其定义为内联函数

1.5. #include 的路径及顺序
项目内头文件应按照项目源代码目录树结构排列如:google-awesome-project/src/base/logging.h
1,dir2/foo2.h (优先位置, 详情如下)
2,C 系统文件
3,C++ 系统文件
4,其他库的 .h 文件
5,本项目内 .h 文件

2.4. 局部变量
将函数变量尽可能置于最小作用域内, 并在变量声明时进行初始化.

3.4结构体和类
仅当只有数据成员是使用struct,其他一概使用class
struct:一般只用来定义数成员
class:需要更多的函数功能

3.5 继承
使用继承的话一般使用public继承
继承的应用场景:1,实现继承 2,子类仅仅继承父类的方法名

3.6 多重继承
最多只有一个基类是非抽象类,其它基类都是以Interface为后缀的纯接口类

3.7 接口
接口类不能被直接实例化,因为他声名了纯虚构函数

3.8运算法符重载
只有在意义明显,不会出现奇怪的行为并且与对应的内建运算符的行为一致时才定义重载运算符。

3.9存取控制
3.10声明顺序
public protected private

4.函数
4.3引用参数
函数需要修改变量的值,参数必须为指针也可以声名为引用参数(C++中就是用引用)
函数参数列表中,所有引用参数都必须是const

4.5缺省参数
4.6函数返回类型后置语法
auto foo(int x)->int

7,命名约定
7.1函数命名,。比变量命名,文件命名要有描述性,少用缩写
7.2文件命名
文件命名要全部小写,可以加_
定义类是文件名一般成对出现.h  .cc
7.3类型命名
首写字母大写且不包括下划线,就是都是相连在一起的。
类型:类,结构体,类型定义,类型模板参数,枚举
7.4变量命名
变量和数据成员一律用小写,单词之间用下划线链接,类的成员变量一下划线结尾,当时结构体的就不用
7.5常数命名
被声名为constpr和const的变量,命名以k开头并且以k结尾,单词开头是以大写字母开头的
7.6函数命名
以大写字母开头且没有下划线
7.7命名空间
不适用缩写作为命名空间,使用文件名以使得内部名称独一无二
7.8 枚举
命名规则和常量和宏一样都是以k开头和以k结尾,首写字母是以大写字母开头的
7.9宏
全部的字母都是大写,并且是以下划线链接
8.注释
注释的目的是增加代码的可读性
8.1我的注释风格用//
8.2文件注释
每个概念的纤细文档应当放在各个概念中
注:不要再.h和.cc中复制注释
8.3类注释
每个类都要附带一份注释,用来描述类的功能和用法
8.4函数注释
函数声明处的注释描述函数的功能,定义处的注释描述函数的实现
8.5变量注释
如果变量名不能说明他的功能,就给变量加上注释
8.6实现注释
在实现的代码中加上一些注释比较好
我提供的注释应当解释代码,为什么要这么做和代码的目的,或者最好是让代码自文档化
总:注释因该做到言简意赅,不拖泥带水
TODO注释确实是为了标记一些未完成的或者完成不尽人意的地方


9.格式
9.1每一行的代码都不要超过80

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用FFmpeg库来实现将h264裸数据存储为mp4格式的功能。以下是一个简单的示例代码: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdint.h> extern "C" { #include <libavformat/avformat.h> #include <libavcodec/avcodec.h> #include <libavutil/opt.h> } int main(int argc, char *argv[]) { AVFormatContext *fmt_ctx = NULL; AVOutputFormat *out_fmt = NULL; AVStream *video_st = NULL; AVCodecContext *codec_ctx = NULL; AVCodec *codec = NULL; AVPacket pkt; uint8_t *video_outbuf = NULL; int video_outbuf_size = 0; int ret = 0; // 打开输入文件 if ((ret = avformat_open_input(&fmt_ctx, argv[1], NULL, NULL)) < 0) { fprintf(stderr, "Could not open input file '%s'\n", argv[1]); goto end; } // 查找流信息 if ((ret = avformat_find_stream_info(fmt_ctx, NULL)) < 0) { fprintf(stderr, "Could not find stream information\n"); goto end; } // 查找视频流 for (int i = 0; i < fmt_ctx->nb_streams; i++) { if (fmt_ctx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { video_st = fmt_ctx->streams[i]; break; } } if (!video_st) { fprintf(stderr, "Could not find video stream\n"); goto end; } // 查找视频编解码器 codec = avcodec_find_decoder(video_st->codecpar->codec_id); if (!codec) { fprintf(stderr, "Could not find video decoder\n"); goto end; } // 创建编解码器上下文 codec_ctx = avcodec_alloc_context3(codec); if (!codec_ctx) { fprintf(stderr, "Could not allocate codec context\n"); goto end; } // 将流参数复制到编解码器上下文中 if ((ret = avcodec_parameters_to_context(codec_ctx, video_st->codecpar)) < 0) { fprintf(stderr, "Could not copy codec parameters to context\n"); goto end; } // 打开编解码器 if ((ret = avcodec_open2(codec_ctx, codec, NULL)) < 0) { fprintf(stderr, "Could not open codec\n"); goto end; } // 创建输出格式 out_fmt = av_guess_format(NULL, argv[2], NULL); if (!out_fmt) { fprintf(stderr, "Could not guess output format\n"); goto end; } // 创建输出文件 if ((ret = avformat_alloc_output_context2(&fmt_ctx, out_fmt, NULL, argv[2])) < 0) { fprintf(stderr, "Could not create output context\n"); goto end; } // 创建视频流 video_st = avformat_new_stream(fmt_ctx, NULL); if (!video_st) { fprintf(stderr, "Could not create video stream\n"); goto end; } // 将流参数复制到输出流中 if ((ret = avcodec_parameters_copy(video_st->codecpar, codec_ctx->codecpar)) < 0) { fprintf(stderr, "Could not copy codec parameters to stream\n"); goto end; } // 打开输出文件 if (!(out_fmt->flags & AVFMT_NOFILE)) { if ((ret = avio_open(&fmt_ctx->pb, argv[2], AVIO_FLAG_WRITE)) < 0) { fprintf(stderr, "Could not open output file '%s'\n", argv[2]); goto end; } } // 写文件头 if ((ret = avformat_write_header(fmt_ctx, NULL)) < 0) { fprintf(stderr, "Could not write header\n"); goto end; } // 分配视频输出缓冲区 video_outbuf_size = codec_ctx->width * codec_ctx->height * 3 / 2; video_outbuf = (uint8_t*)av_malloc(video_outbuf_size); // 读取数据并编码 while (av_read_frame(fmt_ctx, &pkt) >= 0) { if (pkt.stream_index == video_st->index) { // 解码视频帧 ret = avcodec_send_packet(codec_ctx, &pkt); if (ret < 0) { fprintf(stderr, "Error sending packet to decoder\n"); goto end; } while (ret >= 0) { ret = avcodec_receive_frame(codec_ctx, video_st->codecpar); if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) { break; } else if (ret < 0) { fprintf(stderr, "Error receiving frame from decoder\n"); goto end; } // 编码视频帧 ret = avcodec_send_frame(codec_ctx, video_st->codecpar); if (ret < 0) { fprintf(stderr, "Error sending frame to encoder\n"); goto end; } while (ret >= 0) { ret = avcodec_receive_packet(codec_ctx, &pkt); if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) { break; } else if (ret < 0) { fprintf(stderr, "Error receiving packet from encoder\n"); goto end; } // 写入输出文件 pkt.stream_index = video_st->index; av_interleaved_write_frame(fmt_ctx, &pkt); av_packet_unref(&pkt); } } } av_packet_unref(&pkt); } // 写文件尾 av_write_trailer(fmt_ctx); end: if (video_outbuf) { av_free(video_outbuf); } if (codec_ctx) { avcodec_free_context(&codec_ctx); } if (fmt_ctx) { avformat_close_input(&fmt_ctx); } if (ret < 0) { fprintf(stderr, "Error occurred: %s\n", av_err2str(ret)); return 1; } return 0; } ``` 这段代码使用了FFmpeg库中的函数来打开输入文件、查找流信息、查找视频流、查找视频编解码器、创建编解码器上下文、打开编解码器、创建输出格式、创建输出文件、创建视频流、分配视频输出缓冲区、读取数据并编码、写文件头、写文件尾等操作,最终将h264裸数据存储为mp4格式的文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值