[SCM] morituri/master: * morituri/image/image.py: * morituri/test/test_image_image.py: AccurateRip binary files actually contain multiple responses, so parse all of them. * examples/ARcue.py: Handle case of not having a response, and having multiple responses.
js at users.alioth.debian.org
js at users.alioth.debian.org
Sun Oct 19 20:08:46 UTC 2014
The following commit has been merged in the master branch:
commit f865e915265afdd55f925f3beb9698e75acc8982
Author: Thomas Vander Stichele <thomas (at) apestaart (dot) org>
Date: Wed Apr 15 09:35:58 2009 +0000
* morituri/image/image.py:
* morituri/test/test_image_image.py:
AccurateRip binary files actually contain multiple responses, so
parse all of them.
* examples/ARcue.py:
Handle case of not having a response, and having multiple responses.
diff --git a/ChangeLog b/ChangeLog
index 515bfb4..762a57b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2009-04-15 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * morituri/image/image.py:
+ * morituri/test/test_image_image.py:
+ AccurateRip binary files actually contain multiple responses, so
+ parse all of them.
+ * examples/ARcue.py:
+ Handle case of not having a response, and having multiple responses.
+
2009-04-14 Thomas Vander Stichele <thomas at apestaart dot org>
* morituri/common/crc.py:
diff --git a/examples/ARcue.py b/examples/ARcue.py
index 8ebfca8..1e7e006 100644
--- a/examples/ARcue.py
+++ b/examples/ARcue.py
@@ -81,21 +81,61 @@ def main(argv):
print "AccurateRip URL", url
# FIXME: download url as a task too
- import urllib
- (filename, headers) = urllib.urlretrieve(url)
- data = open(filename, 'rb').read()
- os.unlink(filename)
- response = image.AccurateRipResponse(data)
+ responses = []
+ import urllib2
+ try:
+ handle = urllib2.urlopen(url)
+ data = handle.read()
+ responses = image.getAccurateRipResponses(data)
+ except urllib2.HTTPError, e:
+ if e.code == 404:
+ print 'Album not found in AccurateRip database'
+ else:
+ raise
+
+ if responses:
+ print '%d AccurateRip reponses found' % len(responses)
+
+ if responses[0].cddbDiscId != cueImage.getCDDBDiscId():
+ print "AccurateRip response discid different: %s" % \
+ responses[0].cddbDiscId
function(runner, verifytask)
function(runner, cuetask)
+ response = None
+
for i, crc in enumerate(cuetask.crcs):
- status = ' rip accurate '
- if "%08x" % crc != response.crcs[i]:
- status = '** rip not accurate **'
- print "Track %2d: %s (confidence %3d) mine [%08x] AR [%s]" % (
- i + 1, status, response.confidences[i], crc, response.crcs[i])
+ status = '** rip not accurate **'
+
+ confidence = None
+ arcrc = None
+
+ for j, r in enumerate(responses):
+ if "%08x" % crc == r.crcs[i]:
+ if not response:
+ response = r
+ else:
+ assert r == response, \
+ "CRC %s for %d matches wrong response %d, crc %s" % (
+ crc, i + 1, j + 1, response.crcs[i])
+ status = ' rip accurate '
+ arcrc = crc
+ confidence = response.confidences[i]
+
+ c = "(not found)"
+ ar = ""
+ if responses:
+ maxConfidence = max(r.confidences[i] for r in responses)
+
+ c = "(confidence %3d)" % maxConfidence
+ if confidence is not None:
+ if confidence < maxConfidence:
+ c = "(confidence %3d of %3d)" % (confidence, maxConfidence)
+
+ ar = " AR [%s]" % response.crcs[i]
+ print "Track %2d: %s %s mine [%08x] %s" % (
+ i + 1, status, c, crc, ar)
main(sys.argv)
diff --git a/morituri/image/image.py b/morituri/image/image.py
index fb3f3cd..c18fac4 100644
--- a/morituri/image/image.py
+++ b/morituri/image/image.py
@@ -319,6 +319,19 @@ class ImageVerifyTask(MultiTask):
MultiTask.stop(self)
+# FIXME: move this method to a different module ?
+def getAccurateRipResponses(data):
+ ret = []
+
+ while data:
+ trackCount = struct.unpack("B", data[0])[0]
+ bytes = 1 + 12 + trackCount * (1 + 8)
+
+ ret.append(AccurateRipResponse(data[:bytes]))
+ data = data[bytes:]
+
+ return ret
+
class AccurateRipResponse(object):
"""
I represent the response of the AccurateRip online database.
diff --git a/morituri/test/test_image_image.py b/morituri/test/test_image_image.py
index 7519a5a..ac45738 100644
--- a/morituri/test/test_image_image.py
+++ b/morituri/test/test_image_image.py
@@ -88,7 +88,12 @@ class AccurateRipResponseTestCase(unittest.TestCase):
path = os.path.join(os.path.dirname(__file__),
'dBAR-011-0010e284-009228a3-9809ff0b.bin')
data = open(path, "rb").read()
- response = image.AccurateRipResponse(data)
+
+ responses = image.getAccurateRipResponses(data)
+ self.assertEquals(len(responses), 3)
+
+
+ response = responses[0]
self.assertEquals(response.trackCount, 11)
self.assertEquals(response.discId1, "0010e284")
--
morituri packaging
More information about the pkg-multimedia-commits
mailing list