summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-01-16 07:01:53 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-01-16 07:01:53 +0000
commite6c460e462d1b863b72ce0f47720f22a1d4dba56 (patch)
tree365e47ac7946dfe97bda90fa0e6b78bf6151ba8b /libmpdemux
parent9c56f0156484e876f1f3bc5ec53bfe1c526953f7 (diff)
downloadmpv-e6c460e462d1b863b72ce0f47720f22a1d4dba56.tar.bz2
mpv-e6c460e462d1b863b72ce0f47720f22a1d4dba56.tar.xz
"Cosmetics" Introduce a memcpy function doing both transparent
and non-transparent copy. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@21938 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux')
-rw-r--r--libmpdemux/demux_gif.c36
1 files changed, 21 insertions, 15 deletions
diff --git a/libmpdemux/demux_gif.c b/libmpdemux/demux_gif.c
index 2ff3d92c10..49b56b10f9 100644
--- a/libmpdemux/demux_gif.c
+++ b/libmpdemux/demux_gif.c
@@ -43,6 +43,25 @@ static int gif_check_file(demuxer_t *demuxer)
return 0;
}
+static void memcpy_transp_pic(uint8_t *dst, uint8_t *src, int w, int h,
+ int dstride, int sstride, int transp, uint8_t trans_col) {
+ if (transp) {
+ dstride -= w;
+ sstride -= w;
+ while (h-- > 0) {
+ int wleft = w;
+ while (wleft-- > 0) {
+ if (*src != trans_col)
+ *dst = *src;
+ dst++; src++;
+ }
+ dst += dstride;
+ src += sstride;
+ }
+ } else
+ memcpy_pic(dst, src, w, h, dstride, sstride);
+}
+
static int demux_gif_fill_buffer(demuxer_t *demuxer, demux_stream_t *ds)
{
gif_priv_t *priv = demuxer->priv;
@@ -148,21 +167,8 @@ static int demux_gif_fill_buffer(demuxer_t *demuxer, demux_stream_t *ds)
priv->palette[(y * 4) + 3] = 0;
}
- if (transparency) {
- uint8_t *dpos = dest, *spos = buf;
- int hleft = h;
- while (hleft-- > 0) {
- int wleft = w;
- while (wleft-- > 0) {
- if (*spos != transparent_col)
- *dpos = *spos;
- dpos++; spos++;
- }
- dpos += priv->w - w;
- spos += gif->Image.Width - w;
- }
- } else
- memcpy_pic(dest, buf, w, h, priv->w, gif->Image.Width);
+ memcpy_transp_pic(dest, buf, w, h, priv->w, gif->Image.Width,
+ transparency, transparent_col);
if (refmode == 1) memcpy(priv->refimg, dp->buffer, priv->w * priv->h);
if (refmode == 2 && priv->useref) {