static void packet_queue_flush(PacketQueue q) { MyAVPacketList pkt, pkt1; SDL.SDL_LockMutex(q.mutex); for (pkt = q.first_pkt; pkt != null; pkt = pkt1) { pkt1 = pkt.next; AV.av_free_packet(pkt.pkt.P); //AV.av_freep(pkt); } q.last_pkt = null; q.first_pkt = null; q.nb_packets = 0; q.size = 0; SDL.SDL_UnlockMutex(q.mutex); }
static int packet_queue_put(PacketQueue q, Native <AV.AVPacket> pkt) { int ret; /* duplicate the packet */ if (pkt.P != flush_pkt.P && AV.av_dup_packet(pkt.P) < 0) { return(-1); } SDL.SDL_LockMutex(q.mutex); ret = packet_queue_put_private(q, pkt); SDL.SDL_UnlockMutex(q.mutex); if (pkt.P != flush_pkt.P && ret < 0) { AV.av_free_packet(pkt.P); } return(ret); }