File size: 1,881 Bytes
6755a2d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
from typing import List, Union, Callable

from copy import deepcopy

from .clip import ClipSeq
from .clip_process import reset_clipseq_id
import logging

logger = logging.getLogger(__name__)  # pylint: disable=invalid-name


# TODO: 不同类型的clip需要不同的融合方式
def fuse_clips(s1: ClipSeq, s2: ClipSeq) -> ClipSeq:
    """合并2个clip

    Args:
        s1 (Clip):
        s2 (Clip):

    Returns:
        Clip: 合并后Clip
    """
    if not isinstance(s2, list):
        s2 = [s2]
    s1 = deepcopy(s1)
    for other_clip in s2:
        s1.duration += other_clip.duration
        if s1.stage is not None and other_clip.stage is not None:
            # TODO:如何保留融合的clip信息
            s1.stage = "{}_{}".format(s1.stage, other_clip.stage)
            s1.origin_clipid.extend(other_clip.origin_clipid)
        if s1.timepoint_type is not None and other_clip.timepoint_type is not None:
            s1.timepoint_type = "{}_{}".format(
                s1.timepoint_type, other_clip.timepoint_type
            )
    return s1


# TODO: 不同的filter和fusion函数不适用同一种流程,待优化
class ClipSeqFusion(object):
    """_summary_

    Args:
        object (_type_): _description_
    """

    def __init__(self, filter: Callable, fuse_func: Callable = None) -> None:
        self.filter = filter
        self.fuse_func = fuse_func

    def __call__(self, clipseq: ClipSeq) -> ClipSeq:
        new_clipseq = []
        n_clipseq = len(clipseq)
        for i in range(n_clipseq):
            clip = clipseq[i]
            if self.filter(clip):
                new_clipseq.append(clip)
        new_clipseq = reset_clipseq_id(new_clipseq)
        logger.debug(
            "ClipSeqFilter: clipseq length before={}, after={}".format(
                n_clipseq, len(new_clipseq)
            )
        )
        return new_clipseq