mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-25 00:32:31 +00:00
try to filter _all_ PATs if no SDT could be found patch by (<gbazin at altern dot org>)
+ mpegtsenc.c compile fix by me Originally committed as revision 1995 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
d3b150363c
commit
ce34182dd7
@ -348,7 +348,7 @@ static void pmt_cb(void *opaque, const uint8_t *section, int section_len)
|
|||||||
#ifdef DEBUG_SI
|
#ifdef DEBUG_SI
|
||||||
printf("sid=0x%x sec_num=%d/%d\n", h->id, h->sec_num, h->last_sec_num);
|
printf("sid=0x%x sec_num=%d/%d\n", h->id, h->sec_num, h->last_sec_num);
|
||||||
#endif
|
#endif
|
||||||
if (h->tid != PMT_TID || h->id != ts->req_sid)
|
if (h->tid != PMT_TID || (ts->req_sid >= 0 && h->id != ts->req_sid) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
pcr_pid = get16(&p, p_end) & 0x1fff;
|
pcr_pid = get16(&p, p_end) & 0x1fff;
|
||||||
@ -383,8 +383,10 @@ static void pmt_cb(void *opaque, const uint8_t *section, int section_len)
|
|||||||
|
|
||||||
/* now create ffmpeg stream */
|
/* now create ffmpeg stream */
|
||||||
switch(stream_type) {
|
switch(stream_type) {
|
||||||
case STREAM_TYPE_AUDIO:
|
case STREAM_TYPE_AUDIO_MPEG1:
|
||||||
case STREAM_TYPE_VIDEO:
|
case STREAM_TYPE_AUDIO_MPEG2:
|
||||||
|
case STREAM_TYPE_VIDEO_MPEG1:
|
||||||
|
case STREAM_TYPE_VIDEO_MPEG2:
|
||||||
add_pes_stream(ts->stream, pid);
|
add_pes_stream(ts->stream, pid);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -429,7 +431,7 @@ static void pat_cb(void *opaque, const uint8_t *section, int section_len)
|
|||||||
if (sid == 0x0000) {
|
if (sid == 0x0000) {
|
||||||
/* NIT info */
|
/* NIT info */
|
||||||
} else {
|
} else {
|
||||||
if (ts->req_sid == sid) {
|
if (ts->req_sid == sid || ts->req_sid < 0) {
|
||||||
ts->pmt_filter = mpegts_open_section_filter(ts, pmt_pid,
|
ts->pmt_filter = mpegts_open_section_filter(ts, pmt_pid,
|
||||||
pmt_cb, ts, 1);
|
pmt_cb, ts, 1);
|
||||||
goto found;
|
goto found;
|
||||||
@ -861,6 +863,8 @@ static int mpegts_read_header(AVFormatContext *s,
|
|||||||
ts->auto_guess = 0;
|
ts->auto_guess = 0;
|
||||||
|
|
||||||
if (!ts->auto_guess) {
|
if (!ts->auto_guess) {
|
||||||
|
int sid = -1;
|
||||||
|
ts->set_service_ret = -1;
|
||||||
|
|
||||||
/* first do a scaning to get all the services */
|
/* first do a scaning to get all the services */
|
||||||
url_fseek(pb, pos, SEEK_SET);
|
url_fseek(pb, pos, SEEK_SET);
|
||||||
@ -868,20 +872,22 @@ static int mpegts_read_header(AVFormatContext *s,
|
|||||||
|
|
||||||
handle_packets(s, MAX_SCAN_PACKETS);
|
handle_packets(s, MAX_SCAN_PACKETS);
|
||||||
|
|
||||||
/* if no service found, no need to do anything */
|
if (ts->nb_services > 0)
|
||||||
if (ts->nb_services <= 0)
|
{
|
||||||
return -1;
|
/* tune to first service found */
|
||||||
|
|
||||||
/* now find the info for the first service */
|
|
||||||
|
|
||||||
url_fseek(pb, pos, SEEK_SET);
|
|
||||||
service = ts->services[0];
|
service = ts->services[0];
|
||||||
|
sid = service->sid;
|
||||||
#ifdef DEBUG_SI
|
#ifdef DEBUG_SI
|
||||||
printf("tuning to '%s'\n", service->name);
|
printf("tuning to '%s'\n", service->name);
|
||||||
#endif
|
#endif
|
||||||
/* tune to first service found */
|
}
|
||||||
|
|
||||||
|
/* now find the info for the first service if we found any,
|
||||||
|
otherwise try to filter all PATs */
|
||||||
|
|
||||||
|
url_fseek(pb, pos, SEEK_SET);
|
||||||
ts->stream = s;
|
ts->stream = s;
|
||||||
mpegts_set_service(ts, service->sid, set_service_cb, ts);
|
mpegts_set_service(ts, sid, set_service_cb, ts);
|
||||||
|
|
||||||
handle_packets(s, MAX_SCAN_PACKETS);
|
handle_packets(s, MAX_SCAN_PACKETS);
|
||||||
|
|
||||||
|
@ -31,8 +31,10 @@
|
|||||||
#define PMT_TID 0x02
|
#define PMT_TID 0x02
|
||||||
#define SDT_TID 0x42
|
#define SDT_TID 0x42
|
||||||
|
|
||||||
#define STREAM_TYPE_VIDEO 0x02
|
#define STREAM_TYPE_VIDEO_MPEG1 0x01
|
||||||
#define STREAM_TYPE_AUDIO 0x03
|
#define STREAM_TYPE_VIDEO_MPEG2 0x02
|
||||||
|
#define STREAM_TYPE_AUDIO_MPEG1 0x03
|
||||||
|
#define STREAM_TYPE_AUDIO_MPEG2 0x04
|
||||||
#define STREAM_TYPE_PRIVATE_SECTION 0x05
|
#define STREAM_TYPE_PRIVATE_SECTION 0x05
|
||||||
#define STREAM_TYPE_PRIVATE_DATA 0x06
|
#define STREAM_TYPE_PRIVATE_DATA 0x06
|
||||||
|
|
||||||
|
@ -259,10 +259,10 @@ static void mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
|
|||||||
MpegTSWriteStream *ts_st = st->priv_data;
|
MpegTSWriteStream *ts_st = st->priv_data;
|
||||||
switch(st->codec.codec_type) {
|
switch(st->codec.codec_type) {
|
||||||
case CODEC_TYPE_VIDEO:
|
case CODEC_TYPE_VIDEO:
|
||||||
stream_type = STREAM_TYPE_VIDEO;
|
stream_type = STREAM_TYPE_VIDEO_MPEG2; //XXX/FIXME is this (and the define) correct?
|
||||||
break;
|
break;
|
||||||
case CODEC_TYPE_AUDIO:
|
case CODEC_TYPE_AUDIO:
|
||||||
stream_type = STREAM_TYPE_AUDIO;
|
stream_type = STREAM_TYPE_AUDIO_MPEG1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
stream_type = STREAM_TYPE_PRIVATE_DATA;
|
stream_type = STREAM_TYPE_PRIVATE_DATA;
|
||||||
|
Loading…
Reference in New Issue
Block a user