C(X):stdint.h头文件

stdint.h

stdint.h是c99中引进的一个标准C库的文件,定义了几种扩展的整数类型和宏。代码解读如下

#pragma once
#define _STDINT

#include <vcruntime.h>
#if _VCRT_COMPILER_PREPROCESSOR

#pragma warning(push) //保存编译器当前的警告状态
#pragma warning(disable: _VCRUNTIME_DISABLED_WARNINGS) //消除一些警告

//Part1
//一堆的 typedef ,创立一些新的数据类,比如  typedef signed char        int8_t;

//Part2 
//定义了一堆宏,其中有些宏限制新定义的数据类型的范围,比如 #define INT8_MIN         (-127i8 - 1)
//如果是win64还额外定义了一些宏(使用#ifdef)

//Part3
//定义了几个函数宏,比如 #define INT8_C(x)    (x)

#pragma warning(pop) //恢复原先的警告状态

#endif 

#pragma once
#define _STDINT
#include <vcruntime.h> 
#if _VCRT_COMPILER_PREPROCESSOR

#pragma warning(push)
#pragma warning(disable: _VCRUNTIME_DISABLED_WARNINGS)

typedef signed char        int8_t;
typedef short              int16_t;
typedef int                int32_t;
typedef long long          int64_t;
typedef unsigned char      uint8_t;
typedef unsigned short     uint16_t;
typedef unsigned int       uint32_t;
typedef unsigned long long uint64_t;

typedef signed char        int_least8_t;
typedef 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的使用x264库将input.yuyv数据编码为output.h264视频的C语言程序: ```c #include <stdint.h> #include <x264.h> // 输入文件路径 #define INPUT_FILE_PATH "input.yuyv" // 输出文件路径 #define OUTPUT_FILE_PATH "output.h264" // 输入视频宽度 #define VIDEO_WIDTH 640 // 输入视频高度 #define VIDEO_HEIGHT 480 // 输出视频帧率 #define FRAME_RATE 25 int main() { // 打开输入文件 FILE* input_file = fopen(INPUT_FILE_PATH, "rb"); if (!input_file) { fprintf(stderr, "Failed to open input file %s\n", INPUT_FILE_PATH); return 1; } // 打开输出文件 FILE* output_file = fopen(OUTPUT_FILE_PATH, "wb"); if (!output_file) { fprintf(stderr, "Failed to open output file %s\n", OUTPUT_FILE_PATH); fclose(input_file); return 1; } // 初始化x264编码器 x264_param_t param; x264_param_default_preset(&param, "medium", "zerolatency"); param.i_width = VIDEO_WIDTH; param.i_height = VIDEO_HEIGHT; param.i_fps_num = FRAME_RATE; param.i_fps_den = 1; param.i_threads = 1; param.i_keyint_max = FRAME_RATE; param.b_intra_refresh = 1; param.rc.i_bitrate = 500000; x264_t* encoder = x264_encoder_open(&param); if (!encoder) { fprintf(stderr, "Failed to open x264 encoder\n"); fclose(input_file); fclose(output_file); return 1; } // 读取并编码每一帧 int y_size = VIDEO_WIDTH * VIDEO_HEIGHT; int frame_size = y_size * 3 / 2; uint8_t* frame_data = (uint8_t*)malloc(frame_size); x264_picture_t pic_in, pic_out; x264_picture_alloc(&pic_in, X264_CSP_I420, VIDEO_WIDTH, VIDEO_HEIGHT); pic_in.i_type = X264_TYPE_AUTO; int frame_num = 0; while (fread(frame_data, 1, frame_size, input_file) == frame_size) { // 将YUYV数据转换为I420格式 for (int i = 0; i < y_size; i++) { pic_in.img.plane[0][i] = frame_data[i * 2]; pic_in.img.plane[1][i / 4] = frame_data[y_size + (i / 2)]; pic_in.img.plane[2][i / 4] = frame_data[y_size + y_size / 4 + (i / 2)]; } // 编码图像 x264_nal_t* nal; int i_nal; x264_encoder_encode(encoder, &nal, &i_nal, &pic_in, &pic_out); // 将NAL单元写入输出文件 for (int i = 0; i < i_nal; i++) { fwrite(nal[i].p_payload, 1, nal[i].i_payload, output_file); } frame_num++; printf("Encoded frame %d\n", frame_num); } // 清理资源 free(frame_data); x264_encoder_close(encoder); fclose(input_file); fclose(output_file); return 0; } ``` 这个程序假设输入文件是640x480的YUYV格式视频,输出文件是H.264格式。它使用x264库来编码每一帧,并将编码后的NAL单元写入输出文件。你可以根据自己的需要进行修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值