Fix T65398 - Fix frame rate base use in Python SMPTE functions

Differential Revision: https://developer.blender.org/D5064

Reviewed By: brecht
This commit is contained in:
2019-06-19 10:49:37 -07:00
parent f47c9ad96f
commit da83f70754

View File

@@ -450,12 +450,12 @@ def preset_paths(subdir):
return dirs
def smpte_from_seconds(time, fps=None):
def smpte_from_seconds(time, fps=None, fps_base=None):
"""
Returns an SMPTE formatted string from the *time*:
``HH:MM:SS:FF``.
If the *fps* is not given the current scene is used.
If *fps* and *fps_base* are not given the current scene is used.
:arg time: time in seconds.
:type time: int, float or ``datetime.timedelta``.
@@ -463,7 +463,11 @@ def smpte_from_seconds(time, fps=None):
:rtype: string
"""
return smpte_from_frame(time_to_frame(time, fps=fps), fps)
return smpte_from_frame(
time_to_frame(time, fps=fps, fps_base=fps_base),
fps=fps,
fps_base=fps_base
)
def smpte_from_frame(frame, fps=None, fps_base=None):
@@ -485,8 +489,9 @@ def smpte_from_frame(frame, fps=None, fps_base=None):
if fps_base is None:
fps_base = _bpy.context.scene.render.fps_base
fps = fps / fps_base
sign = "-" if frame < 0 else ""
frame = abs(frame * fps_base)
frame = abs(frame)
return (
"%s%02d:%02d:%02d:%02d" % (
@@ -516,9 +521,11 @@ def time_from_frame(frame, fps=None, fps_base=None):
if fps_base is None:
fps_base = _bpy.context.scene.render.fps_base
fps = fps / fps_base
from datetime import timedelta
return timedelta(0, (frame * fps_base) / fps)
return timedelta(0, frame / fps)
def time_to_frame(time, fps=None, fps_base=None):
@@ -540,12 +547,14 @@ def time_to_frame(time, fps=None, fps_base=None):
if fps_base is None:
fps_base = _bpy.context.scene.render.fps_base
fps = fps / fps_base
from datetime import timedelta
if isinstance(time, timedelta):
time = time.total_seconds()
return (time / fps_base) * fps
return time * fps
def preset_find(name, preset_path, display_name=False, ext=".py"):