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: