请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

8-3 player.c 的FrameQueue写得有问题,生产和消费Frame不对,不管生产直接消费?

1.在player.c 第281~284 没有管生产Frame ,直接一股脑的消费

static Frame *frame_queue_peek(FrameQueue *fq)
{
    return &fq->queue[fq->rindex];
}

这个问题希望老师看一,看看我理解的对不对,

2.是不是还要加上这一个函数,生产和消费才对

static Frame *frame_queue_peek_readable(FrameQueue *f)

3.希望老在查一下8~3得代码,问题很多

正在回答

1回答

没问题,消费线程只管消费,只要对列里有数据就拿出来消费。这是生产-消费的一种变形, 不是生产一个就要消费一个。你可以思考一个问题,如果生产者在生产产品,生产后通知了消费者,但消费者正在忙优先级更高的事儿,消费者当然可以不理生产者的消息,等它忙完了再去对列里取。另外对列是有长度限制的,当生产者生产到一定数量,对列满了也就停止了

0 回复 有任何疑惑可以回复我~
  • 提问者 iStream #1
    1.这个设计没有考虑 消费>生产 , 如果出现消费大于生产,就会黑屏因为没有视频帧,
    2.我看在ffplay中是考虑了一下这个情况 加了 frame_queue_peek_readable() 函数
    回复 有任何疑惑可以回复我~ 2024-07-04 09:09:34
  • 李超 回复 提问者 iStream #2
    不会出现你说的这种情况,播放器是按时间播放的,生产者是看对列里有没有空间,有空间他就取数据放到对列中,知道无数据可取或对列满。你自己也可以测试一下,看看播放器是否有黑屏的情况
    回复 有任何疑惑可以回复我~ 2024-07-04 10:56:19
  • 提问者 iStream #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2024-07-06 10:06:31
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信