From d9bd2e7caec0e77074fde42fa788c492e3caaa9f Mon Sep 17 00:00:00 2001 From: popcornmix Date: Sun, 4 Oct 2015 19:11:15 +0100 Subject: [PATCH] Revert "[demuxer] Avoid memcpy on every demuxer packet" This reverts commit 000111da953f712d0a6928fe3afd3ecef9975300. --- .../VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp | 14 +++++--------- .../cores/VideoPlayer/DVDDemuxers/DVDDemuxPacket.h | 3 --- .../VideoPlayer/DVDDemuxers/DVDDemuxUtils.cpp | 7 +------ 3 files changed, 6 insertions(+), 18 deletions(-) diff --git a/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp index a366bd5a9b242..d388be73f3299 100644 --- a/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp +++ b/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp @@ -773,7 +773,7 @@ DemuxPacket* CDVDDemuxFFmpeg::Read() { if(m_pkt.pkt.stream_index == (int)m_pFormatContext->programs[m_program]->stream_index[i]) { - pPacket = CDVDDemuxUtils::AllocateDemuxPacket(0); + pPacket = CDVDDemuxUtils::AllocateDemuxPacket(m_pkt.pkt.size); break; } } @@ -782,7 +782,7 @@ DemuxPacket* CDVDDemuxFFmpeg::Read() bReturnEmpty = true; } else - pPacket = CDVDDemuxUtils::AllocateDemuxPacket(0); + pPacket = CDVDDemuxUtils::AllocateDemuxPacket(m_pkt.pkt.size); } else bReturnEmpty = true; @@ -824,13 +824,9 @@ DemuxPacket* CDVDDemuxFFmpeg::Read() // copy contents into our own packet pPacket->iSize = m_pkt.pkt.size; + // maybe we can avoid a memcpy here by detecting where pkt.destruct is pointing too? if (m_pkt.pkt.data) - { - pPacket->pData = m_pkt.pkt.data; - // so we can free AVPacket when DemuxPacket is freed - pPacket->pkt = new AVPacket(m_pkt.pkt); - } - + memcpy(pPacket->pData, m_pkt.pkt.data, pPacket->iSize); pPacket->pts = ConvertTimestamp(m_pkt.pkt.pts, stream->time_base.den, stream->time_base.num); pPacket->dts = ConvertTimestamp(m_pkt.pkt.dts, stream->time_base.den, stream->time_base.num); @@ -865,7 +861,7 @@ DemuxPacket* CDVDDemuxFFmpeg::Read() pPacket->iStreamId = m_pkt.pkt.stream_index; } m_pkt.result = -1; - memset(&m_pkt.pkt, 0, sizeof(AVPacket)); + av_free_packet(&m_pkt.pkt); } } } // end of lock scope diff --git a/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxPacket.h b/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxPacket.h index 012a7d187dd30..d64fbb3c26a6f 100644 --- a/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxPacket.h +++ b/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxPacket.h @@ -23,8 +23,6 @@ #define DMX_SPECIALID_STREAMINFO -10 #define DMX_SPECIALID_STREAMCHANGE -11 -struct AVPacket; - typedef struct DemuxPacket { unsigned char* pData; // data @@ -35,5 +33,4 @@ struct AVPacket; double pts; // pts in DVD_TIME_BASE double dts; // dts in DVD_TIME_BASE double duration; // duration in DVD_TIME_BASE if available - AVPacket *pkt; // to allow packet to be freed } DemuxPacket; diff --git a/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxUtils.cpp b/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxUtils.cpp index 10c5ee0f1e488..ab298b205d454 100644 --- a/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxUtils.cpp +++ b/xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxUtils.cpp @@ -34,12 +34,7 @@ void CDVDDemuxUtils::FreeDemuxPacket(DemuxPacket* pPacket) if (pPacket) { try { - if (pPacket->pkt) - { - av_free_packet(pPacket->pkt); - delete pPacket->pkt; - } - else if (pPacket->pData) _aligned_free(pPacket->pData); + if (pPacket->pData) _aligned_free(pPacket->pData); delete pPacket; } catch(...) {