diff --git a/pandora/archive/extract.py b/pandora/archive/extract.py index 638aae5..dc0cba5 100644 --- a/pandora/archive/extract.py +++ b/pandora/archive/extract.py @@ -230,7 +230,7 @@ def run_command(cmd, timeout=10): return p.returncode -def frame(videoFile, frame, position, width=128, redo=False): +def frame(videoFile, frame, position, height=128, redo=False): ''' params: videoFile input @@ -243,7 +243,7 @@ def frame(videoFile, frame, position, width=128, redo=False): frameFolder = os.path.dirname(frame) if redo or not exists(frame): ox.makedirs(frameFolder) - cmd = ['oxframe', '-i', videoFile, '-o', frame, '-p', str(position), '-x', str(width)] + cmd = ['oxframe', '-i', videoFile, '-o', frame, '-p', str(position), '-y', str(height)] run_command(cmd) diff --git a/pandora/item/models.py b/pandora/item/models.py index 88f241c..9b213eb 100644 --- a/pandora/item/models.py +++ b/pandora/item/models.py @@ -676,16 +676,17 @@ class Item(models.Model): Video related functions ''' - def frame(self, position, width=128): + def frame(self, position, height=128): stream = self.streams.filter(profile=settings.VIDEO_PROFILE) if stream.count()>0: stream = stream[0] else: return None + height = min(height, stream.height()) path = os.path.join(settings.MEDIA_ROOT, self.path(), - 'frames', "%d"%width, "%s.jpg"%position) + 'frames', "%dp"%height, "%s.jpg"%position) if not os.path.exists(path): - extract.frame(stream.video.path, path, position, width) + extract.frame(stream.video.path, path, position, height) if not os.path.exists(path): path = os.path.join(settings.STATIC_ROOT, 'png/frame.broken.png') return path @@ -1091,6 +1092,9 @@ class Stream(models.Model): def path(self): return self.item.path(self.profile) + def height(self): + return int(self.profile.split('p')[0]) + def extract_derivatives(self): for profile in settings.VIDEO_DERIVATIVES: derivative, created = Stream.objects.get_or_create(profile=profile, item=self.item) diff --git a/pandora/item/urls.py b/pandora/item/urls.py index d24f145..c009498 100644 --- a/pandora/item/urls.py +++ b/pandora/item/urls.py @@ -6,7 +6,7 @@ from django.conf.urls.defaults import * urlpatterns = patterns("item.views", #frames - (r'^(?P[A-Z0-9].+)/frame(?P\d+)p(?P[\d\.]+)\.jpg$', 'frame'), + (r'^(?P[A-Z0-9].+)/(?P\d+)p(?P[\d\.]+)\.jpg$', 'frame'), #timelines (r'^(?P[A-Z0-9].+)/timeline(?P\d+)p(?P\d+)\.png$', 'timeline'), diff --git a/static/js/pandora/ui/item.js b/static/js/pandora/ui/item.js index c9c668e..693ddb1 100644 --- a/static/js/pandora/ui/item.js +++ b/static/js/pandora/ui/item.js @@ -26,7 +26,7 @@ pandora.ui.item = function() { var ratio = result.data.stream.aspectRatio, width = ratio > 1 ? size : Math.round(size * ratio), height = ratio > 1 ? Math.round(size / ratio) : size, - url = '/' + pandora.user.ui.item + '/frame' + size + 'p' + data['in'] + '.jpg'; + url = '/' + pandora.user.ui.item + '/' + size + 'p' + data['in'] + '.jpg'; return { height: height, id: data['id'], @@ -278,7 +278,7 @@ pandora.ui.item = function() { duration: video.duration, find: '', getFrameURL: function(position) { - return '/' + pandora.user.ui.item + '/frame' + video.height.toString() + 'p' + position.toString() + '.jpg'; + return '/' + pandora.user.ui.item + '/' + video.height.toString() + 'p' + position.toString() + '.jpg'; }, getLargeTimelineImageURL: function(i) { return '/' + pandora.user.ui.item + '/timeline64p' + i + '.png'; diff --git a/static/js/pandora/ui/list.js b/static/js/pandora/ui/list.js index 6a3a60b..ff51487 100644 --- a/static/js/pandora/ui/list.js +++ b/static/js/pandora/ui/list.js @@ -118,7 +118,7 @@ pandora.ui.list = function(view) { // fixme: remove view argument var ratio = data.aspectRatio, width = ratio > 1 ? size : Math.round(size * ratio), height = ratio > 1 ? Math.round(size / ratio) : size, - url = '/' + data.item + '/frame' + height + 'p' + data['in'] + '.jpg'; + url = '/' + data.item + '/' + height + 'p' + data['in'] + '.jpg'; return { height: height, id: data['id'],