JM8.6中的一个重要结构体NALU_t的定义、分配和释放
来源:互联网 发布:如何找数据分析项目 编辑:程序博客网 时间:2024/05/22 19:54
在JM8.6中,NALU_t是一个非常重要的结构体,回寝室之前,欣赏一下结构体NALU_t的定义:
typedef struct { int startcodeprefix_len; //! 4 for parameter sets and first slice in picture, 3 for everything else (suggested) unsigned len; //! Length of the NAL unit (Excluding the start code, which does not belong to the NALU) unsigned max_size; //! Nal Unit Buffer size int nal_unit_type; //! NALU_TYPE_xxxx int nal_reference_idc; //! NALU_PRIORITY_xxxx int forbidden_bit; //! should be always FALSE byte *buf; //! conjtains the first byte followed by the EBSP} NALU_t;
接着欣赏一下AllocNALU函数
NALU_t *AllocNALU(int buffersize){ NALU_t *n; if ((n = (NALU_t*)calloc (1, sizeof (NALU_t))) == NULL) no_mem_exit ("AllocNALU: n"); // 分配一个结构体的空间 n->max_size=buffersize; if ((n->buf = (byte*)calloc (buffersize, sizeof (byte))) == NULL) no_mem_exit ("AllocNALU: n->buf"); // 也要分配这个空间 return n;}
接着欣赏FreeNALU函数.
void FreeNALU(NALU_t *n){ if (n) { if (n->buf) { free(n->buf); // 先释放 n->buf=NULL; } free (n); // 再释放 }}
欣赏完最后一个近似模拟程序就回去啦,如下:
#include<iostream>using namespace std;typedef struct nalu{int bufferSize;int *buf;}NALU_t;NALU_t* allocNALU(int size){NALU_t *n = new NALU_t;n->bufferSize = size;n->buf = new int[n->bufferSize];return n;}void freeNALU(NALU_t *n){if(NULL != n){if(NULL != n->buf){free(n->buf);n->buf = NULL;}free(n);n->buf = NULL;}n->bufferSize = 0;}int main(){int size = 280;NALU_t *n = allocNALU(size);int i;for(i = 0; i < size; i++){n->buf[i] = i;}for(i = 0; i < size; i++){cout << n->buf[i] << endl;}freeNALU(n);return 0;}
Ok, 回去.
第二天了. 发现还有几个函数不错呢,可以看看:
static byte *NAL_Payload_buffer; // 文件全局变量
void FreeNalPayloadBuffer(){ if(NAL_Payload_buffer) { free(NAL_Payload_buffer); NAL_Payload_buffer=NULL; }}
void AllocNalPayloadBuffer() // 分配一帧的堆{ const int buffer_size = (input->img_width * input->img_height * 4); // AH 190202: There can be data expansion with // low QP values. So, we make sure that buffer // does not everflow. 4 is probably safe multiplier. FreeNalPayloadBuffer(); NAL_Payload_buffer = (byte *) calloc(buffer_size, sizeof(byte)); assert (NAL_Payload_buffer != NULL);}
- JM8.6中的一个重要结构体NALU_t的定义、分配和释放
- JM8.6中重要结构体说明
- 结构体的使用和动态内存的分配及释放
- 数据结构预备知识之指针,结构体和动态内存的分配与释放
- 关于C++中结构体及其指针成员的内存分配和释放
- 一个简单模拟内存分配和释放的实现
- 定义一个结构体指针需要分配存储空间?
- 存储空间的分配和释放
- 结构体指针数组 内存分配 释放
- 结构体指针数组 内存分配 释放
- JM8.6 ImageParameter结构体中ipremode变量 详解
- 同时定义一个结构和一个指向结构的指针
- JM8.6中的encode_one_macroblock注释
- JM8.6中的encode_one_macroblock注释
- C语言中%*[^\n]的重要用途(从JM8.6解码器中学到的)
- 结构体中的一维,二维指针和内存的释放
- 变量的内存分配和释放
- 分配和释放 BSTR 的内存
- 系统的横向结构和Websharp AOP(非常不错)
- html小总结:邻接选择器
- RailsCasts中文版,#14 Performing Calculations on Models 利用模型自带的统计功能
- Eclipse快捷键 10个最有用的快捷键
- Java多线程
- JM8.6中的一个重要结构体NALU_t的定义、分配和释放
- 架构师面试题1
- POJ 1326 Mileage Bank
- HOJ 1688 Speed Limit
- (4)AT&T汇编笔记
- 大端(Big Endian)、小端(Little Endian)存储模式名字的来历
- js事件驱动机制 浏览器兼容处理
- Kademlia 协议原理简介
- HOJ 1685 Flow Layout