diff --git a/ffplay.c b/ffplay.c index 4b6fe8bb3e..a365b1c94a 100644 --- a/ffplay.c +++ b/ffplay.c @@ -284,7 +284,37 @@ static AVPacket flush_pkt; static SDL_Surface *screen; -static int packet_queue_put(PacketQueue *q, AVPacket *pkt); +static int packet_queue_put(PacketQueue *q, AVPacket *pkt) +{ + AVPacketList *pkt1; + + /* duplicate the packet */ + if (pkt!=&flush_pkt && 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->first_pkt = pkt1; + else + q->last_pkt->next = pkt1; + q->last_pkt = pkt1; + q->nb_packets++; + q->size += pkt1->pkt.size + sizeof(*pkt1); + /* XXX: should duplicate packet data in DV case */ + SDL_CondSignal(q->cond); + + SDL_UnlockMutex(q->mutex); + return 0; +} /* packet queue handling */ static void packet_queue_init(PacketQueue *q) @@ -319,38 +349,6 @@ static void packet_queue_end(PacketQueue *q) SDL_DestroyCond(q->cond); } -static int packet_queue_put(PacketQueue *q, AVPacket *pkt) -{ - AVPacketList *pkt1; - - /* duplicate the packet */ - if (pkt!=&flush_pkt && 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->first_pkt = pkt1; - else - q->last_pkt->next = pkt1; - q->last_pkt = pkt1; - q->nb_packets++; - q->size += pkt1->pkt.size + sizeof(*pkt1); - /* XXX: should duplicate packet data in DV case */ - SDL_CondSignal(q->cond); - - SDL_UnlockMutex(q->mutex); - return 0; -} - static void packet_queue_abort(PacketQueue *q) { SDL_LockMutex(q->mutex);