So I got my multi-channel video surveillance system running. Below is what it looks like, where each channel is an MSDKThread and an MFX session.
stage 0 stage 1 stage 2 stage 3 stage 4 stage 5
Channel 0: Bit-stream file -> Decode -> Video Pre-processing -> Activity detection -> (if detected) Encode -> Output bit-stream file
Channel (N-1): Bit-stream file -> Decode -> Video Pre-processing -> Activity detection -> (if detected) Encode -> Output bit-stream file
Both the decoders and encoders are MFX_CODEC_AVC and implemented with MSDK calls. Each channel has its own surface frame buffers.
There is one bug that puzzles me.
In single channel tests, if I test with channel 0, which has activities, the output bit-stream file records the scenes where activities happen, as expected. If I test with channel 1, which has no activity, the output bit-stream file is empty, as expected.
However, if I test with two channels simultaneously, channel 0's output bit-stream is not identical to that generated in the single channel test. Moreover, channel 1's output-stream file is no longer empty, but contains some seemingly random background.
Unfortunately, the two channels have the same background, so I can't easily tell whether channel 1 falsely records some frames from its own, or from channel 0.
Obviously, I need to test with two channels that have different backgrounds to confirm. But for saving time's sake, I am also posting my questions here: Is it possible, that after stage 1, channel 0's surface frame buffers could somehow get sent to channel 1, or vice versa? If so, what I need to do to prevent this from happening?
Hello Robby - If each of your channel is implemented as a separate session, such pollution should not occur. To ensure that, can you remove the activity detection stage from your pipeline and ensure each channel's output is correct when run concurrently?