| 538 | } |
| 539 | |
| 540 | void FFMS_AudioSource::Seek() { |
| 541 | size_t TargetPacket = GetSeekablePacketNumber(Frames, PacketNumber); |
| 542 | LastValidTS = AV_NOPTS_VALUE; |
| 543 | |
| 544 | int Flags = Frames.HasTS ? AVSEEK_FLAG_BACKWARD : AVSEEK_FLAG_BACKWARD | AVSEEK_FLAG_BYTE; |
| 545 | |
| 546 | if (av_seek_frame(FormatContext, TrackNumber, FrameTS(TargetPacket), Flags) < 0) |
| 547 | av_seek_frame(FormatContext, TrackNumber, FrameTS(TargetPacket), Flags | AVSEEK_FLAG_ANY); |
| 548 | |
| 549 | if (TargetPacket != PacketNumber) { |
| 550 | // Decode until the PTS changes so we know where we are |
| 551 | int64_t LastPTS = FrameTS(PacketNumber); |
| 552 | while (LastPTS == FrameTS(PacketNumber)) DecodeNextBlock(); |
| 553 | } |
| 554 | } |
| 555 | |
| 556 | bool FFMS_AudioSource::ReadPacket(AVPacket *Packet) { |
| 557 | while (av_read_frame(FormatContext, Packet) >= 0) { |
nothing calls this directly
no outgoing calls
no test coverage detected