Px4Receiver ISDB_T の Open順序によって Drop が発生することがある問題を修正 #2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
概要
PLEX PX-W3/Q3など、受信時に Px4Receiver を使うデバイスにおいて ISDB-T Receiver の Open 順序が不定になっていました。
このため最初に開かれたチューナーが T1 の場合、 T1 -> T0 ドロップ対策が働かないようで、PX-W3PE5 では 30~40のドロップが発生していました。
必ず T0 から開くことでドロップしないように変更しています。
詳細
px4::ReceiverManager::SearchAndOpen()
で、std::unordered_map<px4::ReceiverBase*, ReceiverData> data_
をイテレートし、最初に見つかった ReceiverBase を Open しています。Px4Device::Init()
では S0, S1, T0, T1 の順にReceiverManager::Register()
していますが、unordered_map
を使っているためイテレートの順序は不定でした。unordered_map
ではなくmap
を使うことで必ず T0, T1 の順に Open されるようにしています。テスト
DebugView を実行しながら TVTest を使ってキャプチャし、
のように Open(2) が最初に出力されることを確認しています。
変更前は Open(3) が最初に出力されることがあり、この状況でもう一つチューナーを開くと1つ目のチューナーにドロップが発生していました。
また、EDCB による多重録画も10回程度実行して影響がないことを確認しています。
手持ちのデバイスが PX-W3PE5 しかないので、MLT 系については確認できていません。
チューナーの使用順序が固定化されるだけで悪い影響はなさそうに思います。