Hi,
Dr. Werner Fink wrote:
On Mon, Mar 14, 2005 at 06:01:02PM +0100, Roland Praml wrote:
I've figured out if I replay the file with vdr, the bso(replay) thread doesn't start with newer recordings
And you have choosen the AC3 audio track during replay the recording with the green button? I've this question because this is the first report of that kind.
yes i've tested it several times. I've tracked down the problem a little bit. Data is sent to the plugin but the replay thread doesn't start because ScanPayOfPS1 fails.
I've commented out these two lines: case 0x0b: // if ((uint_16)dvb != AC3magic) // break; and now it works.
Hmmm ... this implies that the offset
off_t o = (off_t) (ul & 0x0000ffff) + 3;
is not correct because the stream is moved forward
dvb += o;
to the start of the magic word of the frame which should start there. As this works with stuff from DVD trailers I assume that something goes wrong elsewhere, e.g. in the cDolbyRepacker class.
[seeking VDR sources]
OK it _is_ a bug in the cDolbyRepacker class, therefore I've added Reinhard to CC.
IMHO the declaration of AppendSubStreamID includes an error:
void cDolbyRepacker::AppendSubStreamID(void) { if (subStreamId) { pesHeader[pesHeaderLen++] = subStreamId; pesHeader[pesHeaderLen++] = 0x00; pesHeader[pesHeaderLen++] = 0x00; pesHeader[pesHeaderLen++] = 0x00; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The minimal size is 0x01 and never 0x00 } }
... OK, in the firmware I've included a workaround for such broken sub audio header. Nevertheless this should be corrected :^) ... Reinhard?
Looks like you got me, Werner ;-)
I've just had a closer look into xine's sources (demux_mpeg_block.c) and it seems that my substream header is wrong most of the time.
Byte 0: substream id => correct Byte 1: number of AC3 frames starting in this PES packet => wrong Byte 2+3: offset to first AC3 frame relative to PES payload => wrong
As cDolbyRepacker assures that 1 frame is put into 1 PES packet, byte 1 should be 1 and byte 3 should be 4.
But what about extremely large AC3 frames, e. g. 1920 words = 3840 bytes. By assuring that PES packets don't get larger than 2048 bytes it can happen that such a PES packet contains just the "middle" of an AC3 frame. How should bytes 1 to 3 be set in such a case?
Bye.