summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
authornicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-02-20 20:21:15 +0000
committernicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-02-20 20:21:15 +0000
commit1625094e356021dd0c72566ca9401755a22b3c7d (patch)
treef63b7550c5aa552e991223be16d1ec1b0f075cb5 /libmpdemux
parente32cbbf7dc315bbadf503889953d47c3b21f57e1 (diff)
downloadmpv-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')
-rw-r--r--libmpdemux/demux_rtp_codec.cpp25
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;