diff options
Diffstat (limited to 'libmpdemux')
-rw-r--r-- | libmpdemux/demux_asf.c | 5 | ||||
-rw-r--r-- | libmpdemux/demux_film.c | 3 | ||||
-rw-r--r-- | libmpdemux/demux_lavf.c | 16 | ||||
-rw-r--r-- | libmpdemux/demux_mf.c | 2 | ||||
-rw-r--r-- | libmpdemux/demux_mkv.c | 55 | ||||
-rw-r--r-- | libmpdemux/demux_mov.c | 1 | ||||
-rw-r--r-- | libmpdemux/demux_nut.c | 2 | ||||
-rw-r--r-- | libmpdemux/demux_ogg.c | 36 | ||||
-rw-r--r-- | libmpdemux/demux_packet.h | 3 | ||||
-rw-r--r-- | libmpdemux/demux_rawdv.c | 1 | ||||
-rw-r--r-- | libmpdemux/demux_real.c | 6 | ||||
-rw-r--r-- | libmpdemux/demux_realaud.c | 3 | ||||
-rw-r--r-- | libmpdemux/demux_ts.c | 2 | ||||
-rw-r--r-- | libmpdemux/demux_ty.c | 1 | ||||
-rw-r--r-- | libmpdemux/demux_y4m.c | 1 | ||||
-rw-r--r-- | libmpdemux/demuxer.c | 38 | ||||
-rw-r--r-- | libmpdemux/demuxer.h | 4 | ||||
-rw-r--r-- | libmpdemux/ebml_defs.c | 424 | ||||
-rw-r--r-- | libmpdemux/ebml_types.h | 477 | ||||
-rw-r--r-- | libmpdemux/stheader.h | 2 | ||||
-rw-r--r-- | libmpdemux/video.c | 2 |
21 files changed, 77 insertions, 1007 deletions
diff --git a/libmpdemux/demux_asf.c b/libmpdemux/demux_asf.c index eb71d4ef96..68ccab07d2 100644 --- a/libmpdemux/demux_asf.c +++ b/libmpdemux/demux_asf.c @@ -177,7 +177,7 @@ static int demux_asf_read_packet(demuxer_t *demux,unsigned char *data,int len,in dp->pts=time*0.0000001; else dp->pts=time*0.001; - dp->flags=keyframe; + dp->keyframe = keyframe; // if(ds==demux->video) printf("ASF time: %8d dur: %5d \n",time,dur); dp->pos=demux->filepos; ds->asf_packet=dp; @@ -595,7 +595,8 @@ static void demux_seek_asf(demuxer_t *demuxer,float rel_seek_secs,float audio_de continue; } } - if(d_video->flags&1) break; // found a keyframe! + if (d_video->keyframe) + break; if(!ds_fill_buffer(d_video)) break; // skip frame. EOF? } diff --git a/libmpdemux/demux_film.c b/libmpdemux/demux_film.c index 8575d5f1e8..713c9ea26e 100644 --- a/libmpdemux/demux_film.c +++ b/libmpdemux/demux_film.c @@ -130,7 +130,6 @@ static int demux_film_fill_buffer(demuxer_t *demuxer, demux_stream_t *ds) return 0; dp->pts = film_chunk.pts; dp->pos = film_chunk.chunk_offset; - dp->flags = 0; // adjust the data before queuing it: // 8-bit: signed -> unsigned @@ -197,7 +196,7 @@ static int demux_film_fill_buffer(demuxer_t *demuxer, demux_stream_t *ds) dp->pts = film_chunk.pts; dp->pos = film_chunk.chunk_offset; - dp->flags = (film_chunk.syncinfo1 & 0x80000000) ? 1 : 0; + dp->keyframe = film_chunk.syncinfo1 & 0x80000000; // fix the CVID chunk size cvid_size = film_chunk.chunk_size - length_fix_bytes; diff --git a/libmpdemux/demux_lavf.c b/libmpdemux/demux_lavf.c index 62cb0bad1b..1487a6db6b 100644 --- a/libmpdemux/demux_lavf.c +++ b/libmpdemux/demux_lavf.c @@ -245,8 +245,6 @@ static const char * const preferred_internal[] = { /* lavf Matroska demuxer doesn't support ordered chapters and fails * for more files */ "matroska", - /* lavf gives neither pts nor dts for some video frames in .rm */ - "rm", NULL }; @@ -310,6 +308,7 @@ static void handle_stream(demuxer_t *demuxer, AVFormatContext *avfc, int i) break; stream_type = "audio"; priv->astreams[priv->audio_streams] = i; + sh_audio->libav_codec_id = codec->codec_id; wf = calloc(sizeof(*wf) + codec->extradata_size, 1); // mp4a tag is used for all mp4 files no matter what they actually contain if (codec->codec_tag == MKTAG('m', 'p', '4', 'a')) @@ -387,6 +386,7 @@ static void handle_stream(demuxer_t *demuxer, AVFormatContext *avfc, int i) break; stream_type = "video"; priv->vstreams[priv->video_streams] = i; + sh_video->libav_codec_id = codec->codec_id; bih = calloc(sizeof(*bih) + codec->extradata_size, 1); if (codec->codec_id == CODEC_ID_RAWVIDEO) { @@ -398,9 +398,14 @@ static void handle_stream(demuxer_t *demuxer, AVFormatContext *avfc, int i) } if (!codec->codec_tag) codec->codec_tag = avcodec_pix_fmt_to_codec_tag(codec->pix_fmt); - } - if (!codec->codec_tag) + } else if (!codec->codec_tag) { codec->codec_tag = mp_taglist_video(codec->codec_id); + /* 0 might mean either unset or rawvideo; if codec_id + * was not RAWVIDEO assume it's unset + */ + if (!codec->codec_tag) + codec->codec_tag = -1; + } bih->biSize = sizeof(*bih) + codec->extradata_size; bih->biWidth = codec->width; bih->biHeight = codec->height; @@ -492,6 +497,7 @@ static void handle_stream(demuxer_t *demuxer, AVFormatContext *avfc, int i) break; stream_type = "subtitle"; priv->sstreams[priv->sub_streams] = i; + sh_sub->libav_codec_id = codec->codec_id; sh_sub->type = type; if (codec->extradata_size) { sh_sub->extradata = malloc(codec->extradata_size); @@ -808,7 +814,7 @@ static int demux_lavf_fill_buffer(demuxer_t *demux, demux_stream_t *dsds) av_q2d(priv->avfc->streams[id]->time_base); } dp->pos = demux->filepos; - dp->flags = !!(pkt->flags & AV_PKT_FLAG_KEY); + dp->keyframe = pkt->flags & AV_PKT_FLAG_KEY; // append packet to DS stream: ds_add_packet(ds, dp); return 1; diff --git a/libmpdemux/demux_mf.c b/libmpdemux/demux_mf.c index 193b17bc18..7112fd4059 100644 --- a/libmpdemux/demux_mf.c +++ b/libmpdemux/demux_mf.c @@ -66,7 +66,7 @@ static int demux_mf_fill_buffer(demuxer_t *demuxer, demux_stream_t *ds){ if ( !fread( dp->buffer,file_size,1,f ) ) return 0; dp->pts=mf->curr_frame / sh_video->fps; dp->pos=mf->curr_frame; - dp->flags=0; + dp->keyframe = true; // append packet to DS stream: ds_add_packet( demuxer->video,dp ); } diff --git a/libmpdemux/demux_mkv.c b/libmpdemux/demux_mkv.c index 27bc45acc9..b0f45758d7 100644 --- a/libmpdemux/demux_mkv.c +++ b/libmpdemux/demux_mkv.c @@ -1840,7 +1840,7 @@ static int demux_mkv_read_block_lacing(uint8_t *buffer, uint64_t *size, } static void handle_realvideo(demuxer_t *demuxer, mkv_track_t *track, - uint8_t *buffer, uint32_t size, int64_t block_bref) + uint8_t *buffer, uint32_t size, bool keyframe) { mkv_demuxer_t *mkv_d = (mkv_demuxer_t *) demuxer->priv; demux_packet_t *dp; @@ -1860,13 +1860,13 @@ static void handle_realvideo(demuxer_t *demuxer, mkv_track_t *track, biCompression, &track->rv_kf_base, &track->rv_kf_pts, NULL); dp->pos = demuxer->filepos; - dp->flags = block_bref ? 0 : 0x10; + dp->keyframe = keyframe; ds_add_packet(demuxer->video, dp); } static void handle_realaudio(demuxer_t *demuxer, mkv_track_t *track, - uint8_t *buffer, uint32_t size, int64_t block_bref) + uint8_t *buffer, uint32_t size, bool keyframe) { mkv_demuxer_t *mkv_d = (mkv_demuxer_t *) demuxer->priv; int sps = track->sub_packet_size; @@ -1952,7 +1952,7 @@ static void handle_realaudio(demuxer_t *demuxer, mkv_track_t *track, dp->pts = (x * apk_usize % w) ? 0 : track->audio_timestamp[x * apk_usize / w]; dp->pos = track->audio_filepos; // all equal - dp->flags = x ? 0 : 0x10; // Mark first packet as keyframe + dp->keyframe = !x; // Mark first packet as keyframe ds_add_packet(demuxer->audio, dp); } } @@ -1966,14 +1966,14 @@ static void handle_realaudio(demuxer_t *demuxer, mkv_track_t *track, track->ra_pts = mkv_d->last_pts; dp->pos = demuxer->filepos; - dp->flags = block_bref ? 0 : 0x10; + dp->keyframe = keyframe; ds_add_packet(demuxer->audio, dp); } } static int handle_block(demuxer_t *demuxer, uint8_t *block, uint64_t length, - uint64_t block_duration, int64_t block_bref, - int64_t block_fref, uint8_t simpleblock) + uint64_t block_duration, bool keyframe, + bool simpleblock) { mkv_demuxer_t *mkv_d = (mkv_demuxer_t *) demuxer->priv; mkv_track_t *track = NULL; @@ -1995,6 +1995,8 @@ static int handle_block(demuxer_t *demuxer, uint8_t *block, uint64_t length, length -= tmp + 2; old_length = length; flags = block[0]; + if (simpleblock) + keyframe = flags & 0x80; if (demux_mkv_read_block_lacing(block, &length, &laces, &lace_size)) return 0; block += old_length - length; @@ -2015,13 +2017,8 @@ static int handle_block(demuxer_t *demuxer, uint8_t *block, uint64_t length, && track->id == demuxer->audio->id) { ds = demuxer->audio; - if (mkv_d->a_skip_to_keyframe) { - if (simpleblock) { - if (!(flags & 0x80)) /*current frame isn't a keyframe */ - use_this_block = 0; - } else if (block_bref != 0) - use_this_block = 0; - } + if (mkv_d->a_skip_to_keyframe) + use_this_block = keyframe; if (mkv_d->v_skip_to_keyframe) use_this_block = 0; @@ -2043,13 +2040,8 @@ static int handle_block(demuxer_t *demuxer, uint8_t *block, uint64_t length, else if (track->type == MATROSKA_TRACK_VIDEO && track->id == demuxer->video->id) { ds = demuxer->video; - if (mkv_d->v_skip_to_keyframe) { - if (simpleblock) { - if (!(flags & 0x80)) /*current frame isn't a keyframe */ - use_this_block = 0; - } else if (block_bref != 0 || block_fref != 0) - use_this_block = 0; - } + if (mkv_d->v_skip_to_keyframe) + use_this_block = keyframe; } else if (track->type == MATROSKA_TRACK_SUBTITLE && track->id == demuxer->sub->id) { ds = demuxer->sub; @@ -2069,10 +2061,10 @@ static int handle_block(demuxer_t *demuxer, uint8_t *block, uint64_t length, for (i = 0; i < laces; i++) { if (ds == demuxer->video && track->realmedia) handle_realvideo(demuxer, track, block, lace_size[i], - block_bref); + keyframe); else if (ds == demuxer->audio && track->realmedia) handle_realaudio(demuxer, track, block, lace_size[i], - block_bref); + keyframe); else { int size = lace_size[i]; demux_packet_t *dp; @@ -2083,8 +2075,7 @@ static int handle_block(demuxer_t *demuxer, uint8_t *block, uint64_t length, memcpy(dp->buffer, buffer, size); if (buffer != block) talloc_free(buffer); - dp->flags = (block_bref == 0 - && block_fref == 0) ? 0x10 : 0; + dp->keyframe = keyframe; /* If default_duration is 0, assume no pts value is known * for packets after the first one (rather than all pts * values being the same) */ @@ -2122,7 +2113,7 @@ static int demux_mkv_fill_buffer(demuxer_t *demuxer, demux_stream_t *ds) while (1) { while (mkv_d->cluster_size > 0) { uint64_t block_duration = 0, block_length = 0; - int64_t block_bref = 0, block_fref = 0; + bool keyframe = true; uint8_t *block = NULL; while (mkv_d->blockgroup_size > 0) { @@ -2157,10 +2148,8 @@ static int demux_mkv_fill_buffer(demuxer_t *demuxer, demux_stream_t *ds) free(block); return 0; } - if (num <= 0) - block_bref = num; - else - block_fref = num; + if (num) + keyframe = false; break; case EBML_ID_INVALID: @@ -2177,8 +2166,7 @@ static int demux_mkv_fill_buffer(demuxer_t *demuxer, demux_stream_t *ds) if (block) { int res = handle_block(demuxer, block, block_length, - block_duration, block_bref, block_fref, - 0); + block_duration, keyframe, false); free(block); if (res < 0) return 0; @@ -2216,8 +2204,7 @@ static int demux_mkv_fill_buffer(demuxer_t *demuxer, demux_stream_t *ds) } l = tmp + block_length; res = handle_block(demuxer, block, block_length, - block_duration, block_bref, - block_fref, 1); + block_duration, false, true); free(block); mkv_d->cluster_size -= l + il; if (res < 0) diff --git a/libmpdemux/demux_mov.c b/libmpdemux/demux_mov.c index bccf808465..96fb1a2d86 100644 --- a/libmpdemux/demux_mov.c +++ b/libmpdemux/demux_mov.c @@ -2195,7 +2195,6 @@ if(trak->pos==0 && trak->stream_header_len>0){ trak->stream_header = NULL; trak->stream_header_len = 0; dp->pts=pts; - dp->flags=0; dp->pos=pos; // FIXME? ds_add_packet(ds,dp); } else diff --git a/libmpdemux/demux_nut.c b/libmpdemux/demux_nut.c index efa20e0c47..e6602ef506 100644 --- a/libmpdemux/demux_nut.c +++ b/libmpdemux/demux_nut.c @@ -238,7 +238,7 @@ static int demux_nut_fill_buffer(demuxer_t * demuxer, demux_stream_t * dsds) { dp->pts = pts; dp->pos = demuxer->filepos; - dp->flags= (pd.flags & NUT_FLAG_KEY) ? 0x10 : 0; + dp->keyframe = pd.flags & NUT_FLAG_KEY; {int len = pd.len; while ((ret = nut_read_frame(nut, &len, dp->buffer + pd.len-len)) == NUT_ERR_EAGAIN); diff --git a/libmpdemux/demux_ogg.c b/libmpdemux/demux_ogg.c index d38d68cb79..9eea061106 100644 --- a/libmpdemux/demux_ogg.c +++ b/libmpdemux/demux_ogg.c @@ -258,13 +258,13 @@ static int demux_ogg_get_page_stream(ogg_demuxer_t *ogg_d, } static unsigned char *demux_ogg_read_packet(ogg_stream_t *os, ogg_packet *pack, - float *pts, int *flags, + float *pts, bool *keyframe, int samplesize) { unsigned char *data = pack->packet; *pts = MP_NOPTS_VALUE; - *flags = 0; + *keyframe = false; if (os->vorbis) { if (*pack->packet & PACKET_TYPE_HEADER) { @@ -283,7 +283,7 @@ static unsigned char *demux_ogg_read_packet(ogg_stream_t *os, ogg_packet *pack, if (os->lastsize > 0) pack->granulepos += os->lastsize; } else - *flags = 1; + *keyframe = true; if (vi) *pts = pack->granulepos / (float)vi->rate; os->lastsize = blocksize; @@ -306,7 +306,7 @@ static unsigned char *demux_ogg_read_packet(ogg_stream_t *os, ogg_packet *pack, if (pack->granulepos >= 0) { os->lastpos = pack->granulepos >> keyframe_granule_shift; os->lastpos += pack->granulepos & iframemask; - *flags = (pack->granulepos & iframemask) == 0; + *keyframe = (pack->granulepos & iframemask) == 0; } else { os->lastpos++; } @@ -332,7 +332,7 @@ static unsigned char *demux_ogg_read_packet(ogg_stream_t *os, ogg_packet *pack, pack->granulepos = os->lastpos + (os->lastsize ? os->lastsize : 1); // If we already have a timestamp it can be a syncpoint if (*pack->packet & PACKET_IS_SYNCPOINT) - *flags = 1; + *keyframe = true; *pts = pack->granulepos / os->samplerate; // Save the packet length and timestamp os->lastsize = 0; @@ -474,10 +474,6 @@ static int demux_ogg_add_packet(demux_stream_t *ds, ogg_stream_t *os, int id, ogg_packet *pack) { demuxer_t *d = ds->demuxer; - demux_packet_t *dp; - unsigned char *data; - float pts = 0; - int flags = 0; int samplesize = 1; // If packet is an comment header then we try to get comments at first @@ -520,7 +516,10 @@ static int demux_ogg_add_packet(demux_stream_t *ds, ogg_stream_t *os, if (ds == d->audio && ((sh_audio_t*)ds->sh)->format == FOURCC_VORBIS) { samplesize = ((sh_audio_t *)ds->sh)->samplesize; } - data = demux_ogg_read_packet(os, pack, &pts, &flags, samplesize); + bool keyframe; + float pts; + unsigned char *data; + data = demux_ogg_read_packet(os, pack, &pts, &keyframe, samplesize); if (!data) return 0; @@ -530,14 +529,15 @@ static int demux_ogg_add_packet(demux_stream_t *ds, ogg_stream_t *os, vo_osd_changed(OSDTYPE_SUBTITLE); } /// Send the packet + struct demux_packet *dp; dp = new_demux_packet(pack->bytes - (data - pack->packet)); memcpy(dp->buffer, data, pack->bytes - (data - pack->packet)); dp->pts = pts; - dp->flags = flags; + dp->keyframe = keyframe; ds_add_packet(ds, dp); mp_msg(MSGT_DEMUX, MSGL_DBG2, - "New dp: %p ds=%p pts=%5.3f len=%d flag=%d \n", - dp, ds, pts, dp->len, flags); + "New dp: %p ds=%p pts=%5.3f len=%d keyframe=%d \n", + dp, ds, pts, dp->len, keyframe); return 1; } @@ -606,12 +606,12 @@ static void demux_ogg_scan_stream(demuxer_t *demuxer) p = 0; while (ogg_stream_packetout(oss, &op) == 1) { float pts; - int flags; + bool keyframe; - demux_ogg_read_packet(os, &op, &pts, &flags, samplesize); + demux_ogg_read_packet(os, &op, &pts, &keyframe, samplesize); if (op.granulepos >= 0) { ogg_d->final_granulepos = op.granulepos; - if (ogg_d->initial_granulepos == MP_NOPTS_VALUE && (flags & 1)) { + if (ogg_d->initial_granulepos == MP_NOPTS_VALUE && keyframe) { ogg_d->initial_granulepos = op.granulepos; if (index_mode != 2 && ogg_d->pos < demuxer->movi_end - 2 * 270000) { //the 270000 are just a wild guess @@ -621,7 +621,7 @@ static void demux_ogg_scan_stream(demuxer_t *demuxer) } } } - if (index_mode == 2 && (flags || (os->vorbis && op.granulepos >= 0))) { + if (index_mode == 2 && (keyframe || (os->vorbis && op.granulepos >= 0))) { if (ogg_d->num_syncpoint > SIZE_MAX / sizeof(ogg_syncpoint_t) - 1) break; ogg_d->syncpoints = realloc_struct(ogg_d->syncpoints, (ogg_d->num_syncpoint + 1), sizeof(ogg_syncpoint_t)); @@ -1415,7 +1415,7 @@ static void demux_ogg_seek(demuxer_t *demuxer, float rel_seek_secs, int np; int is_gp_valid; float pts; - int is_keyframe; + bool is_keyframe; int samplesize = 1; ogg_int64_t granulepos_orig; diff --git a/libmpdemux/demux_packet.h b/libmpdemux/demux_packet.h index 30cd0010f5..d64291f4e0 100644 --- a/libmpdemux/demux_packet.h +++ b/libmpdemux/demux_packet.h @@ -19,6 +19,7 @@ #ifndef MPLAYER_DEMUX_PACKET_H #define MPLAYER_DEMUX_PACKET_H +#include <stdbool.h> #include <sys/types.h> // Holds one packet/frame/whatever @@ -29,7 +30,7 @@ typedef struct demux_packet { double stream_pts; off_t pos; // position in index (AVI) or file (MPG) unsigned char *buffer; - int flags; // keyframe, etc + bool keyframe; int refcount; // counter for the master packet, if 0, buffer can be free()d struct demux_packet *master; //in clones, pointer to the master packet struct demux_packet *next; diff --git a/libmpdemux/demux_rawdv.c b/libmpdemux/demux_rawdv.c index f0b081318c..1e0a27e9f4 100644 --- a/libmpdemux/demux_rawdv.c +++ b/libmpdemux/demux_rawdv.c @@ -124,7 +124,6 @@ static int demux_rawdv_fill_buffer(demuxer_t *demuxer, demux_stream_t *ds) return 0; dp_video->pts=frames->current_frame/sh_video->fps; dp_video->pos=frames->current_filepos; - dp_video->flags=0; if (demuxer->audio && demuxer->audio->id>=-1) { diff --git a/libmpdemux/demux_real.c b/libmpdemux/demux_real.c index 687441f863..ea9c3046e0 100644 --- a/libmpdemux/demux_real.c +++ b/libmpdemux/demux_real.c @@ -794,7 +794,7 @@ got_audio: if (x * apk_usize % w == 0) dp->pts = priv->audio_timestamp[x * apk_usize / w]; dp->pos = priv->audio_filepos; // all equal - dp->flags = x ? 0 : 0x10; // Mark first packet as keyframe + dp->keyframe = !x; // Mark first packet as keyframe ds_add_packet(ds, dp); } } @@ -839,7 +839,7 @@ got_audio: dp->pts = timestamp/1000.0; priv->a_pts=timestamp; dp->pos = demuxer->filepos; - dp->flags = (flags & 0x2) ? 0x10 : 0; + dp->keyframe = flags & 0x2; ds_add_packet(ds, dp); } // codec_id check, codec default case @@ -1003,7 +1003,7 @@ got_video: dp = new_demux_packet(sizeof(dp_hdr_t)+vpkg_length+8*(1+2*(vpkg_header&0x3F))); // the timestamp seems to be in milliseconds dp->pos = demuxer->filepos; - dp->flags = (flags & 0x2) ? 0x10 : 0; + dp->keyframe = flags & 0x2; ds->asf_seq = vpkg_seqnum; dp_hdr=(dp_hdr_t*)dp->buffer; dp_hdr->chunks=0; diff --git a/libmpdemux/demux_realaud.c b/libmpdemux/demux_realaud.c index ece05edf1e..d42b98a023 100644 --- a/libmpdemux/demux_realaud.c +++ b/libmpdemux/demux_realaud.c @@ -139,7 +139,7 @@ static int demux_ra_fill_buffer(demuxer_t *demuxer, demux_stream_t *dsds) memcpy(dp->buffer, ra_priv->audio_buf + x * len, len); dp->pts = x ? 0 : demuxer->filepos / ra_priv->data_size; dp->pos = demuxer->filepos; // all equal - dp->flags = x ? 0 : 0x10; // Mark first packet as keyframe + dp->keyframe = !x; // Mark first packet as keyframe ds_add_packet(ds, dp); } } else { @@ -148,7 +148,6 @@ static int demux_ra_fill_buffer(demuxer_t *demuxer, demux_stream_t *dsds) dp->pts = demuxer->filepos / ra_priv->data_size; dp->pos = demuxer->filepos; - dp->flags = 0; ds_add_packet(ds, dp); } diff --git a/libmpdemux/demux_ts.c b/libmpdemux/demux_ts.c index 15c2613dc6..dbf12b7456 100644 --- a/libmpdemux/demux_ts.c +++ b/libmpdemux/demux_ts.c @@ -3132,7 +3132,7 @@ static int ts_parse(demuxer_t *demuxer , ES_stream_t *es, unsigned char *packet, } memmove(p, es->start, es->size); *dp_offset += es->size; - (*dp)->flags = 0; + (*dp)->keyframe = 0; (*dp)->pos = stream_tell(demuxer->stream); (*dp)->pts = es->pts; // subtitle packets must be returned immediately if possible diff --git a/libmpdemux/demux_ty.c b/libmpdemux/demux_ty.c index 7664eddc98..cc9bb8f902 100644 --- a/libmpdemux/demux_ty.c +++ b/libmpdemux/demux_ty.c @@ -294,7 +294,6 @@ static void demux_ty_CopyToDemuxPacket( demux_stream_t *ds, if (pts != MP_NOPTS_VALUE) dp->pts = pts / 90000.0; dp->pos = pos; - dp->flags = 0; ds_add_packet( ds, dp ); } diff --git a/libmpdemux/demux_y4m.c b/libmpdemux/demux_y4m.c index d1b6749820..cf0f7cf7e6 100644 --- a/libmpdemux/demux_y4m.c +++ b/libmpdemux/demux_y4m.c @@ -141,7 +141,6 @@ static int demux_y4m_fill_buffer(demuxer_t *demux, demux_stream_t *dsds) { dp->pts=(float)priv->framenum/((sh_video_t*)ds->sh)->fps; priv->framenum++; dp->pos=demux->filepos; - dp->flags=0; ds_add_packet(ds, dp); return 1; diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c index f8309b9f49..ea8c4e01f1 100644 --- a/libmpdemux/demuxer.c +++ b/libmpdemux/demuxer.c @@ -187,7 +187,7 @@ static struct demux_packet *create_packet(size_t len) dp->duration = -1; dp->stream_pts = MP_NOPTS_VALUE; dp->pos = 0; - dp->flags = 0; + dp->keyframe = false; dp->refcount = 1; dp->master = NULL; dp->buffer = NULL; @@ -601,14 +601,14 @@ void ds_clear_parser(demux_stream_t *ds) } void ds_read_packet(demux_stream_t *ds, stream_t *stream, int len, - double pts, off_t pos, int flags) + double pts, off_t pos, bool keyframe) { demux_packet_t *dp = new_demux_packet(len); len = stream_read(stream, dp->buffer, len); resize_demux_packet(dp, len); dp->pts = pts; dp->pos = pos; - dp->flags = flags; + dp->keyframe = keyframe; // append packet to DS stream: ds_add_packet(ds, dp); } @@ -652,7 +652,7 @@ int ds_fill_buffer(demux_stream_t *ds) ds->pts_bytes += p->len; // !!! if (p->stream_pts != MP_NOPTS_VALUE) demux->stream_pts = p->stream_pts; - ds->flags = p->flags; + ds->keyframe = p->keyframe; // unlink packet: ds->bytes -= p->len; ds->current = p; @@ -1000,11 +1000,8 @@ static struct demuxer *demux_open_stream(struct MPOpts *opts, if (!desc) // should only happen with obsolete -demuxer 99 numeric format return NULL; - demuxer = open_given_type(opts, desc, stream, force, audio_id, - video_id, sub_id, filename, params); - if (demuxer) - goto dmx_open; - return NULL; + return open_given_type(opts, desc, stream, force, audio_id, + video_id, sub_id, filename, params); } // Test demuxers with safe file checks @@ -1013,7 +1010,7 @@ static struct demuxer *demux_open_stream(struct MPOpts *opts, demuxer = open_given_type(opts, desc, stream, false, audio_id, video_id, sub_id, filename, params); if (demuxer) - goto dmx_open; + return demuxer; } } @@ -1026,7 +1023,7 @@ static struct demuxer *demux_open_stream(struct MPOpts *opts, demuxer = open_given_type(opts, desc, stream, false, audio_id, video_id, sub_id, filename, params); if (demuxer) - goto dmx_open; + return demuxer; } // Finally try detection for demuxers with unsafe checks @@ -1035,28 +1032,11 @@ static struct demuxer *demux_open_stream(struct MPOpts *opts, demuxer = open_given_type(opts, desc, stream, false, audio_id, video_id, sub_id, filename, params); if (demuxer) - goto dmx_open; + return demuxer; } } return NULL; - - dmx_open: - - if (demuxer->type == DEMUXER_TYPE_PLAYLIST) - return demuxer; - - struct sh_video *sh_video = demuxer->video->sh; - if (sh_video && sh_video->bih) { - int biComp = le2me_32(sh_video->bih->biCompression); - mp_msg(MSGT_DEMUX, MSGL_INFO, - "VIDEO: [%.4s] %dx%d %dbpp %5.3f fps %5.1f kbps (%4.1f kbyte/s)\n", - (char *) &biComp, sh_video->bih->biWidth, - sh_video->bih->biHeight, sh_video->bih->biBitCount, - sh_video->fps, sh_video->i_bps * 0.008f, - sh_video->i_bps / 1024.0f); - } - return demuxer; } struct demuxer *demux_open(struct MPOpts *opts, stream_t *vs, int file_format, diff --git a/libmpdemux/demuxer.h b/libmpdemux/demuxer.h index da751852d8..03b1fee830 100644 --- a/libmpdemux/demuxer.h +++ b/libmpdemux/demuxer.h @@ -136,7 +136,7 @@ typedef struct demux_stream { off_t pos; // position in the input stream (file) off_t dpos; // position in the demuxed stream int pack_no; // serial number of packet - int flags; // flags of current packet (keyframe etc) + bool keyframe; // keyframe flag of current packet int non_interleaved; // 1 if this stream is not properly interleaved, // so e.g. subtitle handling must do explicit reads. //--------------- @@ -316,7 +316,7 @@ void free_demuxer(struct demuxer *demuxer); void ds_add_packet(struct demux_stream *ds, struct demux_packet *dp); void ds_read_packet(struct demux_stream *ds, struct stream *stream, int len, - double pts, off_t pos, int flags); + double pts, off_t pos, bool keyframe); int demux_fill_buffer(struct demuxer *demux, struct demux_stream *ds); int ds_fill_buffer(struct demux_stream *ds); diff --git a/libmpdemux/ebml_defs.c b/libmpdemux/ebml_defs.c deleted file mode 100644 index b683312079..0000000000 --- a/libmpdemux/ebml_defs.c +++ /dev/null @@ -1,424 +0,0 @@ -// Generated by TOOLS/matroska.py, do not edit manually - - -E("TagString", tag_string, EBML_TYPE_STR) - -E("TagLanguage", tag_language, EBML_TYPE_STR) - -E("TagName", tag_name, EBML_TYPE_STR) - -#define N simple_tag -E_S("SimpleTag", 3) -F(MATROSKA_ID_TAGNAME, tag_name, 0) -F(MATROSKA_ID_TAGLANGUAGE, tag_language, 0) -F(MATROSKA_ID_TAGSTRING, tag_string, 0) -}}; -#undef N - -E("TargetAttachmentUID", target_attachment_uid, EBML_TYPE_UINT) - -E("TargetChapterUID", target_chapter_uid, EBML_TYPE_UINT) - -E("TargetEditionUID", target_edition_uid, EBML_TYPE_UINT) - -E("TargetTrackUID", target_track_uid, EBML_TYPE_UINT) - -E("TargetTypeValue", target_type_value, EBML_TYPE_UINT) - -#define N targets -E_S("Targets", 5) -F(MATROSKA_ID_TARGETTYPEVALUE, target_type_value, 0) -F(MATROSKA_ID_TARGETTRACKUID, target_track_uid, 0) -F(MATROSKA_ID_TARGETEDITIONUID, target_edition_uid, 0) -F(MATROSKA_ID_TARGETCHAPTERUID, target_chapter_uid, 0) -F(MATROSKA_ID_TARGETATTACHMENTUID, target_attachment_uid, 0) -}}; -#undef N - -#define N tag -E_S("Tag", 2) -F(MATROSKA_ID_TARGETS, targets, 0) -F(MATROSKA_ID_SIMPLETAG, simple_tag, 1) -}}; -#undef N - -#define N tags -E_S("Tags", 1) -F(MATROSKA_ID_TAG, tag, 1) -}}; -#undef N - -E("ChapCountry", chap_country, EBML_TYPE_STR) - -E("ChapLanguage", chap_language, EBML_TYPE_STR) - -E("ChapString", chap_string, EBML_TYPE_STR) - -#define N chapter_display -E_S("ChapterD |