| 372 | } |
| 373 | |
| 374 | ReaderBase* AudioWaveformer::ResolveSourceReader(ReaderBase* source_reader) { |
| 375 | if (!source_reader) { |
| 376 | return nullptr; |
| 377 | } |
| 378 | |
| 379 | ReaderBase* current = source_reader; |
| 380 | while (true) { |
| 381 | if (auto clip = dynamic_cast<Clip*>(current)) { |
| 382 | current = clip->Reader(); |
| 383 | continue; |
| 384 | } |
| 385 | if (auto mapper = dynamic_cast<FrameMapper*>(current)) { |
| 386 | current = mapper->Reader(); |
| 387 | continue; |
| 388 | } |
| 389 | break; |
| 390 | } |
| 391 | return current; |
| 392 | } |
| 393 | |
| 394 | Fraction AudioWaveformer::ResolveSourceFPS(ReaderBase* source_reader) { |
| 395 | if (!source_reader) { |