Skip to content
This repository has been archived by the owner on Sep 20, 2024. It is now read-only.

Commit

Permalink
Merge pull request #3901 from pypeclub/feature/OP-3972_Flame-multicha…
Browse files Browse the repository at this point in the history
…nnel-workflow
  • Loading branch information
jakubjezek001 authored Sep 23, 2022
2 parents 28e59e8 + 68ef0e3 commit 4890e46
Show file tree
Hide file tree
Showing 4 changed files with 111 additions and 66 deletions.
6 changes: 3 additions & 3 deletions openpype/hosts/flame/api/lib.py
Original file line number Diff line number Diff line change
Expand Up @@ -766,11 +766,11 @@ class MediaInfoFile(object):
_drop_mode = None
_file_pattern = None

def __init__(self, path, **kwargs):
def __init__(self, path, logger=None):

# replace log if any
if kwargs.get("logger"):
self.log = kwargs["logger"]
if logger:
self.log = logger

# test if `dl_get_media_info` paht exists
self._validate_media_script_path()
Expand Down
160 changes: 103 additions & 57 deletions openpype/hosts/flame/api/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -678,6 +678,7 @@ class ClipLoader(LoaderPlugin):
`update` logic.
"""
log = log

options = [
qargparse.Boolean(
Expand All @@ -694,16 +695,20 @@ class OpenClipSolver(flib.MediaInfoFile):

log = log

def __init__(self, openclip_file_path, feed_data):
def __init__(self, openclip_file_path, feed_data, logger=None):
self.out_file = openclip_file_path

# replace log if any
if logger:
self.log = logger

# new feed variables:
feed_path = feed_data.pop("path")

# initialize parent class
super(OpenClipSolver, self).__init__(
feed_path,
**feed_data
logger=logger
)

# get other metadata
Expand Down Expand Up @@ -751,17 +756,18 @@ def _create_new_open_clip(self):
self.log.info("Building new openClip")
self.log.debug(">> self.clip_data: {}".format(self.clip_data))

# clip data comming from MediaInfoFile
tmp_xml_feeds = self.clip_data.find('tracks/track/feeds')
tmp_xml_feeds.set('currentVersion', self.feed_version_name)
for tmp_feed in tmp_xml_feeds:
tmp_feed.set('vuid', self.feed_version_name)
for tmp_xml_track in self.clip_data.iter("track"):
tmp_xml_feeds = tmp_xml_track.find('feeds')
tmp_xml_feeds.set('currentVersion', self.feed_version_name)

for tmp_feed in tmp_xml_track.iter("feed"):
tmp_feed.set('vuid', self.feed_version_name)

# add colorspace if any is set
if self.feed_colorspace:
self._add_colorspace(tmp_feed, self.feed_colorspace)
# add colorspace if any is set
if self.feed_colorspace:
self._add_colorspace(tmp_feed, self.feed_colorspace)

self._clear_handler(tmp_feed)
self._clear_handler(tmp_feed)

tmp_xml_versions_obj = self.clip_data.find('versions')
tmp_xml_versions_obj.set('currentVersion', self.feed_version_name)
Expand All @@ -774,6 +780,17 @@ def _create_new_open_clip(self):

self.write_clip_data_to_file(self.out_file, self.clip_data)

def _get_xml_track_obj_by_uid(self, xml_data, uid):
# loop all tracks of input xml data
for xml_track in xml_data.iter("track"):
track_uid = xml_track.get("uid")
self.log.debug(
">> track_uid:uid: {}:{}".format(track_uid, uid))

# get matching uids
if uid == track_uid:
return xml_track

def _update_open_clip(self):
self.log.info("Updating openClip ..")

Expand All @@ -783,52 +800,81 @@ def _update_open_clip(self):
self.log.debug(">> out_xml: {}".format(out_xml))
self.log.debug(">> self.clip_data: {}".format(self.clip_data))

# Get new feed from tmp file
tmp_xml_feed = self.clip_data.find('tracks/track/feeds/feed')

self._clear_handler(tmp_xml_feed)

# update fps from MediaInfoFile class
if self.fps:
tmp_feed_fps_obj = tmp_xml_feed.find(
"startTimecode/rate")
tmp_feed_fps_obj.text = str(self.fps)

# update start_frame from MediaInfoFile class
if self.start_frame:
tmp_feed_nb_ticks_obj = tmp_xml_feed.find(
"startTimecode/nbTicks")
tmp_feed_nb_ticks_obj.text = str(self.start_frame)

# update drop_mode from MediaInfoFile class
if self.drop_mode:
tmp_feed_drop_mode_obj = tmp_xml_feed.find(
"startTimecode/dropMode")
tmp_feed_drop_mode_obj.text = str(self.drop_mode)

new_path_obj = tmp_xml_feed.find(
"spans/span/path")
new_path = new_path_obj.text

feed_added = False
if not self._feed_exists(out_xml, new_path):
tmp_xml_feed.set('vuid', self.feed_version_name)
# Append new temp file feed to .clip source out xml
out_track = out_xml.find("tracks/track")
# add colorspace if any is set
if self.feed_colorspace:
self._add_colorspace(tmp_xml_feed, self.feed_colorspace)

out_feeds = out_track.find('feeds')
out_feeds.set('currentVersion', self.feed_version_name)
out_feeds.append(tmp_xml_feed)

self.log.info(
"Appending new feed: {}".format(
self.feed_version_name))
feed_added = True

if feed_added:
# loop tmp tracks
updated_any = False
for tmp_xml_track in self.clip_data.iter("track"):
# get tmp track uid
tmp_track_uid = tmp_xml_track.get("uid")
self.log.debug(">> tmp_track_uid: {}".format(tmp_track_uid))

# get out data track by uid
out_track_element = self._get_xml_track_obj_by_uid(
out_xml, tmp_track_uid)
self.log.debug(
">> out_track_element: {}".format(out_track_element))

# loop tmp feeds
for tmp_xml_feed in tmp_xml_track.iter("feed"):
new_path_obj = tmp_xml_feed.find(
"spans/span/path")
new_path = new_path_obj.text

# check if feed path already exists in track's feeds
if (
out_track_element is not None
and self._feed_exists(out_track_element, new_path)
):
continue

# rename versions on feeds
tmp_xml_feed.set('vuid', self.feed_version_name)
self._clear_handler(tmp_xml_feed)

# update fps from MediaInfoFile class
if self.fps is not None:
tmp_feed_fps_obj = tmp_xml_feed.find(
"startTimecode/rate")
tmp_feed_fps_obj.text = str(self.fps)

# update start_frame from MediaInfoFile class
if self.start_frame is not None:
tmp_feed_nb_ticks_obj = tmp_xml_feed.find(
"startTimecode/nbTicks")
tmp_feed_nb_ticks_obj.text = str(self.start_frame)

# update drop_mode from MediaInfoFile class
if self.drop_mode is not None:
tmp_feed_drop_mode_obj = tmp_xml_feed.find(
"startTimecode/dropMode")
tmp_feed_drop_mode_obj.text = str(self.drop_mode)

# add colorspace if any is set
if self.feed_colorspace is not None:
self._add_colorspace(tmp_xml_feed, self.feed_colorspace)

# then append/update feed to correct track in output
if out_track_element:
self.log.debug("updating track element ..")
# update already present track
out_feeds = out_track_element.find('feeds')
out_feeds.set('currentVersion', self.feed_version_name)
out_feeds.append(tmp_xml_feed)

self.log.info(
"Appending new feed: {}".format(
self.feed_version_name))
else:
self.log.debug("adding new track element ..")
# create new track as it doesnt exists yet
# set current version to feeds on tmp
tmp_xml_feeds = tmp_xml_track.find('feeds')
tmp_xml_feeds.set('currentVersion', self.feed_version_name)
out_tracks = out_xml.find("tracks")
out_tracks.append(tmp_xml_track)

updated_any = True

if updated_any:
# Append vUID to versions
out_xml_versions_obj = out_xml.find('versions')
out_xml_versions_obj.set(
Expand Down
6 changes: 3 additions & 3 deletions openpype/hosts/flame/plugins/load/load_clip.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import openpype.hosts.flame.api as opfapi
from openpype.lib import StringTemplate


class LoadClip(opfapi.ClipLoader):
"""Load a subset to timeline as clip
Expand Down Expand Up @@ -60,16 +61,15 @@ def load(self, context, name, namespace, options):
"path": self.fname.replace("\\", "/"),
"colorspace": colorspace,
"version": "v{:0>3}".format(version_name),
"logger": self.log

}
self.log.debug(pformat(
loading_context
))
self.log.debug(openclip_path)

# make openpype clip file
opfapi.OpenClipSolver(openclip_path, loading_context).make()
opfapi.OpenClipSolver(
openclip_path, loading_context, logger=self.log).make()

# prepare Reel group in actual desktop
opc = self._get_clip(
Expand Down
5 changes: 2 additions & 3 deletions openpype/hosts/flame/plugins/load/load_clip_batch.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,16 +64,15 @@ def load(self, context, name, namespace, options):
"path": self.fname.replace("\\", "/"),
"colorspace": colorspace,
"version": "v{:0>3}".format(version_name),
"logger": self.log

}
self.log.debug(pformat(
loading_context
))
self.log.debug(openclip_path)

# make openpype clip file
opfapi.OpenClipSolver(openclip_path, loading_context).make()
opfapi.OpenClipSolver(
openclip_path, loading_context, logger=self.log).make()

# prepare Reel group in actual desktop
opc = self._get_clip(
Expand Down

0 comments on commit 4890e46

Please sign in to comment.