From a454e8931a11ca7c965fe7fe5807e12abe5390dc Mon Sep 17 00:00:00 2001 From: Sigmund Augdal Helberg Date: Sat, 30 Dec 2006 18:42:15 +0000 Subject: [PATCH] live555.cpp: Add support for quicktime specific audio doesn't work for the sample stream I tested, but I think that stream is bad --- modules/demux/live555.cpp | 43 +++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/modules/demux/live555.cpp b/modules/demux/live555.cpp index 10d2810221..2f815f2e45 100644 --- a/modules/demux/live555.cpp +++ b/modules/demux/live555.cpp @@ -492,6 +492,11 @@ static int Open ( vlc_object_t *p_this ) p_sys->p_out_asf = stream_DemuxNew( p_demux, "asf", p_demux->out ); } + else if( !strcmp( sub->codecName(), "X-QT" ) || + !strcmp( sub->codecName(), "X-QUICKTIME" ) ) + { + tk->b_quicktime = VLC_TRUE; + } } else if( !strcmp( sub->mediumName(), "video" ) ) { @@ -1324,21 +1329,33 @@ static void StreamRead( void *p_private, unsigned int i_size, QuickTimeGenericRTPSource::QTState &qtState = qtRTPSource->qtState; uint8_t *sdAtom = (uint8_t*)&qtState.sdAtom[4]; - if( qtState.sdAtomSize < 16 + 32 ) - { - /* invalid */ - p_sys->event = 0xff; - tk->waiting = 0; - return; - } - tk->fmt.i_codec = VLC_FOURCC(sdAtom[0],sdAtom[1],sdAtom[2],sdAtom[3]); - tk->fmt.video.i_width = (sdAtom[28] << 8) | sdAtom[29]; - tk->fmt.video.i_height = (sdAtom[30] << 8) | sdAtom[31]; + if( tk->fmt.i_cat == VIDEO_ES ) { + if( qtState.sdAtomSize < 16 + 32 ) + { + /* invalid */ + p_sys->event = 0xff; + tk->waiting = 0; + return; + } + tk->fmt.i_codec = VLC_FOURCC(sdAtom[0],sdAtom[1],sdAtom[2],sdAtom[3]); + tk->fmt.video.i_width = (sdAtom[28] << 8) | sdAtom[29]; + tk->fmt.video.i_height = (sdAtom[30] << 8) | sdAtom[31]; - tk->fmt.i_extra = qtState.sdAtomSize - 16; - tk->fmt.p_extra = malloc( tk->fmt.i_extra ); - memcpy( tk->fmt.p_extra, &sdAtom[12], tk->fmt.i_extra ); + tk->fmt.i_extra = qtState.sdAtomSize - 16; + tk->fmt.p_extra = malloc( tk->fmt.i_extra ); + memcpy( tk->fmt.p_extra, &sdAtom[12], tk->fmt.i_extra ); + } + else { + if( qtState.sdAtomSize < 4 ) + { + /* invalid */ + p_sys->event = 0xff; + tk->waiting = 0; + return; + } + tk->fmt.i_codec = VLC_FOURCC(sdAtom[0],sdAtom[1],sdAtom[2],sdAtom[3]); + } tk->p_es = es_out_Add( p_demux->out, &tk->fmt ); } -- 2.39.2