Fix percentage reporting
authorvijeth-aradhya <vijthaaa@gmail.com>
Thu, 10 Aug 2017 14:02:29 +0000 (19:32 +0530)
committervijeth-aradhya <vijthaaa@gmail.com>
Thu, 10 Aug 2017 14:25:00 +0000 (19:55 +0530)
Report transcoding_progress as the overall percent of all resolutions.
Modify Logging.

Closes #6

mediagoblin/db/models.py
mediagoblin/media_types/video/processing.py
mediagoblin/media_types/video/transcoders.py
mediagoblin/processing/__init__.py

index f4644b9ff9281b804427012893bea3f225a44a8f..cc06b12ff06ac92f46f27fdaa2a311e04c13030c 100644 (file)
@@ -25,7 +25,7 @@ import datetime
 
 from sqlalchemy import Column, Integer, Unicode, UnicodeText, DateTime, \
         Boolean, ForeignKey, UniqueConstraint, PrimaryKeyConstraint, \
-        SmallInteger, Date, types
+        SmallInteger, Date, types, Float
 from sqlalchemy.orm import relationship, backref, with_polymorphic, validates, \
         class_mapper
 from sqlalchemy.orm.collections import attribute_mapped_collection
@@ -542,7 +542,7 @@ class MediaEntry(Base, MediaEntryMixin, CommentingMixin):
     fail_error = Column(Unicode)
     fail_metadata = Column(JSONEncoded)
 
-    transcoding_progress = Column(SmallInteger)
+    transcoding_progress = Column(Float, default=0)
 
     queued_media_file = Column(PathTupleWithSlashes)
 
index 66363476cae3c66ce3749e35894979dffc7eec72..dc7264fc02eafd01d1c76277e0ad6604ffe5a53d 100644 (file)
@@ -341,7 +341,8 @@ class CommonVideoProcessor(MediaProcessor):
                                       vp8_threads=vp8_threads,
                                       vorbis_quality=vorbis_quality,
                                       progress_callback=progress_callback,
-                                      dimensions=tuple(medium_size))
+                                      dimensions=tuple(medium_size),
+                                      media_entry=self.entry)
             if self.transcoder.dst_data:
                 # Push transcoded video to public storage
                 _log.debug('Saving medium...')
index 2d3392f231d30efc268a4532c162daa2f6585db6..d94bf59fffd7e164b65cbe8145d83b70a2626ca9 100644 (file)
@@ -21,8 +21,10 @@ import sys
 import logging
 import multiprocessing
 
+from mediagoblin import mg_globals as mgg
 from mediagoblin.media_types.tools import discover
 from mediagoblin.tools.translate import lazy_pass_to_ugettext as _
+from .util import ACCEPTED_RESOLUTIONS
 
 #os.environ['GST_DEBUG'] = '4,python:4'
 
@@ -163,6 +165,9 @@ class VideoTranscoder(object):
         self.source_path = src
         self.destination_path = dst
 
+        # Get media entry
+        self.entry = kwargs.get('media_entry') or None
+
         # vp8enc options
         self.destination_dimensions = kwargs.get('dimensions', (640, 640))
         self.vp8_quality = kwargs.get('vp8_quality', 8)
@@ -184,6 +189,11 @@ class VideoTranscoder(object):
 
         self._progress_callback = kwargs.get('progress_callback') or None
 
+        # Get number of resolutions available for the video
+        video_config = mgg.global_config['plugins']['mediagoblin.media_types.video']     
+        self.num_of_resolutions = len(video_config['available_resolutions'])
+        self.progress_percentage = 0
+
         if not type(self.destination_dimensions) == tuple:
             raise Exception('dimensions must be tuple: (width, height)')
 
@@ -354,10 +364,16 @@ class VideoTranscoder(object):
                 # Update progress state if it has changed
                 (success, percent) = structure.get_int('percent')
                 if self.progress_percentage != percent and success:
+                    if self.progress_percentage > percent and percent == 0:
+                        percent = 100
+                    percent_increment = percent - self.progress_percentage
                     self.progress_percentage = percent
                     if self._progress_callback:
-                        self._progress_callback(percent)
-                    _log.info('{percent}% done...'.format(percent=percent))
+                        self._progress_callback(percent_increment/self.num_of_resolutions)
+                    _log.info('{percent}% of {dest} resolution done..'
+                              '.'.format(percent=percent, dest=self.destination_dimensions))
+                    _log.info('{0:.2f}% of all resolutions done'
+                              '...'.format(self.entry.transcoding_progress))
         elif message.type == Gst.MessageType.ERROR:
             _log.error('Got error: {0}'.format(message.parse_error()))
             self.dst_data = None
index 7d407a36700d5032d57a73d7ef533bce6b49d618..a9d5442b40abd7ee8d2289dbd25dc00468b9a378 100644 (file)
@@ -41,7 +41,10 @@ class ProgressCallback(object):
 
     def __call__(self, progress):
         if progress:
-            self.entry.transcoding_progress = progress
+            if 100 - (self.entry.transcoding_progress + progress) < 0.01:
+                self.entry.transcoding_progress = 100
+            else:
+                self.entry.transcoding_progress += progress
             self.entry.save()