chainsaw    14/08/04 21:35:29

  Added:                libmodplug-0.8.8.5-psm-omf2097-fixes.patch
                        libmodplug-0.8.8.5-no-fast-math.patch
  Log:
  Version bump, as requested by Tom Wijsman in bug #516926. Handle OMF2097 PSM 
files correctly, filed upstream on Github as pull request 19.
  
  (Portage version: 2.2.11-r1/cvs/Linux x86_64, signed Manifest commit with key 
0xB5058F9A)

Revision  Changes    Path
1.1                  
media-libs/libmodplug/files/libmodplug-0.8.8.5-psm-omf2097-fixes.patch

file : 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/media-libs/libmodplug/files/libmodplug-0.8.8.5-psm-omf2097-fixes.patch?rev=1.1&view=markup
plain: 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/media-libs/libmodplug/files/libmodplug-0.8.8.5-psm-omf2097-fixes.patch?rev=1.1&content-type=text/plain

Index: libmodplug-0.8.8.5-psm-omf2097-fixes.patch
===================================================================
diff -uNr libmodplug-0.8.8.5.ORIG/src/load_psm.cpp 
libmodplug-0.8.8.5/src/load_psm.cpp
--- libmodplug-0.8.8.5.ORIG/src/load_psm.cpp    2014-08-04 22:25:14.743262000 
+0100
+++ libmodplug-0.8.8.5/src/load_psm.cpp 2014-08-04 22:26:56.907267088 +0100
@@ -286,66 +286,49 @@
                if ((Patterns[nPat] = AllocatePattern(nRows, m_nChannels)) == 
NULL) break;
                MODCOMMAND *m = Patterns[nPat];
                BYTE *p = pPsmPat->data;
+               MODCOMMAND *sp, dummy;
                UINT pos = 0;
                UINT row = 0;
-               UINT oldch = 0;
-               BOOL bNewRow = FALSE;
+               UINT rowlim;
        #ifdef PSM_LOG
                Log("Pattern %d at offset 0x%04X\n", nPat, (DWORD)(p - (BYTE 
*)lpStream));
        #endif
