Hello community,

here is the log from the commit of package libmirage for openSUSE:Factory 
checked in at 2013-03-26 15:56:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libmirage (Old)
 and      /work/SRC/openSUSE:Factory/.libmirage.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libmirage", Maintainer is ""

Changes:
--------
--- /work/SRC/openSUSE:Factory/libmirage/libmirage.changes      2013-03-11 
12:06:01.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.libmirage.new/libmirage.changes 2013-03-26 
15:56:56.000000000 +0100
@@ -1,0 +2,7 @@
+Tue Mar 12 09:30:09 UTC 2013 - [email protected]
+
+- Add 0001-libMirage-SNDFILE-filter-instead-of-a-single-frame-c.patch
+  to resolve excess CPU usage during CDDA readout
+  (bnc#809181, bnc#809862)
+
+-------------------------------------------------------------------
@@ -6,0 +14 @@
+  (bugurl: http://sf.net/p/cdemu/feature-requests/21/)

Old:
----
  libmirage-2.0.0.tar.bz2

New:
----
  0001-libMirage-SNDFILE-filter-instead-of-a-single-frame-c.patch
  libmirage-2.0.0.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libmirage.spec ++++++
--- /var/tmp/diff_new_pack.gbAOXj/_old  2013-03-26 15:56:57.000000000 +0100
+++ /var/tmp/diff_new_pack.gbAOXj/_new  2013-03-26 15:56:57.000000000 +0100
@@ -28,10 +28,12 @@
 
 #Freecode-URL: https://freecode.com/projects/cdemu-for-linux
 #Git-Clone:    git://git.code.sf.net/p/cdemu/code
-Source:         http://downloads.sf.net/cdemu/%name-%version.tar.bz2
+#DL-URL:       http://downloads.sf.net/cdemu/%name-%version.tar.bz2
+Source:         %name-%version.tar.xz
 Patch1:         0001-libMirage-CMake-fix-SOVERSION-which-should-be-set-to.patch
 Patch2:         0001-libMirage-READCD-Parser-when-verifying-the-file-don-.patch
 Patch3:         0001-libMirage-READCD-Parser-readcd-from-cdrtools-appears.patch
+Patch4:         0001-libMirage-SNDFILE-filter-instead-of-a-single-frame-c.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildRequires:  cmake >= 2.8.5
 BuildRequires:  pkgconfig >= 0.16
@@ -131,7 +133,7 @@
 
 %prep
 %setup -Tcqa0
-%patch -P 1 -P 2 -P 3 -p2
+%patch -P 1 -P 2 -P 3 -P 4 -p2
 
 %build
 # gir is busted on 12.1

++++++ 0001-libMirage-SNDFILE-filter-instead-of-a-single-frame-c.patch ++++++
>From 79e017c9e196a1e4f0be649d265be8060257bee4 Mon Sep 17 00:00:00 2001
From: Rok Mandeljc <[email protected]>
Date: Thu, 7 Mar 2013 23:13:23 +0100
Subject: [PATCH] libMirage: SNDFILE filter: instead of a single frame, cache
 blocks of 588 frames, which is equivalent of one CD-ROM
 audio sector. This way, caching is much more efficient, and
 consequently reduces CPU load. Fix for bug #60.

Edit by Jan Engelhardt <[email protected]>
Increase buffer size even more (see bug #60);
to 2 seconds, to resolve more dropouts.

---
 .../filter-sndfile/filter-sndfile-file-filter.c    |   43 +++++++++++---------
 1 file changed, 23 insertions(+), 20 deletions(-)

diff --git a/libmirage/src/filters/filter-sndfile/filter-sndfile-file-filter.c 
b/libmirage/src/filters/filter-sndfile/filter-sndfile-file-filter.c
index a92f7ae..78c465f 100644
--- a/libmirage/src/filters/filter-sndfile/filter-sndfile-file-filter.c
+++ b/libmirage/src/filters/filter-sndfile/filter-sndfile-file-filter.c
@@ -21,6 +21,9 @@
 
 #define __debug__ "SNDFILE-FileFilter"
 
+/* Number of frames to cache */
+#define NUM_FRAMES 588*75*2
+
 
 /**********************************************************************\
  *                          Private structure                         *
@@ -35,7 +38,7 @@ struct _MirageFileFilterSndfilePrivate
     gint buflen;
     guint8 *buffer;
 
-    gint cached_frame;
+    gint cached_block;
 };
 
 
@@ -143,7 +146,7 @@ static gboolean 
mirage_file_filter_sndfile_can_handle_data_format (MirageFileFil
     mirage_file_filter_set_file_size(MIRAGE_FILE_FILTER(self), length);
 
     /* Allocate read buffer; we wish to hold a single (multichannel) frame */
-    self->priv->buflen = self->priv->format.channels * sizeof(guint16);
+    self->priv->buflen = self->priv->format.channels * sizeof(guint16) * 
NUM_FRAMES;
     MIRAGE_DEBUG(self, MIRAGE_DEBUG_PARSER, "%s: buffer length: %d bytes\n", 
__debug__, self->priv->buflen);
     self->priv->buffer = g_try_malloc(self->priv->buflen);
     if (!self->priv->buffer) {
@@ -158,42 +161,42 @@ static gssize mirage_file_filter_sndfile_partial_read 
(MirageFileFilter *_self,
 {
     MirageFileFilterSndfile *self = MIRAGE_FILE_FILTER_SNDFILE(_self);
     goffset position = 
mirage_file_filter_get_position(MIRAGE_FILE_FILTER(self));
-    gint frame;
+    gint block;
 
-    /* Find the frame corresponding to current position */
-    frame = position / self->priv->buflen;
-    MIRAGE_DEBUG(self, MIRAGE_DEBUG_FILE_IO, "%s: stream position: %ld (0x%lX) 
-> frame #%d (cached: #%d)\n", __debug__, position, position, frame, 
self->priv->cached_frame);
+    /* Find the block of frames corresponding to current position */
+    block = position / self->priv->buflen;
+    MIRAGE_DEBUG(self, MIRAGE_DEBUG_FILE_IO, "%s: stream position: %ld (0x%lX) 
-> block #%d (cached: #%d)\n", __debug__, position, position, block, 
self->priv->cached_block);
 
-    /* If we do not have block in cache, uncompress it */
-    if (frame != self->priv->cached_frame) {
+    /* If we do not have block in cache, read it */
+    if (block != self->priv->cached_block) {
         gsize read_length;
 
-        MIRAGE_DEBUG(self, MIRAGE_DEBUG_FILE_IO, "%s: frame not cached, 
reading...\n", __debug__);
+        MIRAGE_DEBUG(self, MIRAGE_DEBUG_FILE_IO, "%s: block not cached, 
reading...\n", __debug__);
 
-        /* Seek to frame */
-        sf_seek(self->priv->sndfile, frame, SEEK_SET);
+        /* Seek to beginning of block */
+        sf_seek(self->priv->sndfile, block*NUM_FRAMES, SEEK_SET);
 
         /* Read the frame */
-        read_length = sf_readf_short(self->priv->sndfile, (short 
*)self->priv->buffer, 1);
+        read_length = sf_readf_short(self->priv->sndfile, (short 
*)self->priv->buffer, NUM_FRAMES);
 
         if (!read_length) {
-            MIRAGE_DEBUG(self, MIRAGE_DEBUG_FILE_IO, "%s: frame not read; EOF 
reached?\n", __debug__);
+            MIRAGE_DEBUG(self, MIRAGE_DEBUG_FILE_IO, "%s: block not read; EOF 
reached?\n", __debug__);
             return 0;
         }
 
         /* Store the number of currently stored block */
-        self->priv->cached_frame = frame;
+        self->priv->cached_block = block;
     } else {
-        MIRAGE_DEBUG(self, MIRAGE_DEBUG_FILE_IO, "%s: frame already cached\n", 
__debug__);
+        MIRAGE_DEBUG(self, MIRAGE_DEBUG_FILE_IO, "%s: block already cached\n", 
__debug__);
     }
 
     /* Copy data */
-    goffset frame_offset = position % self->priv->buflen;
-    count = MIN(count, self->priv->buflen - frame_offset);
+    goffset block_offset = position % self->priv->buflen;
+    count = MIN(count, self->priv->buflen - block_offset);
 
-    MIRAGE_DEBUG(self, MIRAGE_DEBUG_FILE_IO, "%s: offset within frame: %ld, 
copying %d bytes\n", __debug__, frame_offset, count);
+    MIRAGE_DEBUG(self, MIRAGE_DEBUG_FILE_IO, "%s: offset within block: %ld, 
copying %d bytes\n", __debug__, block_offset, count);
 
-    memcpy(buffer, self->priv->buffer + frame_offset, count);
+    memcpy(buffer, self->priv->buffer + block_offset, count);
 
     return count;
 }
@@ -220,7 +223,7 @@ static void mirage_file_filter_sndfile_init 
(MirageFileFilterSndfile *self)
         0
     );
 
-    self->priv->cached_frame = -1;
+    self->priv->cached_block = -1;
 
     self->priv->sndfile = NULL;
     self->priv->buffer = NULL;
-- 
1.7.10.4

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to