注册 登录
编程论坛 C语言论坛

求助 int av_dup_packet(AVPacket* pkt)函数问题

追梦人zmrghy 发布于 2023-04-23 22:22, 125 次点击
之前网上找到的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;
}
0 回复
1