| 135 | } |
| 136 | |
| 137 | void ProcessAudioOverlapsScaledEnd(int64_t originFileDuration, int64_t fileDuration, |
| 138 | int64_t audioStartTime, int64_t audioDuration, |
| 139 | TimeRange& scaledTimeRange, std::vector<AudioClip>& clips, |
| 140 | std::shared_ptr<AudioSource> source) { |
| 141 | auto audioEndTime = audioStartTime + audioDuration; |
| 142 | |
| 143 | if (fileDuration > scaledTimeRange.start) { |
| 144 | auto minDuration = originFileDuration - scaledTimeRange.duration(); |
| 145 | auto offset = std::max(minDuration, fileDuration) - originFileDuration; |
| 146 | auto scaledTargetEnd = scaledTimeRange.end + offset; |
| 147 | |
| 148 | if (fileDuration > minDuration) { |
| 149 | auto targetStart = scaledTargetEnd - (scaledTimeRange.end - audioStartTime) * |
| 150 | (fileDuration - minDuration) / |
| 151 | scaledTimeRange.duration(); |
| 152 | auto sourceTimeRange = TimeRange{0, scaledTimeRange.end - audioStartTime}; |
| 153 | auto targetTimeRange = TimeRange{targetStart, scaledTargetEnd}; |
| 154 | auto clip = AudioClip(source, sourceTimeRange, targetTimeRange); |
| 155 | clips.push_back(clip); |
| 156 | } |
| 157 | |
| 158 | auto audioTargetEnd = audioEndTime + offset; |
| 159 | auto sourceTimeRange = TimeRange{scaledTimeRange.end - audioStartTime, audioDuration}; |
| 160 | auto targetTimeRange = TimeRange{scaledTargetEnd, audioTargetEnd}; |
| 161 | auto clip = AudioClip(source, sourceTimeRange, targetTimeRange); |
| 162 | clips.push_back(clip); |
| 163 | } |
| 164 | } |
| 165 | |
| 166 | } // namespace pag |
no test coverage detected