使用libjpeg

您所在的位置:网站首页 内存tubo 使用libjpeg

使用libjpeg

2024-07-15 14:33:23| 来源: 网络整理| 查看: 265

将视频文件解码成图片的过程中,我使用了libjpeg-turbo将RGB数据转成JPEG,后来在程序运行中发现有大量的内存溢出。

以下是RGB转JPEG的函数:

int RGB_2_JPG(unsigned char *pRGBBuffer, int width, int height, unsigned char **outbuf, unsigned long *outsize) { struct jpeg_compress_struct jcs; struct jpeg_error_mgr jem; jcs.err = jpeg_std_error(&jem); jpeg_create_compress(&jcs); jpeg_mem_dest(&jcs, &(*outbuf), outsize); jcs.image_width = width; jcs.image_height = height; jcs.input_components = 3; jcs.in_color_space = JCS_RGB; jpeg_set_defaults(&jcs); jpeg_set_quality(&jcs, 80, TRUE); jpeg_start_compress(&jcs, TRUE); JSAMPROW row_pointer[1]; int row_stride; row_stride = width * 3; while (jcs.next_scanline < jcs.image_height) { row_pointer[0] = &pRGBBuffer[jcs.next_scanline * row_stride]; (void)jpeg_write_scanlines(&jcs, row_pointer, 1); } jpeg_finish_compress(&jcs); jpeg_destroy_compress(&jcs); return 0; }

形参中的 outbuf,是jpeg文件转换后的内存地址,已经预先开辟好内存空间。按理说,这个outbuf的地址是不会被改变的,但是在某些情况下它在执行过上面的函数后会指向新的内存地址。因此造成了之前已开辟好的内存空间无法回收,内存开销越来越大,最终程序被操作系统kill。

我的解决办法是:在调用转换函数前用另一个指针保存这个地址,当返回后两个地址不一致,则将两个指针都free()。

unsigned char *p = (unsigned char*)malloc(pCodecCtx->width * pCodecCtx->height); unsigned char *pcheck;  //p的保险指针 ... pcheck = p; //printf("=== addr === %p", p); RGB_2_JPG(pFrameFMT->data[0], pCodecCtx->width, pCodecCtx->height, (unsigned char**)&p, &sz); //printf("=== addr === %p\n", p); std::ofstream fout(output, std::ios_base::binary); fout.write((char*)p, sz); fout.close(); if (p != pcheck) { free(p); p = pcheck; //printf("=== addr is changed, free twice ===\n"); }


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