[vdr] cReceiver vs cFilter and PTS questions

Udo Richter udo_richter at gmx.de
Fri Nov 4 17:23:12 CET 2005


Patrick Fischer wrote:
> void cMyReceiver::Receive(uchar *Data, int Length)
> {
>     int pid = ((Data[1] & 0x1f) << 8) | (Data[2]);
>     if (pid == m_VideoPid) {
>         uint8_t off = 0;
>         if (Data[3] & ADAPT_FIELD) {
>            off = Data[4] + 1;
>            }
>           printf("vpts : %fs\n",trans_pts_dts( (uint8_t*)(Data + 4 +
> off)+9)/90000.);
>    }
> }

>From standard, I miss the following checks:
- Is there payload in this TS packet?
- Does a new PES packet start with this TS packet?
  (payload_unit_start_indicator)
- Does the payload start with 00 00 01 PES header prefix?
- Does the stream_id refer to an A/V stream with full headers?
  (well, if VideoPid is valid, this should be expected)
- Is the PTS field present in the PES header?

With these assumptions, Data+4+off points to the PES header, and
PESheader+9 points to the PTS.

Cheers,

Udo




More information about the vdr mailing list