mirror of
https://github.com/mpv-player/mpv
synced 2025-02-20 06:46:55 +00:00
gif library incompatibility fixes and prefere libungif over libgif. Patch by Joey Parrish <joey@nicewarrior.org>
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@9464 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
8432755f2e
commit
33154a7188
36
configure
vendored
36
configure
vendored
@ -2916,18 +2916,18 @@ int main(void) {
|
||||
return 0;
|
||||
}
|
||||
EOF
|
||||
if cc_check -lgif && "$TMPO" >> "$TMPLOG" ; then
|
||||
_gif=yes
|
||||
_ld_gif="-lgif"
|
||||
elif cc_check -lungif && "$TMPO" >> "$TMPLOG" ; then
|
||||
if cc_check -lungif && "$TMPO" >> "$TMPLOG" ; then
|
||||
_gif=yes
|
||||
_ld_gif="-lungif"
|
||||
elif cc_check -lgif $_ld_x11 && "$TMPO" >> "$TMPLOG" ; then
|
||||
_gif=yes
|
||||
_ld_gif="-lgif $_ld_x11"
|
||||
elif cc_check -lungif $_ld_x11 && "$TMPO" >> "$TMPLOG" ; then
|
||||
_gif=yes
|
||||
_ld_gif="-lungif $_ld_x11"
|
||||
elif cc_check -lgif && "$TMPO" >> "$TMPLOG" ; then
|
||||
_gif=yes
|
||||
_ld_gif="-lgif"
|
||||
elif cc_check -lgif $_ld_x11 && "$TMPO" >> "$TMPLOG" ; then
|
||||
_gif=yes
|
||||
_ld_gif="-lgif $_ld_x11"
|
||||
fi
|
||||
fi
|
||||
|
||||
@ -2965,6 +2965,27 @@ fi
|
||||
echores "$_gif"
|
||||
|
||||
|
||||
if test "$_gif" = yes ; then
|
||||
echocheck "broken giflib workaround"
|
||||
_def_gif_tvt_hack='#define HAVE_GIF_TVT_HACK 1'
|
||||
|
||||
cat > $TMPC << EOF
|
||||
#include <gif_lib.h>
|
||||
int main(void) {
|
||||
GifFileType gif;
|
||||
printf("UserData is at address %p\n", gif.UserData);
|
||||
return 0;
|
||||
}
|
||||
EOF
|
||||
if cc_check "$_ld_gif" && ( "$TMPO" ) >>"$TMPLOG" 2>&1 ; then
|
||||
_def_gif_tvt_hack='#undef HAVE_GIF_TVT_HACK'
|
||||
echores "disabled"
|
||||
else
|
||||
echores "enabled"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
if test "$_vesa" != no ; then
|
||||
echocheck "VESA support"
|
||||
if x86 && linux ; then
|
||||
@ -5293,6 +5314,7 @@ $_def_jpg
|
||||
/* enable GIF support */
|
||||
$_def_gif
|
||||
$_def_gif_4
|
||||
$_def_gif_tvt_hack
|
||||
|
||||
/* enable FreeType support */
|
||||
$_def_freetype
|
||||
|
@ -24,9 +24,12 @@ static unsigned char *pallete = NULL;
|
||||
|
||||
#define GIF_SIGNATURE (('G' << 16) | ('I' << 8) | 'F')
|
||||
|
||||
#ifndef HAVE_GIF_TVT_HACK
|
||||
// not supported by certain versions of the library
|
||||
int my_read_gif(GifFileType *gif, uint8_t *buf, int len) {
|
||||
return stream_read(gif->UserData, buf, len);
|
||||
}
|
||||
#endif
|
||||
|
||||
int gif_check_file(demuxer_t *demuxer)
|
||||
{
|
||||
@ -156,7 +159,17 @@ demuxer_t* demux_open_gif(demuxer_t* demuxer)
|
||||
// go back to the beginning
|
||||
stream_seek(demuxer->stream,demuxer->stream->start_pos);
|
||||
|
||||
#ifdef HAVE_GIF_TVT_HACK
|
||||
// without the TVT functionality of libungif, a hard seek must be
|
||||
// done to the beginning of the file. this is because libgif is
|
||||
// unable to use mplayer's cache, and without this lseek libgif will
|
||||
// not read from the beginning of the file and the command will fail.
|
||||
// with this hack enabled, you will lose the ability to stream a GIF.
|
||||
lseek(demuxer->stream->fd, 0, SEEK_SET);
|
||||
gif = DGifOpenFileHandle(demuxer->stream->fd);
|
||||
#else
|
||||
gif = DGifOpen(demuxer->stream, my_read_gif);
|
||||
#endif
|
||||
if (!gif) {
|
||||
PrintGifError();
|
||||
return NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user