俺觉得ffmpeg最牛逼的地方就在于只用两个指针来维护一个FIFO的队列就好了。
比如这个入队函数的功能就是入队,功能及其简化,其实也是限制队列大小的,比如说
raw buffer的总共大小(就是pkt的size大小的和),最共最多有raw_packet_buffer_remaining_size的初始值这么大,
当取走一个节点,那么raw_packet_buffer_remaining_size 的当前值会加大pkt.size;
当为raw buffer存入一个新的节点,raw_packet_buffer_remaining_size的当前值就就减小了pkt.size。
入队的时候,会判断队列是否空,当空的时候,会改变对头指针,
不管队列是否空,队尾指针,始终会被改变。
因此,add_to_pktbuf 传入的是对头指针的地址和队尾指针的地址,进行修改。
当然,新加入的pkt在入队后的内存地址会被函数返回。
static AVPacket *add_to_pktbuf(AVPacketList **packet_buffer, AVPacket *pkt,
AVPacketList **plast_pktl){
printf("### IN add_to_pktbuf BEGIN \n");
AVPacketList *pktl =