Mercurial > mplayer.hg
comparison libmpdemux/demux_lavf.c @ 24843:2bd6d730782f
permit the transititions no stream <-> some streams and viceversa (needed for forthcoming program switching patch)
author | nicodvb |
---|---|
date | Sat, 27 Oct 2007 19:04:37 +0000 |
parents | d5f716b49cb4 |
children | 4559076416de |
comparison
equal
deleted
inserted
replaced
24842:d5f716b49cb4 | 24843:2bd6d730782f |
---|---|
630 { | 630 { |
631 ds = demuxer->audio; | 631 ds = demuxer->audio; |
632 nstreams = priv->audio_streams; | 632 nstreams = priv->audio_streams; |
633 pstreams = priv->astreams; | 633 pstreams = priv->astreams; |
634 } | 634 } |
635 if(ds->id == -2) | 635 if(id == -2) |
636 return DEMUXER_CTRL_NOTIMPL; | 636 { |
637 if(ds->id >= 0) | |
638 priv->avfc->streams[ds->id]->discard = AVDISCARD_ALL; | |
639 ds_free_packs(ds); | |
640 *((int*)arg) = ds->id = -2; | |
641 return DEMUXER_CTRL_OK; | |
642 } | |
637 for(i = 0; i < nstreams; i++) | 643 for(i = 0; i < nstreams; i++) |
638 { | 644 { |
639 if(pstreams[i] == ds->id) //current stream id | 645 if(pstreams[i] == ds->id) //current stream id |
640 { | 646 { |
641 curridx = i; | 647 curridx = i; |
657 newid = id; | 663 newid = id; |
658 break; | 664 break; |
659 } | 665 } |
660 } | 666 } |
661 } | 667 } |
662 if(newid == -2 || i == curridx) | 668 if(i == curridx) |
663 return DEMUXER_CTRL_NOTIMPL; | 669 return DEMUXER_CTRL_NOTIMPL; |
664 else | 670 else |
665 { | 671 { |
666 ds_free_packs(ds); | 672 ds_free_packs(ds); |
673 if(ds->id >= 0) | |
667 priv->avfc->streams[ds->id]->discard = AVDISCARD_ALL; | 674 priv->avfc->streams[ds->id]->discard = AVDISCARD_ALL; |
668 *((int*)arg) = ds->id = newid; | 675 *((int*)arg) = ds->id = newid; |
676 if(newid >= 0) | |
669 priv->avfc->streams[newid]->discard = AVDISCARD_NONE; | 677 priv->avfc->streams[newid]->discard = AVDISCARD_NONE; |
670 return DEMUXER_CTRL_OK; | 678 return DEMUXER_CTRL_OK; |
671 } | 679 } |
672 } | 680 } |
673 default: | 681 default: |