예제 #1
0
        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);
        }
예제 #2
0
        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);
        }