Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2015-08-03 06:32:58 +0300
committerCampbell Barton <ideasman42@gmail.com>2015-08-03 07:01:24 +0300
commit88d63905a833a5e89c2860b10db43d1f7966594c (patch)
treee36633b1289f35a0a7f6b8e2d60275a6f4de640b /release
parent00857bec5299a0b3243779616b79581e8d6e13a2 (diff)
Fix T45644: bpy.utils.smpte_from_frame drops frame
D1444 by @lichtwerk, with minor fix & docstring updates
Diffstat (limited to 'release')
-rw-r--r--release/scripts/modules/bpy/utils/__init__.py59
1 files changed, 27 insertions, 32 deletions
diff --git a/release/scripts/modules/bpy/utils/__init__.py b/release/scripts/modules/bpy/utils/__init__.py
index 7a1224db226..481db4659af 100644
--- a/release/scripts/modules/bpy/utils/__init__.py
+++ b/release/scripts/modules/bpy/utils/__init__.py
@@ -377,46 +377,31 @@ def preset_paths(subdir):
def smpte_from_seconds(time, fps=None):
"""
- Returns an SMPTE formatted string from the time in seconds: "HH:MM:SS:FF".
+ Returns an SMPTE formatted string from the *time*:
+ ``HH:MM:SS:FF``.
If the *fps* is not given the current scene is used.
- """
- import math
-
- if fps is None:
- fps = _bpy.context.scene.render.fps
-
- hours = minutes = seconds = frames = 0
-
- if time < 0:
- time = - time
- neg = "-"
- else:
- neg = ""
-
- if time >= 3600.0: # hours
- hours = int(time / 3600.0)
- time = time % 3600.0
- if time >= 60.0: # minutes
- minutes = int(time / 60.0)
- time = time % 60.0
- seconds = int(time)
- frames = int(round(math.floor(((time - seconds) * fps))))
+ :arg time: time in seconds.
+ :type time: int, float or ``datetime.timedelta``.
+ :return: the frame string.
+ :rtype: string
+ """
- return "%s%02d:%02d:%02d:%02d" % (neg, hours, minutes, seconds, frames)
+ return smpte_from_frame(time_to_frame(time, fps=fps), fps)
def smpte_from_frame(frame, fps=None, fps_base=None):
"""
- Returns an SMPTE formatted string from the frame: "HH:MM:SS:FF".
+ Returns an SMPTE formatted string from the *frame*:
+ ``HH:MM:SS:FF``.
If *fps* and *fps_base* are not given the current scene is used.
- :arg time: time in seconds.
- :type time: number or timedelta object
- :return: the frame.
- :rtype: float
+ :arg frame: frame number.
+ :type frame: int or float.
+ :return: the frame string.
+ :rtype: string
"""
if fps is None:
@@ -425,7 +410,17 @@ def smpte_from_frame(frame, fps=None, fps_base=None):
if fps_base is None:
fps_base = _bpy.context.scene.render.fps_base
- return smpte_from_seconds((frame * fps_base) / fps, fps)
+ sign = "-" if frame < 0 else ""
+ frame = abs(frame * fps_base)
+
+ return (
+ "%s%02d:%02d:%02d:%02d" % (
+ sign,
+ int(frame / (3600 * fps)), # HH
+ int((frame / (60 * fps)) % 60), # MM
+ int((frame / fps) % 60), # SS
+ int(frame % fps), # FF
+ ))
def time_from_frame(frame, fps=None, fps_base=None):
@@ -435,7 +430,7 @@ def time_from_frame(frame, fps=None, fps_base=None):
If *fps* and *fps_base* are not given the current scene is used.
:arg frame: number.
- :type frame: the frame number
+ :type frame: int or float.
:return: the time in seconds.
:rtype: datetime.timedelta
"""
@@ -459,7 +454,7 @@ def time_to_frame(time, fps=None, fps_base=None):
If *fps* and *fps_base* are not given the current scene is used.
:arg time: time in seconds.
- :type time: number or a datetime.timedelta object
+ :type time: number or a ``datetime.timedelta`` object
:return: the frame.
:rtype: float
"""