Modified handling of audio packets for radio channels in remux.c

This commit is contained in:
Klaus Schmidinger 2005-08-26 13:37:42 +02:00
parent 449ffebcac
commit 0201f7cbf8
3 changed files with 16 additions and 15 deletions

View File

@ -977,6 +977,7 @@ Reinhard Nissl <rnissl@gmx.de>
immediately with softdevices
for fixing cDvbSpuBitmap::putPixel()
for implementing cAudioRepacker in remux.c
for modifying handling of audio packets for radio channels in remux.c
Richard Robson <richard_robson@beeb.net>
for reporting freezing replay if a timer starts while in Transfer Mode from the

View File

@ -3724,4 +3724,5 @@ Video Disk Recorder Revision History
dynamically detects the number of slots a CI provides.
- Implemented cAudioRepacker for better handling of audio PES packets (thanks to
Reinhard Nissl).
- Modified handling of audio packets for radio channels in remux.c (thanks to
Reinhard Nissl).

27
remux.c
View File

@ -11,7 +11,7 @@
* The cDolbyRepacker code was originally written by Reinhard Nissl <rnissl@gmx.de>,
* and adapted to the VDR coding style by Klaus.Schmidinger@cadsoft.de.
*
* $Id: remux.c 1.38 2005/08/26 13:34:07 kls Exp $
* $Id: remux.c 1.39 2005/08/26 13:35:53 kls Exp $
*/
#include "remux.h"
@ -1817,19 +1817,6 @@ uchar *cRemux::Get(int &Count, uchar *PictureType)
return resultBuffer->Get(Count);
#endif
// Special VPID case to enable recording radio channels:
if (isRadio) {
// XXX actually '0' should be enough, but '1' must be used with encrypted channels (driver bug?)
// XXX also allowing 0x1FFF to not break Michael Paar's original patch,
// XXX but it would probably be best to only use '0'
// Force syncing of radio channels to avoid "no useful data" error
synced = true;
if (PictureType)
*PictureType = I_FRAME;
return resultBuffer->Get(Count);
}
// Check for frame borders:
if (PictureType)
@ -1874,6 +1861,18 @@ uchar *cRemux::Get(int &Count, uchar *PictureType)
l = GetPacketLength(data, resultCount, i);
if (l < 0)
return resultData;
if (isRadio) {
if (!synced) {
if (PictureType)
*PictureType = I_FRAME;
resultSkipped = i; // will drop everything before this position
synced = true;
}
else if (Count)
return resultData;
else if (PictureType)
*PictureType = I_FRAME;
}
}
if (synced) {
if (!Count)