This time the demuxer uses es_out_Send(...., NULL) on EOF. When es_out.c/EsOutSend() sees a NULL block it creates an empty block with private flag BLOCK_FLAG_EOS which is sent to the decoder thread.