diff options
-rw-r--r-- | src/kitplayer.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/kitplayer.c b/src/kitplayer.c index 7d5ddd5..2d6ae22 100644 --- a/src/kitplayer.c +++ b/src/kitplayer.c @@ -342,10 +342,16 @@ static void _HandleVideoPacket(Kit_Player *player, AVPacket *packet) { // Lock, write to audio buffer, unlock Kit_VideoPacket *vpacket = _CreateVideoPacket(oframe, pts); + bool done = false; if(SDL_LockMutex(player->vmutex) == 0) { - Kit_WriteBuffer((Kit_Buffer*)player->vbuffer, vpacket); + if(Kit_WriteBuffer((Kit_Buffer*)player->vbuffer, vpacket) == 0) { + done = true; + } SDL_UnlockMutex(player->vmutex); } + if(!done) { + _FreeVideoPacket(vpacket); + } } } @@ -413,11 +419,19 @@ static void _HandleAudioPacket(Kit_Player *player, AVPacket *packet) { // Lock, write to audio buffer, unlock Kit_AudioPacket *apacket = _CreateAudioPacket((char*)dst_data[0], (size_t)dst_bufsize, pts); + bool done = false; if(SDL_LockMutex(player->amutex) == 0) { - Kit_WriteBuffer((Kit_Buffer*)player->abuffer, apacket); + if(Kit_WriteBuffer((Kit_Buffer*)player->abuffer, apacket) == 0) { + done = true; + } SDL_UnlockMutex(player->amutex); } + // Couldn't write packet, free memory + if(!done) { + _FreeAudioPacket(apacket); + } + av_freep(&dst_data[0]); av_freep(&dst_data); } |