Soweit ich es durchblicke, liegt das eigentliche Problem darin, dass nur 0 oder EAGAIN als Rückgabe von avcodec_send_packet() behandelt werden.
Genau das soll ja so sein. Bisher wurde jeder Fehler wie EAGAIN behandelt und das kaputte Packet mehrfach zum Decoder geschickt. Jetzt wird bei einem kaputtem Packet dieses Packet verworfen und das nächste Packet genommen. Ist das auch kaputt wird es auch verworfen. Der Decodethread soll weiterlaufen!
Edit: Kannst Du mal ein bt full machen um rauszukriegen voher das segfault nach Strg-C kommt?