diff options
author | nicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2007-02-20 20:21:15 +0000 |
---|---|---|
committer | nicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2007-02-20 20:21:15 +0000 |
commit | 1625094e356021dd0c72566ca9401755a22b3c7d (patch) | |
tree | f63b7550c5aa552e991223be16d1ec1b0f075cb5 /libmpdemux/demux_rtp_codec.cpp | |
parent | e32cbbf7dc315bbadf503889953d47c3b21f57e1 (diff) | |
download | mpv-1625094e356021dd0c72566ca9401755a22b3c7d.tar.bz2 mpv-1625094e356021dd0c72566ca9401755a22b3c7d.tar.xz |
insert extradata in sh_video->bih+1 instead of pushing it to demuxer->video as separate packet; patch by C.E.Hoyos
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@22296 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/demux_rtp_codec.cpp')
-rw-r--r-- | libmpdemux/demux_rtp_codec.cpp | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/libmpdemux/demux_rtp_codec.cpp b/libmpdemux/demux_rtp_codec.cpp index 91bfe814c6..78d8a7b522 100644 --- a/libmpdemux/demux_rtp_codec.cpp +++ b/libmpdemux/demux_rtp_codec.cpp @@ -17,6 +17,21 @@ static Boolean parseQTState_audio(QuickTimeGenericRTPSource::QTState const& qtState, unsigned& fourcc, unsigned& numChannels); // forward +static BITMAPINFOHEADER * insertVideoExtradata(BITMAPINFOHEADER *bih, + unsigned char * extraData, + unsigned size) +{ + BITMAPINFOHEADER * original = bih; + if (!size || size > INT_MAX - sizeof(BITMAPINFOHEADER)) + return bih; + bih = (BITMAPINFOHEADER*)realloc(bih, sizeof(BITMAPINFOHEADER) + size); + if (!bih) + return original; + bih->biSize = sizeof(BITMAPINFOHEADER) + size; + memcpy(bih+1, extraData, size); + return bih; +} + void rtpCodecInitialize_video(demuxer_t* demuxer, MediaSubsession* subsession, unsigned& flags) { @@ -67,7 +82,7 @@ void rtpCodecInitialize_video(demuxer_t* demuxer, unsigned configLen; unsigned char* configData = parseGeneralConfigStr(subsession->fmtp_config(), configLen); - insertRTPData(demuxer, demuxer->video, configData, configLen); + sh_video->bih = bih = insertVideoExtradata(bih, configData, configLen); needVideoFrameRate(demuxer, subsession); } else if (strcmp(subsession->codecName(), "X-QT") == 0 || strcmp(subsession->codecName(), "X-QUICKTIME") == 0) { @@ -103,11 +118,9 @@ void rtpCodecInitialize_video(demuxer_t* demuxer, if ((!memcmp(pos+4, "avcC", 4) || !memcmp(pos+4, "esds", 4) || !memcmp(pos+4, "SMI ", 4)) && - atomLength > 8 && - atomLength <= INT_MAX-sizeof(BITMAPINFOHEADER)) { - bih->biSize = sizeof(BITMAPINFOHEADER)+atomLength-8; - sh_video->bih = bih = (BITMAPINFOHEADER*)realloc(bih, bih->biSize); - memcpy(bih+1, pos+8, atomLength-8); + atomLength > 8) { + sh_video->bih = bih = + insertVideoExtradata(bih, pos+8, atomLength-8); break; } pos += atomLength; |