diff options
author | Hendrik Leppkes <h.leppkes@gmail.com> | 2016-11-28 16:34:28 +0300 |
---|---|---|
committer | Hendrik Leppkes <h.leppkes@gmail.com> | 2016-11-28 17:20:12 +0300 |
commit | 8b2deccd005e305e8cc524eb941c9e7ef549d774 (patch) | |
tree | d18f0b936faf37974f46c58f2896074b48e99b3f /demuxer/Demuxers/LAVFDemuxer.cpp | |
parent | 68a6ab2501ce2ef91b409215324140b3642697fd (diff) |
Add functions to export stream-level sidedata through the output pin
Diffstat (limited to 'demuxer/Demuxers/LAVFDemuxer.cpp')
-rw-r--r-- | demuxer/Demuxers/LAVFDemuxer.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/demuxer/Demuxers/LAVFDemuxer.cpp b/demuxer/Demuxers/LAVFDemuxer.cpp index 1c28c839..18b42de2 100644 --- a/demuxer/Demuxers/LAVFDemuxer.cpp +++ b/demuxer/Demuxers/LAVFDemuxer.cpp @@ -24,6 +24,7 @@ #include "ILAVPinInfo.h" #include "LAVFVideoHelper.h" #include "ExtradataParser.h" +#include "IMediaSideDataFFmpeg.h" #include "LAVSplitterSettingsInternal.h" @@ -2501,6 +2502,27 @@ STDMETHODIMP_(int) CLAVFDemuxer::GetHasBFrames(DWORD dwStream) return m_avFormat->streams[dwStream]->codecpar->video_delay; } +STDMETHODIMP CLAVFDemuxer::GetSideData(DWORD dwStream, GUID guidType, const BYTE **pData, size_t *pSize) +{ + if (!m_avFormat || dwStream >= m_avFormat->nb_streams) + return E_INVALIDARG; + + if (guidType == IID_MediaSideDataFFMpeg) { + CBaseDemuxer::stream *pStream = FindStream(dwStream); + if (!pStream) + return E_FAIL; + + pStream->SideData.side_data = m_avFormat->streams[dwStream]->side_data; + pStream->SideData.side_data_elems = m_avFormat->streams[dwStream]->nb_side_data; + *pData = (BYTE*)&pStream->SideData; + *pSize = sizeof(pStream->SideData); + + return S_OK; + } + + return E_INVALIDARG; +} + STDMETHODIMP CLAVFDemuxer::GetBSTRMetadata(const char *key, BSTR *pbstrValue, int stream) { if (!m_avFormat) |