oggmux has two pads A and B A receives buffer 1 B receives buffer 2 _collected is called buffer 1 is popped from A buffer 2 is popped from B need more buffers to process, so exit A receives buffer 3 B receives EOS _collected is called buffer 3 is popped from A, A is now ready for processing we try to pop from B, NULL is returned so we mark it as EOS'd and reduce active_pads, B is ready for processing we process A, using up buffer 1 active pads was reduced, and peek returns NULL for A (no waiting buffers, since we pulled it) and B (eos'd) we trigger a flush even though A isn't EOS'd