summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
Diffstat (limited to 'libmpdemux')
-rw-r--r--libmpdemux/asfheader.c2
-rw-r--r--libmpdemux/aviheader.c2
-rw-r--r--libmpdemux/demux_lavf.c41
-rw-r--r--libmpdemux/demux_mov.c2
-rw-r--r--libmpdemux/demux_ogg.c2
-rw-r--r--libmpdemux/demux_real.c2
-rw-r--r--libmpdemux/demux_rtp.cpp11
-rw-r--r--libmpdemux/demux_ts.c22
-rw-r--r--libmpdemux/demux_viv.c2
-rw-r--r--libmpdemux/demuxer.c7
-rw-r--r--libmpdemux/mp_taglists.c4
11 files changed, 53 insertions, 44 deletions
diff --git a/libmpdemux/asfheader.c b/libmpdemux/asfheader.c
index 0c7f49a81f..7cf0111e67 100644
--- a/libmpdemux/asfheader.c
+++ b/libmpdemux/asfheader.c
@@ -565,7 +565,7 @@ int read_asf_header(demuxer_t *demuxer,struct asf_priv* asf){
if (pos > hdr_len) goto len_err_out;
if ((string = get_ucs2str(wstring, len))) {
mp_msg(MSGT_HEADER,MSGL_V," Title: %s\n", string);
- demux_info_add(demuxer, "name", string);
+ demux_info_add(demuxer, "title", string);
free(string);
}
}
diff --git a/libmpdemux/aviheader.c b/libmpdemux/aviheader.c
index 833ce6996b..a7b2b2c434 100644
--- a/libmpdemux/aviheader.c
+++ b/libmpdemux/aviheader.c
@@ -167,7 +167,7 @@ while(1){
case mmioFOURCC('I','M','E','D'): hdr="Medium";break;
// INAM - Stores the title of the subject of the file, such as
// "Seattle from Above."
- case mmioFOURCC('I','N','A','M'): hdr="Name";break;
+ case mmioFOURCC('I','N','A','M'): hdr="Title";break;
// IPLT - Specifies the number of colors requested when digitizing
// an image, such as "256."
case mmioFOURCC('I','P','L','T'): hdr="Palette Setting";break;
diff --git a/libmpdemux/demux_lavf.c b/libmpdemux/demux_lavf.c
index a7da1a9b36..310ec83c09 100644
--- a/libmpdemux/demux_lavf.c
+++ b/libmpdemux/demux_lavf.c
@@ -140,12 +140,6 @@ static int lavf_check_file(demuxer_t *demuxer){
av_register_all();
- if(stream_read(demuxer->stream, buf, PROBE_BUF_SIZE)!=PROBE_BUF_SIZE)
- return 0;
- avpd.filename= demuxer->stream->url;
- avpd.buf= buf;
- avpd.buf_size= PROBE_BUF_SIZE;
-
if (opt_format) {
if (strcmp(opt_format, "help") == 0) {
list_formats();
@@ -159,6 +153,13 @@ static int lavf_check_file(demuxer_t *demuxer){
mp_msg(MSGT_DEMUX,MSGL_INFO,"Forced lavf %s demuxer\n", priv->avif->long_name);
return DEMUXER_TYPE_LAVF;
}
+
+ if(stream_read(demuxer->stream, buf, PROBE_BUF_SIZE)!=PROBE_BUF_SIZE)
+ return 0;
+ avpd.filename= demuxer->stream->url;
+ avpd.buf= buf;
+ avpd.buf_size= PROBE_BUF_SIZE;
+
priv->avif= av_probe_input_format(&avpd, 1);
if(!priv->avif){
mp_msg(MSGT_HEADER,MSGL_V,"LAVF_check: no clue about this gibberish!\n");
@@ -169,7 +170,7 @@ static int lavf_check_file(demuxer_t *demuxer){
return DEMUXER_TYPE_LAVF;
}
-static const char *preferred_list[] = {
+static const char * const preferred_list[] = {
"dxa",
"wv",
"nuv",
@@ -186,7 +187,7 @@ static const char *preferred_list[] = {
static int lavf_check_preferred_file(demuxer_t *demuxer){
if (lavf_check_file(demuxer)) {
- char **p = preferred_list;
+ const char * const *p = preferred_list;
lavf_priv_t *priv = demuxer->priv;
while (*p) {
if (strcmp(*p, priv->avif->name) == 0)
@@ -218,21 +219,21 @@ static void handle_stream(demuxer_t *demuxer, AVFormatContext *avfc, int i) {
lavf_priv_t *priv= demuxer->priv;
AVStream *st= avfc->streams[i];
AVCodecContext *codec= st->codec;
+ AVMetadataTag *lang = av_metadata_get(st->metadata, "language", NULL, 0);
int g;
switch(codec->codec_type){
case CODEC_TYPE_AUDIO:{
int override_tag;
- WAVEFORMATEX *wf= calloc(sizeof(WAVEFORMATEX) + codec->extradata_size, 1);
+ WAVEFORMATEX *wf;
sh_audio_t* sh_audio;
- if(priv->audio_streams >= MAX_A_STREAMS)
- break;
sh_audio=new_sh_audio(demuxer, i);
mp_tmsg(MSGT_DEMUX, MSGL_INFO, "[%s] Audio stream found, -aid %d\n", "lavf", i);
if(!sh_audio)
break;
priv->astreams[priv->audio_streams] = i;
priv->audio_streams++;
+ wf= calloc(sizeof(WAVEFORMATEX) + codec->extradata_size, 1);
// For some formats (like PCM) always trust CODEC_ID_* more than codec_tag
override_tag= av_codec_get_tag(mp_wav_override_taglists, codec->codec_id);
if (override_tag)
@@ -289,8 +290,10 @@ static void handle_stream(demuxer_t *demuxer, AVFormatContext *avfc, int i) {
sh_audio->format = 0x7;
break;
}
- if (st->language)
- sh_audio->lang = strdup(st->language);
+ if (lang && lang->value) {
+ sh_audio->lang = strdup(lang->value);
+ mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_AID_%d_LANG=%s\n", i, sh_audio->lang);
+ }
if (st->disposition & AV_DISPOSITION_DEFAULT)
sh_audio->default_track = 1;
if(mp_msg_test(MSGT_HEADER,MSGL_V) ) print_wave_header(sh_audio->wf, MSGL_V);
@@ -305,8 +308,6 @@ static void handle_stream(demuxer_t *demuxer, AVFormatContext *avfc, int i) {
case CODEC_TYPE_VIDEO:{
sh_video_t* sh_video;
BITMAPINFOHEADER *bih;
- if(priv->video_streams >= MAX_V_STREAMS)
- break;
sh_video=new_sh_video(demuxer, i);
mp_tmsg(MSGT_DEMUX, MSGL_INFO, "[%s] Video stream found, -vid %d\n", "lavf", i);
if(!sh_video) break;
@@ -374,8 +375,6 @@ static void handle_stream(demuxer_t *demuxer, AVFormatContext *avfc, int i) {
case CODEC_TYPE_SUBTITLE:{
sh_sub_t* sh_sub;
char type;
- if(priv->sub_streams >= MAX_S_STREAMS)
- break;
/* only support text subtitles for now */
if(codec->codec_id == CODEC_ID_TEXT)
type = 't';
@@ -397,8 +396,10 @@ static void handle_stream(demuxer_t *demuxer, AVFormatContext *avfc, int i) {
memcpy(sh_sub->extradata, codec->extradata, codec->extradata_size);
sh_sub->extradata_len = codec->extradata_size;
}
- if (st->language)
- sh_sub->lang = strdup(st->language);
+ if (lang && lang->value) {
+ sh_sub->lang = strdup(lang->value);
+ mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_SID_%d_LANG=%s\n", priv->sub_streams, sh_sub->lang);
+ }
if (st->disposition & AV_DISPOSITION_DEFAULT)
sh_sub->default_track = 1;
priv->sub_streams++;
@@ -476,7 +477,7 @@ static demuxer_t* demux_open_lavf(demuxer_t *demuxer){
return NULL;
}
- if(avfc->title [0]) demux_info_add(demuxer, "name" , avfc->title );
+ if(avfc->title [0]) demux_info_add(demuxer, "title" , avfc->title );
if(avfc->author [0]) demux_info_add(demuxer, "author" , avfc->author );
if(avfc->copyright[0]) demux_info_add(demuxer, "copyright", avfc->copyright);
if(avfc->comment [0]) demux_info_add(demuxer, "comments" , avfc->comment );
diff --git a/libmpdemux/demux_mov.c b/libmpdemux/demux_mov.c
index 203d9eb54e..c38fa7ee16 100644
--- a/libmpdemux/demux_mov.c
+++ b/libmpdemux/demux_mov.c
@@ -1549,7 +1549,7 @@ static void lschunks(demuxer_t* demuxer,int level,off_t endpos,mov_track_t* trak
break;
case MOV_FOURCC('n','a','m','e'):
case MOV_FOURCC(0xa9,'n','a','m'):
- demux_info_add(demuxer, "name", &text[2]);
+ demux_info_add(demuxer, "title", &text[2]);
mp_msg(MSGT_DEMUX, MSGL_V, " Name: %s\n", &text[2]);
break;
case MOV_FOURCC(0xa9,'A','R','T'):
diff --git a/libmpdemux/demux_ogg.c b/libmpdemux/demux_ogg.c
index ffa563d1bf..af730bb712 100644
--- a/libmpdemux/demux_ogg.c
+++ b/libmpdemux/demux_ogg.c
@@ -375,7 +375,7 @@ static void demux_ogg_check_comments(demuxer_t *d, ogg_stream_t *os, int id, vor
} table[] = {
{ "ENCODED_USING", "Software" },
{ "ENCODER_URL", "Encoder URL" },
- { "TITLE", "Name" },
+ { "TITLE", "Title" },
{ "ARTIST", "Artist" },
{ "COMMENT", "Comments" },
{ "DATE", "Creation Date" },
diff --git a/libmpdemux/demux_real.c b/libmpdemux/demux_real.c
index 60e44ed22d..f6611eb2ed 100644
--- a/libmpdemux/demux_real.c
+++ b/libmpdemux/demux_real.c
@@ -1181,7 +1181,7 @@ static demuxer_t* demux_open_real(demuxer_t* demuxer)
buf = malloc(len+1);
stream_read(demuxer->stream, buf, len);
buf[len] = 0;
- demux_info_add(demuxer, "name", buf);
+ demux_info_add(demuxer, "title", buf);
free(buf);
}
diff --git a/libmpdemux/demux_rtp.cpp b/libmpdemux/demux_rtp.cpp
index fe163aaf5a..afe550b284 100644
--- a/libmpdemux/demux_rtp.cpp
+++ b/libmpdemux/demux_rtp.cpp
@@ -111,7 +111,12 @@ static char* openURL_sip(SIPClient* client, char const* url) {
}
}
-int rtspStreamOverTCP = 0;
+#ifdef CONFIG_LIBNEMESI
+extern int rtsp_transport_tcp;
+#else
+int rtsp_transport_tcp = 0;
+#endif
+
extern int rtsp_port;
extern "C" demuxer_t* demux_open_rtp(demuxer_t* demuxer) {
@@ -230,7 +235,7 @@ extern "C" demuxer_t* demux_open_rtp(demuxer_t* demuxer) {
if (rtspClient != NULL) {
// Issue a RTSP "SETUP" command on the chosen subsession:
if (!rtspClient->setupMediaSubsession(*subsession, False,
- rtspStreamOverTCP)) break;
+ rtsp_transport_tcp)) break;
if (!strcmp(subsession->mediumName(), "audio"))
audiofound = 1;
if (!strcmp(subsession->mediumName(), "video"))
@@ -329,7 +334,7 @@ extern "C" int demux_rtp_fill_buffer(demuxer_t* demuxer, demux_stream_t* ds) {
const float ptsBehindLimit = 60.0; // seconds
if (ptsBehind < ptsBehindThreshold ||
ptsBehind > ptsBehindLimit ||
- rtspStreamOverTCP) { // packet's OK
+ rtsp_transport_tcp) { // packet's OK
ds_add_packet(ds, dp);
break;
}
diff --git a/libmpdemux/demux_ts.c b/libmpdemux/demux_ts.c
index d7159167ca..c213c34a35 100644
--- a/libmpdemux/demux_ts.c
+++ b/libmpdemux/demux_ts.c
@@ -286,6 +286,7 @@ try_fec:
}
static int parse_avc_sps(uint8_t *buf, int len, int *w, int *h);
+static inline uint8_t *pid_lang_from_pmt(ts_priv_t *priv, int pid);
static void ts_add_stream(demuxer_t * demuxer, ES_stream_t *es)
{
@@ -300,6 +301,7 @@ static void ts_add_stream(demuxer_t * demuxer, ES_stream_t *es)
sh_audio_t *sh = new_sh_audio_aid(demuxer, priv->last_aid, es->pid);
if(sh)
{
+ const char *lang = pid_lang_from_pmt(priv, es->pid);
sh->format = IS_AUDIO(es->type) ? es->type : es->subtype;
sh->ds = demuxer->audio;
@@ -307,6 +309,8 @@ static void ts_add_stream(demuxer_t * demuxer, ES_stream_t *es)
priv->ts.streams[es->pid].sh = sh;
priv->ts.streams[es->pid].type = TYPE_AUDIO;
mp_msg(MSGT_DEMUX, MSGL_V, "\r\nADDED AUDIO PID %d, type: %x stream n. %d\r\n", es->pid, sh->format, priv->last_aid);
+ if (lang && lang[0])
+ mp_msg(MSGT_IDENTIFY, MSGL_V, "ID_AID_%d_LANG=%s\n", es->pid, lang);
priv->last_aid++;
}
@@ -700,16 +704,12 @@ static off_t ts_detect_streams(demuxer_t *demuxer, tsdemux_init_t *param)
if(is_video)
{
- mp_msg(MSGT_IDENTIFY, MSGL_V, "ID_VIDEO_ID=%d\n", es.pid);
chosen_pid = (req_vpid == es.pid);
if((! chosen_pid) && (req_vpid > 0))
continue;
}
else if(is_audio)
{
- mp_msg(MSGT_IDENTIFY, MSGL_V, "ID_AUDIO_ID=%d\n", es.pid);
- if (es.lang[0] > 0)
- mp_msg(MSGT_IDENTIFY, MSGL_V, "ID_AID_%d_LANG=%s\n", es.pid, es.lang);
if(req_apid > 0)
{
chosen_pid = (req_apid == es.pid);
@@ -2724,6 +2724,7 @@ static int ts_parse(demuxer_t *demuxer , ES_stream_t *es, unsigned char *packet,
rap_flag = 0;
mp4_dec = NULL;
es->is_synced = 0;
+ es->lang[0] = 0;
si = NULL;
junk = priv->ts.packet_size - TS_PACKET_SIZE;
@@ -3378,14 +3379,9 @@ static int demux_ts_control(demuxer_t *demuxer, int cmd, void *arg)
}
else //audio track <n>
{
- for(i = 0; i < 8192; i++)
- {
- if(priv->ts.streams[i].id == n && priv->ts.streams[i].type == reftype)
- {
+ if (n >= 8192 || priv->ts.streams[n].type != reftype) return DEMUXER_CTRL_NOTIMPL;
+ i = n;
sh = priv->ts.streams[i].sh;
- break;
- }
- }
}
if(sh)
@@ -3456,12 +3452,12 @@ static int demux_ts_control(demuxer_t *demuxer, int cmd, void *arg)
if(!vid_done && priv->ts.streams[pmt->es[j].pid].type == TYPE_VIDEO)
{
vid_done = 1;
- prog->vid = priv->ts.streams[pmt->es[j].pid].id;
+ prog->vid = pmt->es[j].pid;
}
else if(!aid_done && priv->ts.streams[pmt->es[j].pid].type == TYPE_AUDIO)
{
aid_done = 1;
- prog->aid = priv->ts.streams[pmt->es[j].pid].id;
+ prog->aid = pmt->es[j].pid;
}
}
diff --git a/libmpdemux/demux_viv.c b/libmpdemux/demux_viv.c
index 922cfbcb8a..d0a2615d42 100644
--- a/libmpdemux/demux_viv.c
+++ b/libmpdemux/demux_viv.c
@@ -208,7 +208,7 @@ static void vivo_parse_text_header(demuxer_t *demux, int header_len)
/* only for displaying some informations about movie*/
if (!strcmp(opt, "Title"))
{
- demux_info_add(demux, "name", param);
+ demux_info_add(demux, "title", param);
priv->title = strdup(param);
}
if (!strcmp(opt, "Author"))
diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c
index 3e01f25ebd..c9142f1441 100644
--- a/libmpdemux/demuxer.c
+++ b/libmpdemux/demuxer.c
@@ -1345,6 +1345,13 @@ int demuxer_add_chapter(demuxer_t *demuxer, const char *name, uint64_t start,
demuxer->chapters[demuxer->num_chapters].end = end;
demuxer->chapters[demuxer->num_chapters].name = strdup(name ? name : mp_gtext("unknown"));
+ mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CHAPTER_ID=%d\n", demuxer->num_chapters);
+ mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CHAPTER_%d_START=%"PRIu64"\n", demuxer->num_chapters, start);
+ if (end)
+ mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CHAPTER_%d_END=%"PRIu64"\n", demuxer->num_chapters, end);
+ if (name)
+ mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CHAPTER_%d_NAME=%s\n", demuxer->num_chapters, name);
+
return demuxer->num_chapters++;
}
diff --git a/libmpdemux/mp_taglists.c b/libmpdemux/mp_taglists.c
index 5013d40aaa..037ada5eb0 100644
--- a/libmpdemux/mp_taglists.c
+++ b/libmpdemux/mp_taglists.c
@@ -51,7 +51,7 @@ static const AVCodecTag mp_wav_tags[] = {
{ 0, 0 },
};
-const struct AVCodecTag *mp_wav_taglists[] = {codec_wav_tags, mp_wav_tags, 0};
+const struct AVCodecTag *mp_wav_taglists[] = {ff_codec_wav_tags, mp_wav_tags, 0};
static const AVCodecTag mp_wav_override_tags[] = {
{ CODEC_ID_PCM_S8, MKTAG('t', 'w', 'o', 's')},
@@ -96,4 +96,4 @@ static const AVCodecTag mp_bmp_tags[] = {
{ 0, 0 },
};
-const struct AVCodecTag *mp_bmp_taglists[] = {codec_bmp_tags, mp_bmp_tags, 0};
+const struct AVCodecTag *mp_bmp_taglists[] = {ff_codec_bmp_tags, mp_bmp_tags, 0};