Skip to content

Commit

Permalink
Revert "[demuxer] Avoid memcpy on every demuxer packet"
Browse files Browse the repository at this point in the history
This reverts commit 000111d.
  • Loading branch information
popcornmix committed Oct 4, 2015
1 parent cf77f5d commit d9bd2e7
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 18 deletions.
14 changes: 5 additions & 9 deletions xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxFFmpeg.cpp
Expand Up @@ -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;
}
}
Expand All @@ -782,7 +782,7 @@ DemuxPacket* CDVDDemuxFFmpeg::Read()
bReturnEmpty = true;
}
else
pPacket = CDVDDemuxUtils::AllocateDemuxPacket(0);
pPacket = CDVDDemuxUtils::AllocateDemuxPacket(m_pkt.pkt.size);
}
else
bReturnEmpty = true;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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
Expand Down
3 changes: 0 additions & 3 deletions xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxPacket.h
Expand Up @@ -23,8 +23,6 @@
#define DMX_SPECIALID_STREAMINFO -10
#define DMX_SPECIALID_STREAMCHANGE -11

struct AVPacket;

typedef struct DemuxPacket
{
unsigned char* pData; // data
Expand All @@ -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;
7 changes: 1 addition & 6 deletions xbmc/cores/VideoPlayer/DVDDemuxers/DVDDemuxUtils.cpp
Expand Up @@ -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(...) {
Expand Down

0 comments on commit d9bd2e7

Please sign in to comment.