diff options
author | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2009-07-07 02:56:01 +0300 |
---|---|---|
committer | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2009-07-07 02:56:01 +0300 |
commit | a2037a2effbd4622d0e8336245a9b14c3f886bde (patch) | |
tree | bd2face6dd36d2663197b23a33da9e9b2814f70c /libmpdemux | |
parent | 0c2773a709276681575d2507aa60ee85c2d0b850 (diff) | |
parent | 43079c51daa8c12b0a44e5ad8022c979dd9e8336 (diff) | |
download | mpv-a2037a2effbd4622d0e8336245a9b14c3f886bde.tar.bz2 mpv-a2037a2effbd4622d0e8336245a9b14c3f886bde.tar.xz |
Merge svn changes up to r29412
Diffstat (limited to 'libmpdemux')
-rw-r--r-- | libmpdemux/asfheader.c | 2 | ||||
-rw-r--r-- | libmpdemux/aviheader.c | 2 | ||||
-rw-r--r-- | libmpdemux/demux_lavf.c | 41 | ||||
-rw-r--r-- | libmpdemux/demux_mov.c | 2 | ||||
-rw-r--r-- | libmpdemux/demux_ogg.c | 2 | ||||
-rw-r--r-- | libmpdemux/demux_real.c | 2 | ||||
-rw-r--r-- | libmpdemux/demux_rtp.cpp | 11 | ||||
-rw-r--r-- | libmpdemux/demux_ts.c | 22 | ||||
-rw-r--r-- | libmpdemux/demux_viv.c | 2 | ||||
-rw-r--r-- | libmpdemux/demuxer.c | 7 | ||||
-rw-r--r-- | libmpdemux/mp_taglists.c | 4 |
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}; |