[mythtv] [Experimental PATCH] BIG DVB PATCH V3.2 Released

Tj htpc at treblid.dyndns.org
Mon Dec 20 16:01:03 UTC 2004


Marcus Metzler wrote:

>AC3 in an MPEG stream, either trnsport or program stream, is packaged
>in private stream 1 PES packets. Those start with 0x00 0x00 0x01 0xbd
>
>There are private streams for AC3, LPCM and DTS are defined by the DVD
>specifications. They call for an additional header inside the PES
>payload (not the PES header). For AC3 it is a for byte header
>containing the AC3 id (0x80 - 0x87), the number of AC3 frames in the
>payload ( 1 byte) and a two byte pointer pointing to the first frame
>in the payload.
>  
>
Damn. It's clearer after I looked at your email and look at code again. 
I'm sorta preparing for my holiday so I can't work on this anymore (and 
I got AC3 unorthodoxically working anyway).. :( I am getting long winded 
again.. :(

One more question, if you don't mind and have the time to teach me. 
Could there a spec diff as to how AC3 audio is "packaged" in ATSC and 
DVB? Or, as I begin to realise finally, my system is somehow  f**ked up 
and designed to torture/kill me?

in libs/libavformat/mpeg.c approx line: 1461 in function 
mpegps_read_pes_header does exactly what you mentioned.

    if (startcode == 0x1bd) {
        if (len < 1)
            goto redo;
        startcode = get_byte(&s->pb);
        len--;
        if (startcode >= 0x80 && startcode <= 0xbf) {
            // audio: skip header
            if (len < 3)
                goto redo;
            get_byte(&s->pb);
            get_byte(&s->pb);
            get_byte(&s->pb);
            len -= 3;
        }
    }

For my broadcasts, what immediately comes after 0x00 0x00 0x00 0xbd is 
not 0x80. It's some arbitary number which follows no apparant pattern to 
me..

There will be a problem for me if I call "startcode = get_byte 
(&s->pb)", decrement the len var and then realised I did not get the 
range I want. because at the end of this function, I assign pstart_code 
to whatever comes after 0x00 0x00 0x00 0xbd, which appears to be random 
(not tested throughly).

Everything else in myth expects a 0x80 after 0x00 0x00 0x00 0xbd, but my 
mythbox doesn't do that, causing mythfrontend to crash as it's not 
expecting that as a startcode.

Without seeing 0x80, I can't really be sure that the private stream I'm 
handling is actually AC3 rite? How save is it to skip this block of 
code? (as I am trying to figure how to prevent audio buffer underrun 
issues when I switch channels between different codecs)

Is this a computer hardware, TV antenna issue or software issue? Is this 
a bad packet caused by a faulty/lousy antenna?

I am having clear reception in all SDTV channels.. (HDTV video is 
breaking up occasionally).


Regards.







More information about the mythtv-dev mailing list