求助 int av_dup_packet(AVPacket* pkt)函数问题
之前网上找到的FFmpeg播放器实例代码中,说 av_dup_packet() 函数 是未定义标识符。。。好不容易,在网上找到了 av_dup_packet() 函数源码。
又说pkt中没有destruct。。。。
应该如何解决。。。。
程序代码:
#include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libswscale/swscale.h> #include <libavdevice/avdevice.h> int av_dup_packet(AVPacket* pkt) { if (((pkt->destruct == av_destruct_packet_nofree) || (pkt->destruct == NULL)) && pkt->data) { uint8_t* data; //定义数据栈上的数据指针 /* We duplicate the packet and don't forget to add the padding again. */ if ((unsigned)pkt->size > (unsigned)pkt->size + FF_INPUT_BUFFER_PADDING_SIZE) return AVERROR(ENOMEM); data = av_malloc(pkt->size + FF_INPUT_BUFFER_PADDING_SIZE); //申请内存 if (!data) { return AVERROR(ENOMEM); } memcpy(data, pkt->data, pkt->size); //把共享的内存拷过去 memset(data + pkt->size, 0, FF_INPUT_BUFFER_PADDING_SIZE); pkt->data = data; // 重新设置pkt->data终于有自己的独立内存了,不用共享别的AVPacket的内存 pkt->destruct = av_destruct_packet; //设置析构函数指针 } return 0; }