av_bitstream_filter_filter memory free
来源:互联网 发布:淘宝卖家打假关店 编辑:程序博客网 时间:2024/06/05 16:18
How may I free pkt in an ffmpeg write frame method
Posted 28-Feb-14 12:33pm
radnix824
Updated 28-Feb-14 14:55pm
CHill60157.4K
v2
Add a Solution
Comments
You need to write one frame at a time. Also you are freeing a pointer to what it is that you are trying to write before you write it. Thus it crashes. If you don't free it at all you then keep allocating more and more RAM instead of writing to HDD file, and freeing memory for next frame.
Thanks ! yes, you've got me thinking.....:)
Rate this:
Solution 1
Well, I did finally get it working and will post my particular solution here with the hope it may help others. Oh, almost forgot. If you have a suggestion for change to this code, please do:
Hide Expand Copy Code
static void write_frame(AVFormatContext *s, AVPacket *pkt, AVCodecContext *avctx, AVBitStreamFilterContext *bsfc){ int ret; while(bsfc){ AVPacket new_pkt= *pkt; int a= av_bitstream_filter_filter(bsfc, avctx, NULL, &new_pkt.data, &new_pkt.size, pkt->data, pkt->size, pkt->flags & AV_PKT_FLAG_KEY); if(a>0){ //av_free_packet(pkt);//-comment this out if (new_pkt.data != pkt->data)//-added this { av_free_packet(pkt); pkt->data = new_pkt.data; pkt->size = new_pkt.size; pkt->destruct = av_destruct_packet; } new_pkt.destruct= av_destruct_packet; } else if(a<0){ fprintf(stderr, "%s failed for stream %d, codec %s", bsfc->filter->name, pkt->stream_index, avctx->codec ? avctx->codec->name : "copy"); print_error("", a); if (exit_on_error) exit_program(1); } <b>// *pkt= new_pkt;//-comment this out</b> bsfc= bsfc->next; } ret= av_interleaved_write_frame(s, pkt); av_free_packet(pkt);//-added here av_bitstream_filter_close(bsfc);//-added here if(ret < 0){ print_error("av_interleaved_write_frame()", ret); exit_program(1); }}</pre>
Permalink
Comments
Looks better. Just remember in a function like this, you need to use your 'dummy' variables correctly. The dummy receives the info, the function operates on the dummy, when the dummy is happy it spits it back in the format you wanted.
Excellent analysis and a pretty good step ahead for future application. The original code is from ffmpeg.c .
Rate this:
Solution 2
Hide Copy Code
AVPacket new_pkt = pkt;int a = av_bitstream_filter_filter(m_bsfDecoderContext, out_stream->codec,NULL,&new_pkt.data,&new_pkt.size,pkt.data,pkt.size,pkt.flags & AV_PKT_FLAG_KEY); av_free_packet(&pkt);pkt.data = new_pkt.data;pkt.size = new_pkt.size; if (av_interleaved_write_frame(ofmt_ctx, &pkt) < 0)break;av_free(new_pkt.data);
1 0
- av_bitstream_filter_filter memory free
- av_bitstream_filter_filter memory free
- Get free memory value
- Linux Memory Usage: free
- memory leak check tool: free
- calloc, malloc, free, realloc - Allocate and free dynamic memory
- 遇到swap free memory为0怎么办?
- IOS得到当前free memory size
- memory leak & double free如何排查?
- Free Linux Memory by Dropping Caches
- FATAL ERROR : No Free Memory for XSDT
- use `free` to check available memory
- 手机cached free memory(剩余内存)计算方法
- JavaCard free memory detect (how much memory left)
- MS Internet Explorer Recordset Double Free Memory Exploit (MS07-009)
- MS Internet Explorer Recordset Double Free Memory Exploit (MS07-009)
- BREW处理错误:module failed to free all memory
- How to check free space on memory card
- React中的表单组件
- Spring事物管理理解
- oracle创建用户、表空间及授权
- 聊聊iOS开发中的单元测试
- linux php安装
- av_bitstream_filter_filter memory free
- android TextView文字底部或者中间加横线
- Java NIO系列教程(十) Java NIO DatagramChannel
- twincat
- log4j与commons-logging,slf4j的关系
- 如何正确(完美)卸载Java/JDK/JRE
- phpredis 执行LUA脚本的例子
- Spring MVC DispatcherServlet介绍
- python文件格式转换