Indentation fixes (remoevd hard tabs).

This commit is contained in:
Kai Sommerfeld 2014-08-23 12:11:16 +02:00 committed by Jaroslav Kysela
parent 8989eb0c9c
commit 2090495244

View file

@ -37,25 +37,25 @@
#define PTS_MASK 0x1ffffffffLL
//#define PTS_MASK 0x7ffffLL
#define getu32(b, l) ({ \
uint32_t x = (b[0] << 24 | b[1] << 16 | b[2] << 8 | b[3]); \
b+=4; \
l-=4; \
x; \
#define getu32(b, l) ({ \
uint32_t x = (b[0] << 24 | b[1] << 16 | b[2] << 8 | b[3]); \
b+=4; \
l-=4; \
x; \
})
#define getu16(b, l) ({ \
uint16_t x = (b[0] << 8 | b[1]); \
b+=2; \
l-=2; \
x; \
#define getu16(b, l) ({ \
uint16_t x = (b[0] << 8 | b[1]); \
b+=2; \
l-=2; \
x; \
})
#define getu8(b, l) ({ \
uint8_t x = b[0]; \
b+=1; \
l-=1; \
x; \
#define getu8(b, l) ({ \
uint8_t x = b[0]; \
b+=1; \
l-=1; \
x; \
})
@ -82,55 +82,55 @@ getpts(const uint8_t *p)
static int parse_mpeg2video(service_t *t, elementary_stream_t *st, size_t len,
uint32_t next_startcode, int sc_offset);
uint32_t next_startcode, int sc_offset);
static int parse_h264(service_t *t, elementary_stream_t *st, size_t len,
uint32_t next_startcode, int sc_offset);
uint32_t next_startcode, int sc_offset);
typedef int (packet_parser_t)(service_t *t, elementary_stream_t *st, size_t len,
uint32_t next_startcode, int sc_offset);
uint32_t next_startcode, int sc_offset);
typedef void (aparser_t)(service_t *t, elementary_stream_t *st, th_pkt_t *pkt);
static void parse_sc(service_t *t, elementary_stream_t *st, const uint8_t *data,
int len, packet_parser_t *vp);
int len, packet_parser_t *vp);
static void parse_aac(service_t *t, elementary_stream_t *st, const uint8_t *data,
int len, int start);
int len, int start);
static void parse_subtitles(service_t *t, elementary_stream_t *st,
const uint8_t *data, int len, int start);
const uint8_t *data, int len, int start);
static void parse_teletext(service_t *t, elementary_stream_t *st,
const uint8_t *data, int len, int start);
const uint8_t *data, int len, int start);
static int parse_mpa(service_t *t, elementary_stream_t *st, size_t len,
uint32_t next_startcode, int sc_offset);
uint32_t next_startcode, int sc_offset);
static int parse_mpa2(service_t *t, elementary_stream_t *st);
static int parse_ac3(service_t *t, elementary_stream_t *st, size_t len,
uint32_t next_startcode, int sc_offset);
uint32_t next_startcode, int sc_offset);
static int parse_eac3(service_t *t, elementary_stream_t *st, size_t len,
uint32_t next_startcode, int sc_offset);
uint32_t next_startcode, int sc_offset);
static int parse_mp4a(service_t *t, elementary_stream_t *st, size_t ilen,
uint32_t next_startcode, int sc_offset);
uint32_t next_startcode, int sc_offset);
static void parser_deliver(service_t *t, elementary_stream_t *st, th_pkt_t *pkt,
int errors);
int errors);
static int parse_pes_header(service_t *t, elementary_stream_t *st,
const uint8_t *buf, size_t len);
const uint8_t *buf, size_t len);
/**
* Parse raw mpeg data
*/
void
parse_mpeg_ts(service_t *t, elementary_stream_t *st, const uint8_t *data,
int len, int start, int err)
int len, int start, int err)
{
if(err)
@ -222,7 +222,7 @@ parse_mpeg_ps(service_t *t, elementary_stream_t *st, uint8_t *data, int len)
*/
static void
parse_aac(service_t *t, elementary_stream_t *st, const uint8_t *data,
int len, int start)
int len, int start)
{
int l, muxlen, p;
th_pkt_t *pkt;
@ -239,21 +239,19 @@ parse_aac(service_t *t, elementary_stream_t *st, const uint8_t *data,
sbuf_append(&st->es_buf, data, len);
if(st->es_parser_ptr == 0) {
int hlen;
if(st->es_buf.sb_ptr < 9)
return;
hlen = parse_pes_header(t, st,
st->es_buf.sb_data + 6, st->es_buf.sb_ptr - 6);
hlen = parse_pes_header(t, st,
st->es_buf.sb_data + 6, st->es_buf.sb_ptr - 6);
if(hlen < 0)
return;
st->es_parser_ptr += 6 + hlen;
}
p = st->es_parser_ptr;
while((l = st->es_buf.sb_ptr - p) > 3) {
@ -262,12 +260,12 @@ parse_aac(service_t *t, elementary_stream_t *st, const uint8_t *data,
muxlen = (d[1] & 0x1f) << 8 | d[2];
if(l < muxlen + 3)
break;
break;
pkt = parse_latm_audio_mux_element(t, st, d + 3, muxlen);
if(pkt != NULL)
parser_deliver(t, st, pkt, st->es_buf.sb_err);
parser_deliver(t, st, pkt, st->es_buf.sb_err);
p += muxlen + 3;
} else {
@ -286,70 +284,68 @@ parse_aac(service_t *t, elementary_stream_t *st, const uint8_t *data,
*/
static void
parse_sc(service_t *t, elementary_stream_t *st, const uint8_t *data, int len,
packet_parser_t *vp)
packet_parser_t *vp)
{
uint32_t sc = st->es_startcond;
int i, r;
sbuf_alloc(&st->es_buf, len);
for(i = 0; i < len; i++) {
if(st->es_ssc_intercept == 1) {
if(st->es_ssc_ptr < sizeof(st->es_ssc_buf))
st->es_ssc_buf[st->es_ssc_ptr] = data[i];
st->es_ssc_buf[st->es_ssc_ptr] = data[i];
st->es_ssc_ptr++;
if(st->es_ssc_ptr < 5)
continue;
continue;
uint16_t plen = st->es_ssc_buf[0] << 8 | st->es_ssc_buf[1];
st->es_incomplete = plen >= 0xffdf;
int hlen = st->es_ssc_buf[4];
if(st->es_ssc_ptr < hlen + 5)
continue;
continue;
parse_pes_header(t, st, st->es_ssc_buf + 2, hlen + 3);
st->es_ssc_intercept = 0;
if(st->es_buf.sb_ptr > 2)
sc = st->es_buf.sb_data[st->es_buf.sb_ptr-3] << 16 |
st->es_buf.sb_data[st->es_buf.sb_ptr-2] << 8 |
st->es_buf.sb_data[st->es_buf.sb_ptr-1];
sc = st->es_buf.sb_data[st->es_buf.sb_ptr-3] << 16 |
st->es_buf.sb_data[st->es_buf.sb_ptr-2] << 8 |
st->es_buf.sb_data[st->es_buf.sb_ptr-1];
continue;
}
st->es_buf.sb_data[st->es_buf.sb_ptr++] = data[i];
sc = sc << 8 | data[i];
if((sc & 0xffffff00) != 0x00000100)
continue;
if(sc == 0x100 && (len-i)>3) {
uint32_t tempsc = data[i+1] << 16 | data[i+2] << 8 | data[i+3];
uint32_t tempsc = data[i+1] << 16 | data[i+2] << 8 | data[i+3];
if(tempsc == 0x1e0)
continue;
if(tempsc == 0x1e0)
continue;
}
r = st->es_buf.sb_ptr - st->es_startcode_offset - 4;
if(r > 0 && st->es_startcode != 0) {
r = vp(t, st, r, sc, st->es_startcode_offset);
if(r == 3)
continue;
continue;
if(r == 4) {
st->es_buf.sb_ptr -= 4;
st->es_ssc_intercept = 1;
st->es_ssc_ptr = 0;
sc = -1;
continue;
st->es_buf.sb_ptr -= 4;
st->es_ssc_intercept = 1;
st->es_ssc_ptr = 0;
sc = -1;
continue;
}
} else {
} else
r = 1;
}
if(r == 2) {
assert(st->es_buf.sb_data != NULL);
@ -365,13 +361,13 @@ parse_sc(service_t *t, elementary_stream_t *st, const uint8_t *data, int len,
} else {
if(r == 1) {
/* Reset packet parser upon length error or if parser
tells us so */
sbuf_reset_and_alloc(&st->es_buf, 256);
st->es_buf.sb_data[st->es_buf.sb_ptr++] = sc >> 24;
st->es_buf.sb_data[st->es_buf.sb_ptr++] = sc >> 16;
st->es_buf.sb_data[st->es_buf.sb_ptr++] = sc >> 8;
st->es_buf.sb_data[st->es_buf.sb_ptr++] = sc;
/* Reset packet parser upon length error or if parser
tells us so */
sbuf_reset_and_alloc(&st->es_buf, 256);
st->es_buf.sb_data[st->es_buf.sb_ptr++] = sc >> 24;
st->es_buf.sb_data[st->es_buf.sb_ptr++] = sc >> 16;
st->es_buf.sb_data[st->es_buf.sb_ptr++] = sc >> 8;
st->es_buf.sb_data[st->es_buf.sb_ptr++] = sc;
}
assert(st->es_buf.sb_data != NULL);
st->es_startcode = sc;
@ -387,7 +383,7 @@ parse_sc(service_t *t, elementary_stream_t *st, const uint8_t *data, int len,
*/
static int
depacketize(service_t *t, elementary_stream_t *st, size_t len,
uint32_t next_startcode, int sc_offset)
uint32_t next_startcode, int sc_offset)
{
const uint8_t *buf = st->es_buf.sb_data + sc_offset;
uint32_t sc = st->es_startcode;
@ -422,26 +418,24 @@ depacketize(service_t *t, elementary_stream_t *st, size_t len,
}
/**
*
*/
static void
makeapkt(service_t *t, elementary_stream_t *st, const void *buf,
int len, int64_t dts, int duration, int channels, int sri,
int errors)
int len, int64_t dts, int duration, int channels, int sri,
int errors)
{
th_pkt_t *pkt = pkt_alloc(buf, len, dts, dts);
pkt->pkt_commercial = t->s_tt_commercial_advice;
pkt->pkt_duration = duration;
pkt->pkt_channels = channels;
pkt->pkt_sri = sri;
parser_deliver(t, st, pkt, errors);
st->es_curdts = PTS_UNSET;
st->es_nextdts = dts + duration;
}
@ -450,20 +444,20 @@ makeapkt(service_t *t, elementary_stream_t *st, const void *buf,
* Parse AAC MP4A
*/
static const int aac_sample_rates[12] =
{
96000,
88200,
64000,
48000,
44100,
32000,
24000,
22050,
16000,
12000,
11025,
8000
static const int aac_sample_rates[12] =
{
96000,
88200,
64000,
48000,
44100,
32000,
24000,
22050,
16000,
12000,
11025,
8000
};
/**
@ -476,7 +470,7 @@ mp4a_valid_frame(const uint8_t *buf)
}
static int parse_mp4a(service_t *t, elementary_stream_t *st, size_t ilen,
uint32_t next_startcode, int sc_offset)
uint32_t next_startcode, int sc_offset)
{
int i, len;
const uint8_t *buf;
@ -496,31 +490,30 @@ static int parse_mp4a(service_t *t, elementary_stream_t *st, size_t ilen,
int sr_index = (p[2] & 0x3c) >> 2;
int sr = aac_sample_rates[sr_index];
if(sr && fsize) {
int duration = 90000 * 1024 / sr;
int64_t dts = st->es_curdts;
int sri = rate_to_sri(sr);
int duration = 90000 * 1024 / sr;
int64_t dts = st->es_curdts;
int sri = rate_to_sri(sr);
if(dts == PTS_UNSET)
dts = st->es_nextdts;
if(dts == PTS_UNSET)
dts = st->es_nextdts;
if(dts != PTS_UNSET && len >= i + fsize + 6 &&
mp4a_valid_frame(p + fsize)) {
if(dts != PTS_UNSET && len >= i + fsize + 6 &&
mp4a_valid_frame(p + fsize)) {
int channels = ((p[2] & 0x01) << 2) | ((p[3] & 0xc0) >> 6);
int channels = ((p[2] & 0x01) << 2) | ((p[3] & 0xc0) >> 6);
makeapkt(t, st, p, fsize, dts, duration, channels, sri,
st->es_buf_a.sb_err);
st->es_buf_a.sb_err = 0;
sbuf_cut(&st->es_buf_a, i + fsize);
goto again;
}
makeapkt(t, st, p, fsize, dts, duration, channels, sri,
st->es_buf_a.sb_err);
st->es_buf_a.sb_err = 0;
sbuf_cut(&st->es_buf_a, i + fsize);
goto again;
}
}
}
}
return 1;
}
}
const static int mpa_br[16] = {
@ -560,24 +553,24 @@ parse_mpa2(service_t *t, elementary_stream_t *st)
int pad = (buf[i+2] >> 1) & 1;
if(br && sr) {
int fsize = 144000 * br / sr + pad;
int duration = 90000 * 1152 / sr;
int64_t dts = st->es_curdts;
int channels = (buf[i + 3] & 0xc0) == 0xc0 ? 1 : 2;
if(dts == PTS_UNSET)
dts = st->es_nextdts;
int fsize = 144000 * br / sr + pad;
int duration = 90000 * 1152 / sr;
int64_t dts = st->es_curdts;
int channels = (buf[i + 3] & 0xc0) == 0xc0 ? 1 : 2;
if(dts == PTS_UNSET)
dts = st->es_nextdts;
if(dts != PTS_UNSET &&
len >= i + fsize + 4 &&
mpa_valid_frame(buf + i + fsize)) {
makeapkt(t, st, buf + i, fsize, dts, duration,
channels, mpa_sri[(buf[i+2] >> 2) & 3],
st->es_buf_a.sb_err);
st->es_buf_a.sb_err = 0;
sbuf_cut(&st->es_buf_a, i + fsize);
goto again;
}
if(dts != PTS_UNSET &&
len >= i + fsize + 4 &&
mpa_valid_frame(buf + i + fsize)) {
makeapkt(t, st, buf + i, fsize, dts, duration,
channels, mpa_sri[(buf[i+2] >> 2) & 3],
st->es_buf_a.sb_err);
st->es_buf_a.sb_err = 0;
sbuf_cut(&st->es_buf_a, i + fsize);
goto again;
}
}
}
}
@ -589,7 +582,7 @@ parse_mpa2(service_t *t, elementary_stream_t *st)
*/
static int
parse_mpa(service_t *t, elementary_stream_t *st, size_t ilen,
uint32_t next_startcode, int sc_offset)
uint32_t next_startcode, int sc_offset)
{
int r;
@ -661,7 +654,7 @@ static const char acmodtab[8] = {2,1,2,3,3,4,4,5};
static int
parse_ac3(service_t *t, elementary_stream_t *st, size_t ilen,
uint32_t next_startcode, int sc_offset)
uint32_t next_startcode, int sc_offset)
{
int i, len;
const uint8_t *buf;
@ -683,43 +676,43 @@ parse_ac3(service_t *t, elementary_stream_t *st, size_t ilen,
bsid -= 8;
if(bsid < 0)
bsid = 0;
bsid = 0;
int sr = ac3_freq_tab[fscod] >> bsid;
if(sr) {
int duration = 90000 * 1536 / sr;
int64_t dts = st->es_curdts;
int sri = rate_to_sri(sr);
int duration = 90000 * 1536 / sr;
int64_t dts = st->es_curdts;
int sri = rate_to_sri(sr);
if(dts == PTS_UNSET)
dts = st->es_nextdts;
if(dts == PTS_UNSET)
dts = st->es_nextdts;
if(dts != PTS_UNSET && len >= i + fsize + 6 &&
ac3_valid_frame(p + fsize)) {
if(dts != PTS_UNSET && len >= i + fsize + 6 &&
ac3_valid_frame(p + fsize)) {
bitstream_t bs;
init_rbits(&bs, p + 5, (fsize - 5) * 8);
read_bits(&bs, 5); // bsid
read_bits(&bs, 3); // bsmod
int acmod = read_bits(&bs, 3);
bitstream_t bs;
init_rbits(&bs, p + 5, (fsize - 5) * 8);
if((acmod & 0x1) && (acmod != 0x1))
read_bits(&bs, 2); // cmixlen
if(acmod & 0x4)
read_bits(&bs, 2); // surmixlev
if(acmod == 0x2)
read_bits(&bs, 2); // dsurmod
read_bits(&bs, 5); // bsid
read_bits(&bs, 3); // bsmod
int acmod = read_bits(&bs, 3);
int lfeon = read_bits(&bs, 1);
int channels = acmodtab[acmod] + lfeon;
if((acmod & 0x1) && (acmod != 0x1))
read_bits(&bs, 2); // cmixlen
if(acmod & 0x4)
read_bits(&bs, 2); // surmixlev
if(acmod == 0x2)
read_bits(&bs, 2); // dsurmod
makeapkt(t, st, p, fsize, dts, duration, channels, sri,
st->es_buf_a.sb_err);
st->es_buf_a.sb_err = 0;
sbuf_cut(&st->es_buf_a, i + fsize);
goto again;
}
int lfeon = read_bits(&bs, 1);
int channels = acmodtab[acmod] + lfeon;
makeapkt(t, st, p, fsize, dts, duration, channels, sri,
st->es_buf_a.sb_err);
st->es_buf_a.sb_err = 0;
sbuf_cut(&st->es_buf_a, i + fsize);
goto again;
}
}
}
}
@ -742,7 +735,7 @@ eac3_valid_frame(const uint8_t *buf)
static int
parse_eac3(service_t *t, elementary_stream_t *st, size_t ilen,
uint32_t next_startcode, int sc_offset)
uint32_t next_startcode, int sc_offset)
{
int i, len;
const uint8_t *buf;
@ -763,18 +756,17 @@ parse_eac3(service_t *t, elementary_stream_t *st, size_t ilen,
int sr = p[4] >> 6;
int rate;
if(sr == 3) {
int sr2 = (p[4] >> 4) & 0x3;
if(sr2 == 3)
continue;
rate = ac3_freq_tab[sr2] / 2;
int sr2 = (p[4] >> 4) & 0x3;
if(sr2 == 3)
continue;
rate = ac3_freq_tab[sr2] / 2;
} else {
rate = ac3_freq_tab[sr];
rate = ac3_freq_tab[sr];
}
int64_t dts = st->es_curdts;
int sri = rate_to_sri(rate);
int acmod = (p[4] >> 1) & 0x7;
int lfeon = p[4] & 1;
@ -782,15 +774,15 @@ parse_eac3(service_t *t, elementary_stream_t *st, size_t ilen,
int duration = 90000 * 1536 / rate;
if(dts == PTS_UNSET)
dts = st->es_nextdts;
dts = st->es_nextdts;
if(dts != PTS_UNSET && len >= i + fsize + 6 &&
eac3_valid_frame(p + fsize)) {
makeapkt(t, st, p, fsize, dts, duration, channels, sri,
st->es_buf_a.sb_err);
st->es_buf_a.sb_err = 0;
sbuf_cut(&st->es_buf_a, i + fsize);
goto again;
eac3_valid_frame(p + fsize)) {
makeapkt(t, st, p, fsize, dts, duration, channels, sri,
st->es_buf_a.sb_err);
st->es_buf_a.sb_err = 0;
sbuf_cut(&st->es_buf_a, i + fsize);
goto again;
}
}
}
@ -798,8 +790,6 @@ parse_eac3(service_t *t, elementary_stream_t *st, size_t ilen,
}
/**
* PES header parser
*
@ -807,7 +797,7 @@ parse_eac3(service_t *t, elementary_stream_t *st, size_t ilen,
*/
static int
parse_pes_header(service_t *t, elementary_stream_t *st,
const uint8_t *buf, size_t len)
const uint8_t *buf, size_t len)
{
int64_t dts, pts, d;
int hdr, flags, hlen;
@ -858,7 +848,6 @@ parse_pes_header(service_t *t, elementary_stream_t *st,
}
/**
* MPEG2VIDEO frame duration table (in 90kHz clock domain)
*/
@ -879,7 +868,7 @@ const unsigned int mpeg2video_framedurations[16] = {
*/
static int
parse_mpeg2video_pic_start(service_t *t, elementary_stream_t *st, int *frametype,
bitstream_t *bs)
bitstream_t *bs)
{
int v, pct;
@ -960,7 +949,7 @@ static const uint8_t mpeg2_aspect[16][2]={
*/
static int
parse_mpeg2video_seq_start(service_t *t, elementary_stream_t *st,
bitstream_t *bs)
bitstream_t *bs)
{
int v, width, height, aspect;
@ -1008,7 +997,7 @@ parser_global_data_move(elementary_stream_t *st, const uint8_t *data, size_t len
int len2 = drop_trailing_zeroes(data, len);
st->es_global_data = realloc(st->es_global_data,
st->es_global_data_len + len2);
st->es_global_data_len + len2);
memcpy(st->es_global_data + st->es_global_data_len, data, len2);
st->es_global_data_len += len2;
@ -1028,7 +1017,7 @@ parser_global_data_move(elementary_stream_t *st, const uint8_t *data, size_t len
*/
static int
parse_mpeg2video(service_t *t, elementary_stream_t *st, size_t len,
uint32_t next_startcode, int sc_offset)
uint32_t next_startcode, int sc_offset)
{
const uint8_t *buf = st->es_buf.sb_data + sc_offset;
bitstream_t bs;
@ -1077,7 +1066,7 @@ parse_mpeg2video(service_t *t, elementary_stream_t *st, size_t len,
/* Sequence start code */
if(!st->es_buf.sb_err) {
if(parse_mpeg2video_seq_start(t, st, &bs))
return 1;
return 1;
parser_global_data_move(st, buf, len);
}
return 2;
@ -1089,12 +1078,12 @@ parse_mpeg2video(service_t *t, elementary_stream_t *st, size_t len,
case 0x1:
// Sequence Extension
if(!st->es_buf.sb_err)
parser_global_data_move(st, buf, len);
parser_global_data_move(st, buf, len);
return 2;
case 0x2:
// Sequence Display Extension
if(!st->es_buf.sb_err)
parser_global_data_move(st, buf, len);
parser_global_data_move(st, buf, len);
return 2;
}
break;
@ -1106,19 +1095,19 @@ parse_mpeg2video(service_t *t, elementary_stream_t *st, size_t len,
/* Last picture slice (because next not a slice) */
th_pkt_t *pkt = st->es_curpkt;
if(pkt == NULL) {
/* no packet, may've been discarded by sanity checks here */
return 1;
/* no packet, may've been discarded by sanity checks here */
return 1;
}
if(st->es_global_data) {
pkt->pkt_header = pktbuf_make(st->es_global_data,
st->es_global_data_len);
st->es_global_data = NULL;
st->es_global_data_len = 0;
pkt->pkt_header = pktbuf_make(st->es_global_data,
st->es_global_data_len);
st->es_global_data = NULL;
st->es_global_data_len = 0;
}
pkt->pkt_payload = pktbuf_make(st->es_buf.sb_data,
st->es_buf.sb_ptr - 4);
st->es_buf.sb_ptr - 4);
pkt->pkt_duration = st->es_frame_duration;
sbuf_steal_data(&st->es_buf);
@ -1152,7 +1141,7 @@ parse_mpeg2video(service_t *t, elementary_stream_t *st, size_t len,
*/
static int
parse_h264(service_t *t, elementary_stream_t *st, size_t len,
uint32_t next_startcode, int sc_offset)
uint32_t next_startcode, int sc_offset)
{
const uint8_t *buf = st->es_buf.sb_data + sc_offset;
uint32_t sc = st->es_startcode;
@ -1183,20 +1172,20 @@ parse_h264(service_t *t, elementary_stream_t *st, size_t len,
case 7:
if(!st->es_buf.sb_err) {
void *f = h264_nal_deescape(&bs, buf + 3, len - 3);
h264_decode_seq_parameter_set(st, &bs);
free(f);
parser_global_data_move(st, buf, len);
void *f = h264_nal_deescape(&bs, buf + 3, len - 3);
h264_decode_seq_parameter_set(st, &bs);
free(f);
parser_global_data_move(st, buf, len);
}
ret = 2;
break;
case 8:
if(!st->es_buf.sb_err) {
void *f = h264_nal_deescape(&bs, buf + 3, len - 3);
h264_decode_pic_parameter_set(st, &bs);
free(f);
parser_global_data_move(st, buf, len);
void *f = h264_nal_deescape(&bs, buf + 3, len - 3);
h264_decode_pic_parameter_set(st, &bs);
free(f);
parser_global_data_move(st, buf, len);
}
ret = 2;
break;
@ -1208,13 +1197,13 @@ parse_h264(service_t *t, elementary_stream_t *st, size_t len,
/* we just want the first stuff */
if(h264_decode_slice_header(st, &bs, &pkttype, &isfield)) {
free(f);
return 1;
free(f);
return 1;
}
free(f);
if(st->es_curpkt != NULL || st->es_frame_duration == 0)
break;
break;
st->es_curpkt = pkt_alloc(NULL, 0, st->es_curpts, st->es_curdts);
st->es_curpkt->pkt_frametype = pkttype;
@ -1230,23 +1219,24 @@ parse_h264(service_t *t, elementary_stream_t *st, size_t len,
if(next_startcode >= 0x000001e0 && next_startcode <= 0x000001ef) {
/* Complete frame */
if (st->es_incomplete) return 4;
if (st->es_incomplete)
return 4;
th_pkt_t *pkt = st->es_curpkt;
if(pkt != NULL) {
if(st->es_global_data) {
pkt->pkt_header = pktbuf_make(st->es_global_data,
st->es_global_data_len);
st->es_global_data = NULL;
st->es_global_data_len = 0;
pkt->pkt_header = pktbuf_make(st->es_global_data,
st->es_global_data_len);
st->es_global_data = NULL;
st->es_global_data_len = 0;
}
pkt->pkt_payload = pktbuf_make(st->es_buf.sb_data,
st->es_buf.sb_ptr - 4);
st->es_buf.sb_ptr - 4);
sbuf_steal_data(&st->es_buf);
parser_deliver(t, st, pkt, st->es_buf.sb_err);
st->es_curpkt = NULL;
st->es_curdts = PTS_UNSET;
@ -1263,7 +1253,7 @@ parse_h264(service_t *t, elementary_stream_t *st, size_t len,
*/
static void
parse_subtitles(service_t *t, elementary_stream_t *st, const uint8_t *data,
int len, int start)
int len, int start)
{
th_pkt_t *pkt;
int psize, hlen;
@ -1326,7 +1316,7 @@ parse_subtitles(service_t *t, elementary_stream_t *st, const uint8_t *data,
*/
static void
parse_teletext(service_t *t, elementary_stream_t *st, const uint8_t *data,
int len, int start)
int len, int start)
{
th_pkt_t *pkt;
int psize, hlen;
@ -1366,7 +1356,7 @@ parse_teletext(service_t *t, elementary_stream_t *st, const uint8_t *data,
pkt = pkt_alloc(buf, psize, st->es_curpts, st->es_curdts);
pkt->pkt_commercial = t->s_tt_commercial_advice;
parser_deliver(t, st, pkt, st->es_buf.sb_err);
}
}
}
/**