vlc/vlc-2.0 | branch: master | Sébastien Escudier <[email protected]> | Thu Mar 8 15:22:45 2012 +0100| [34089319779eee7fdfa112debefd1e3f23c24fa9] | committer: Sébastien Escudier
improve mxpeg detection : there are some cases where the jpeg comment is not included (cherry picked from commit 1cb530379f592f7308fd87b70a0267157894ccea) Signed-off-by: Sébastien Escudier <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc/vlc-2.0.git/?a=commit;h=34089319779eee7fdfa112debefd1e3f23c24fa9 --- modules/demux/mxpeg_helper.h | 18 +++++++++++------- 1 files changed, 11 insertions(+), 7 deletions(-) diff --git a/modules/demux/mxpeg_helper.h b/modules/demux/mxpeg_helper.h index 76305c6..b221ece 100644 --- a/modules/demux/mxpeg_helper.h +++ b/modules/demux/mxpeg_helper.h @@ -46,7 +46,7 @@ static bool IsMxpeg(stream_t *s) int size = stream_Peek(s, &header, 256); int position = 0; - if (find_jpeg_marker(&position, header, size) != 0xd8) + if (find_jpeg_marker(&position, header, size) != 0xd8 || position > size-2) return false; if (find_jpeg_marker(&position, header, position + 2) != 0xe0) return false; @@ -57,23 +57,27 @@ static bool IsMxpeg(stream_t *s) /* Skip this jpeg header */ uint32_t header_size = GetWBE(&header[position]); position += header_size; - if (position + 4 > size) + + /* Get enough data to analyse the next header */ + if (position + 6 > size) { - size = position + 4; + size = position + 6; if( stream_Peek (s, &header, size) < size ) return false; } - /* Skip the comment header */ if ( !(header[position] == 0xFF && header[position+1] == 0xFE) ) return false; - position += 2; header_size = GetWBE (&header[position]); - /* Find the MXF header */ + /* Check if this is a MXF header. We may have a jpeg comment first */ + if (!memcmp (&header[position+2], "MXF\0", 4) ) + return true; + + /* Skip the jpeg comment and find the MXF header after that */ size = position + header_size + 8; //8 = FF FE 00 00 M X F 00 - if (stream_Peek(s, &header, position + header_size + 8 ) < size) + if (stream_Peek(s, &header, size ) < size) return false; position += header_size; _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
