4.13. Decoder_RawStream
裸流解码器,可实现H264/H264的解码。
4.13.1. 构造函数
初始化Decoder_RawStream。
- 接口形式:
- Decoder_RawStream(int tpu_id, string decformt); 
参数说明:
- tpu_id: int 
设置智能视觉深度学习处理器的id号。
- decformat: string 
输入参数。输入图像的格式,支持h264和h265
4.13.2. read
从Decoder_RawStream中读取一帧图像。
- 接口形式:
- int read(uint8_t* data, int data_size, sail::BMImage &image,bool continueFrame = false); 
参数说明:
- data: uint8_t* 
输入参数。裸流的二进制数据。
- image: BMImage 
输出参数。将数据读取到image中。
- continueFrame: bool 
输入参数。是否连续读帧,默认为false。
返回值说明:
- judge_ret: int 
读取成功返回0,失败返回其他值。
4.13.3. read_
从Decoder_RawStream中读取一帧图像。
- 接口形式:
- int read_(uint8_t* data, int data_size, bm_image &image,bool continueFrame = false); 
参数说明:
- data: uint8_t* 
输入参数。裸流的二进制数据。
- image: bm_image 
输出参数。将数据读取到image中。
- continueFrame: bool 
输入参数。是否连续读帧,默认为false。
返回值说明:
- judge_ret: int 
读取成功返回0,失败返回其他值。
4.13.4. release
释放Decoder资源。
- 接口形式:
- void release(); 
- 示例代码:
- #include <sail/cvwrapper.h> using namespace std; int main(int argc, char *argv[]){ const char *inputFile = "car.264"; FILE *file = fopen(inputFile, "rb"); if (!file) { fprintf(stderr, "Failed to open file for reading\n"); return -1; } if(access("output",0)!=F_OK){ mkdir("output",S_IRWXU); } fseek(file, 0, SEEK_END); int numBytes = ftell(file); cout << "infile size: " << numBytes << endl; fseek(file, 0, SEEK_SET); uint8_t *bs_buffer = (uint8_t *)av_malloc(numBytes); if (bs_buffer == nullptr) { cout << "av malloc for bs buffer failed" << endl; fclose(file); return -1; } fread(bs_buffer, sizeof(uint8_t), numBytes, file); fclose(file); file = nullptr; // create handle int dev_id=0; auto handle = sail::Handle(dev_id); bm_image image; sail::Decoder_RawStream decoder_rawStream(dev_id,"h264"); int frameCount =0; while(true){ decoder_rawStream.read_(bs_buffer,numBytes,image,true); string out = "output/out_" + to_string(frameCount) + ".bmp"; bm_image_write_to_bmp(image, out.c_str()); frameCount++; } av_free(bs_buffer); return 0; }