ffmpeg之packet_queue_put解析

首先贴下函数原型:

typedef struct AVPacketList {
    AVPacket pkt;		//AVPacket也是一个结构体,不多解释
    struct AVPacketList *next; //next是一个AVPacketList指针
} AVPacketList;

首先贴下函数原型:

typedef struct PacketQueue {
  AVPacketList *first_pkt, *last_pkt;  //first_pkt,last_pkt分别是AVPacketList类型指针
  int nb_packets;
  int size;
  SDL_mutex *mutex;
  SDL_cond *cond;
} PacketQueue;
首先贴下函数原型:
int packet_queue_put(PacketQueue *q, AVPacket *pkt) {

  AVPacketList *pkt1;
  if(av_dup_packet(pkt) < 0) {
    return -1;
  }
  pkt1 = av_malloc(sizeof(AVPacketList));
  if (!pkt1)
    return -1;
  pkt1->pkt = *pkt;
  pkt1->next = NULL;

   SDL_LockMutex(q->mutex);
 
  if (!q->last_pkt)		//判断q->last_pkt是否为空,
    q->first_pkt = pkt1;        //为空的话,则让first_pkt指向这个pktl这个结构体
  else
    q->last_pkt->next = pkt1;	//如果q->last_pkt不为空,也就是q->last_pkt指向一个pkl类型的结构体
  q->last_pkt = pkt1;           //任何时候都会执行到这一句,q->last_pkt指向最新进来的pkl类型
  q->nb_packets++;
  q->size += pkt1->pkt.size;
  SDL_CondSignal(q->cond);
  
  SDL_UnlockMutex(q->mutex);
  return 0;

图片大概就这么个意思



                
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值