+               UINT flags, ch;
+               rowlim = bswapLE16(pPsmPat->reserved1)-2;
                while ((row < nRows) && (pos+1 < len))
                {
-                       UINT flags = p[pos++];
-                       UINT ch = p[pos++];
-                       
-               #ifdef PSM_LOG
-                       //Log("flags+ch: %02X.%02X\n", flags, ch);
-               #endif
-                       if (((flags & 0xf0) == 0x10) && (ch <= oldch) /*&& 
(!bNewRow)*/)
-                       {
-                               if ((pos+1<len) && (!(p[pos] & 0x0f)) && 
(p[pos+1] < m_nChannels))
-                               {
-                               #ifdef PSM_LOG
-                                       //if (!nPat) Log("Continuing on new 
row\n");
-                               #endif
-                                       row++;
-                                       m += m_nChannels;
-                                       oldch = ch;
-                                       continue;
-                               }
-                       }
-                       if ((pos >= len) || (row >= nRows)) break;
-                       if (!(flags & 0xf0))
-                       {
-                       #ifdef PSM_LOG
-                               //if (!nPat) Log("EOR(%d): %02X.%02X\n", row, 
p[pos], p[pos+1]);
-                       #endif
-                               row++;
+                       if ((pos+1) >= rowlim) {
+                               pos = rowlim;
+                               rowlim = (((int)p[pos+1])<<8)
+                                       | ((int)p[pos+0]);
                                m += m_nChannels;
-                               bNewRow = TRUE;
-                               oldch = ch;
-                               continue;
-                       }
-                       bNewRow = FALSE;
-                       if (ch >= m_nChannels)
-                       {
-                       #ifdef PSM_LOG
-                               if (!nPat) Log("Invalid channel row=%d 
(0x%02X.0x%02X)\n", row, flags, ch);
-                       #endif
-                               ch = 0;
+                               row++;
+                               rowlim += pos;
+                               pos += 2;
                        }
+                       flags = p[pos++];
+                       ch = p[pos++];
+                       if (ch >= m_nChannels) {
+                               sp = &dummy;
+                        } else {
+                               sp = &m[ch];
+                        }
                        // Note + Instr
+                        if ((flags & 0x80) && (pos+1 < len))
+                        {
+                                UINT note = p[pos++];
+                                note = (note>>4)*12+(note&0x0f)+12+1;
+                                if (note > 0x80) note = 0;
+                               m[ch].note = note;
+                        }
                        if ((flags & 0x40) && (pos+1 < len))
                        {
-                               UINT note = p[pos++];
                                UINT nins = p[pos++];
                        #ifdef PSM_LOG
                                //if (!nPat) Log("note+ins: %02X.%02X\n", note, 
nins);
                                if ((!nPat) && (nins >= m_nSamples)) 
Log("WARNING: invalid instrument number (%d)\n", nins);
                        #endif
-                               if ((note) && (note < 0x80)) note = 
(note>>4)*12+(note&0x0f)+12+1;
                                m[ch].instr = samplemap[nins];
-                               m[ch].note = note;
                        }
                        // Volume
                        if ((flags & 0x20) && (pos < len))
@@ -362,13 +345,29 @@
                                switch(command)
                                {
                                // 01: fine volslide up
-                               case 0x01:      command = CMD_VOLUMESLIDE; 
param |= 0x0f; break;
+                               case 0x01:      command = CMD_VOLUMESLIDE; 
param |= 0x0f;
+                                               if (param == 15) param=31;
+                                               break;
+                                // 02: volslide up
+                                case 0x02:      command = CMD_VOLUMESLIDE; 
param>>=1; param<<=4; break;
+                                // 03: fine volslide down
+                                case 0x03:     command = CMD_VOLUMESLIDE; 
param>>=4; param |= 0xf0;
+                                               if (param == 240) param=241;
+                                               break;
                                // 04: fine volslide down
                                case 0x04:      command = CMD_VOLUMESLIDE; 
param>>=4; param |= 0xf0; break;
                                // 0C: portamento up
                                case 0x0C:      command = CMD_PORTAMENTOUP; 
param = (param+1)/2; break;
                                // 0E: portamento down
                                case 0x0E:      command = CMD_PORTAMENTODOWN; 
param = (param+1)/2; break;
+                               // 0F: tone portamento
+                               case 0x0F:      command = CMD_TONEPORTAMENTO; 
param = param/4; break;
+                               // 15: vibrato
+                                case 0x15:     command = CMD_VIBRATO; break;
+                               // 29: sample offset
+                               case 0x29:      pos += 2; break;
+                               // 2A: retrigger note
+                               case 0x2A:      command = CMD_RETRIG; break;
                                // 33: Position Jump
                                case 0x33:      command = CMD_POSITIONJUMP; 
break;
                                // 34: Pattern break
@@ -387,7 +386,6 @@
                                m[ch].command = (BYTE)command;
                                m[ch].param = (BYTE)param;
                        }
-                       oldch = ch;
                }
        #ifdef PSM_LOG
                if (pos < len)



1.1                  
media-libs/libmodplug/files/libmodplug-0.8.8.5-no-fast-math.patch

file : 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/media-libs/libmodplug/files/libmodplug-0.8.8.5-no-fast-math.patch?rev=1.1&view=markup
plain: 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/media-libs/libmodplug/files/libmodplug-0.8.8.5-no-fast-math.patch?rev=1.1&content-type=text/plain

Index: libmodplug-0.8.8.5-no-fast-math.patch
===================================================================
diff -uNr libmodplug-0.8.8.5.ORIG/configure.ac libmodplug-0.8.8.5/configure.ac
--- libmodplug-0.8.8.5.ORIG/configure.ac        2014-08-04 22:25:14.741262000 
+0100
+++ libmodplug-0.8.8.5/configure.ac     2014-08-04 22:25:45.228263519 +0100
@@ -29,7 +29,7 @@
 AC_CHECK_HEADERS([inttypes.h stdint.h malloc.h])
 AC_CHECK_FUNCS(setenv sinf)
 
-CXXFLAGS="$CXXFLAGS -fno-exceptions -Wall -ffast-math -D_REENTRANT"
+CXXFLAGS="$CXXFLAGS -fno-exceptions -Wall -D_REENTRANT"
 # CXXFLAGS="-fno-exceptions -g -Wall -ffast-math -D_REENTRANT `glib-config 
--cflags`"
 
 AC_CANONICAL_HOST




Reply via email to