FastLED 3.9.15
Loading...
Searching...
No Matches

◆ plm_demux_decode_packet()

plm_packet_t * fl::third_party::plm_demux_decode_packet ( plm_demux_t * self,
int type )

Definition at line 1567 of file pl_mpeg.hpp.

1567 {
1568 if (!plm_buffer_has(self->buffer, 16 << 3)) {
1569 return NULL;
1570 }
1571
1572 self->start_code = -1;
1573
1574 self->next_packet.type = type;
1575 self->next_packet.length = plm_buffer_read(self->buffer, 16);
1576 self->next_packet.length -= plm_buffer_skip_bytes(self->buffer, 0xff); // stuffing
1577
1578 // skip P-STD
1579 if (plm_buffer_read(self->buffer, 2) == 0x01) {
1580 plm_buffer_skip(self->buffer, 16);
1581 self->next_packet.length -= 2;
1582 }
1583
1584 int pts_dts_marker = plm_buffer_read(self->buffer, 2);
1585 if (pts_dts_marker == 0x03) {
1587 self->last_decoded_pts = self->next_packet.pts;
1588 plm_buffer_skip(self->buffer, 40); // skip dts
1589 self->next_packet.length -= 10;
1590 }
1591 else if (pts_dts_marker == 0x02) {
1593 self->last_decoded_pts = self->next_packet.pts;
1594 self->next_packet.length -= 5;
1595 }
1596 else if (pts_dts_marker == 0x00) {
1598 plm_buffer_skip(self->buffer, 4);
1599 self->next_packet.length -= 1;
1600 }
1601 else {
1602 return NULL; // invalid
1603 }
1604
1605 return plm_demux_get_packet(self);
1606}
#define NULL
double plm_demux_decode_time(plm_demux_t *self) FL_NOEXCEPT
Definition pl_mpeg.hpp:1557
int plm_buffer_skip_bytes(plm_buffer_t *self, uint8_t v) FL_NOEXCEPT
Definition pl_mpeg.hpp:1050
plm_packet_t * plm_demux_get_packet(plm_demux_t *self) FL_NOEXCEPT
Definition pl_mpeg.hpp:1608
int plm_buffer_read(plm_buffer_t *self, int count) FL_NOEXCEPT
Definition pl_mpeg.hpp:1017
int plm_buffer_has(plm_buffer_t *self, size_t count) FL_NOEXCEPT
Definition pl_mpeg.hpp:998
void plm_buffer_skip(plm_buffer_t *self, size_t count) FL_NOEXCEPT
Definition pl_mpeg.hpp:1044
#define PLM_PACKET_INVALID_TS
Definition pl_mpeg.h:171

References FL_NOEXCEPT, NULL, plm_buffer_has(), plm_buffer_read(), plm_buffer_skip(), plm_buffer_skip_bytes(), plm_demux_decode_time(), plm_demux_get_packet(), and PLM_PACKET_INVALID_TS.

Referenced by plm_demux_decode(), and plm_demux_seek().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: