Given that the segfault is occurring at that line it is likely that m_device is either nullptr or, I suspect more likely, a value that was previously pointing at a valid object but is no longer.
In the debugger screenshot at post #3, in the top left, expand "this" and look for "m_device" to see its value. Zero? You can put a breakpoint here to see it on each pass.

The m_device member variable is set at construction of your DirectShowIOReader, and is valid for some period after that if it only fails on the second pass through readyRead(). The ownership and lifespan of the QIODevice object passed in needs to be considered... does it get deleted or go out of scope?

Another complication may be the use of threads here.