From aed81816e73763ac3f8f26d4823d831c2e847fdf Mon Sep 17 00:00:00 2001
From: Adam Williamson <awilliam@redhat.com>
Date: Sat, 30 Aug 2014 14:33:08 -0700
Subject: [PATCH] firewirerecorder: use DTVRecorder for TS processing (fixes
MPEG-4)
This fixes https://code.mythtv.org/trac/ticket/10080 and reduces
code duplication into the bargain. I couldn't find a way to
factor out FirewireRecorder::ProcessTSPacket entirely, but this
turns it into a fairly thin wrapper around the
ProcessAudioTSPacket and ProcessVideoTSPacket functions in
DTVRecorder. ProcessVideoTSPacket handles MPEG-4 just fine. This
also seems to speed up initial lock. Tested with a DCX3400 on
Shaw (Vancouver) - both MPEG-2 and MPEG-4 channels work.
---
.../libs/libmythtv/recorders/firewirerecorder.cpp | 29 ++++++++--------------
1 file changed, 10 insertions(+), 19 deletions(-)
diff --git a/mythtv/libs/libmythtv/recorders/firewirerecorder.cpp b/mythtv/libs/libmythtv/recorders/firewirerecorder.cpp
index d7c6ae6..adff37f 100644
a
|
b
|
bool FirewireRecorder::ProcessTSPacket(const TSPacket &tspacket) |
154 | 154 | if (tspacket.HasAdaptationField()) |
155 | 155 | GetStreamData()->HandleAdaptationFieldControl(&tspacket); |
156 | 156 | |
157 | | if (tspacket.HasPayload()) |
158 | | { |
159 | | const unsigned int lpid = tspacket.PID(); |
| 157 | if (GetStreamData()->IsVideoPID(tspacket.PID())) |
| 158 | return ProcessVideoTSPacket(tspacket); |
160 | 159 | |
161 | | // Pass or reject packets based on PID, and parse info from them |
162 | | if (lpid == GetStreamData()->VideoPIDSingleProgram()) |
163 | | { |
164 | | _buffer_packets = !FindMPEG2Keyframes(&tspacket); |
165 | | BufferedWrite(tspacket); |
166 | | } |
167 | | else if (GetStreamData()->IsAudioPID(lpid)) |
168 | | { |
169 | | _buffer_packets = !FindAudioKeyframes(&tspacket); |
170 | | BufferedWrite(tspacket); |
171 | | } |
172 | | else if (GetStreamData()->IsListeningPID(lpid)) |
173 | | GetStreamData()->HandleTSTables(&tspacket); |
174 | | else if (GetStreamData()->IsWritingPID(lpid)) |
175 | | BufferedWrite(tspacket); |
176 | | } |
| 160 | if (GetStreamData()->IsAudioPID(tspacket.PID())) |
| 161 | return ProcessAudioTSPacket(tspacket); |
| 162 | |
| 163 | if (GetStreamData()->IsWritingPID(tspacket.PID())) |
| 164 | BufferedWrite(tspacket); |
| 165 | |
| 166 | if (GetStreamData()->IsListeningPID(tspacket.PID()) && tspacket.HasPayload()) |
| 167 | GetStreamData()->HandleTSTables(&tspacket); |
177 | 168 | |
178 | 169 | return true; |
179 | 170 | } |