comparison libmpdemux/demux_lavf.c @ 29803:3b42ce7b09cf

Remove an empty program if the one requested by IDENTIFY_PROGRAM does not exist instead of incorrectly claiming that the demuxer does not support programs.
author reimar
date Sat, 07 Nov 2009 11:09:23 +0000
parents 3819fcdeaaf8
children b9350576d4fc
comparison
equal deleted inserted replaced
29802:c2e91cf65729 29803:3b42ce7b09cf
709 demux_program_t *prog = arg; 709 demux_program_t *prog = arg;
710 AVProgram *program; 710 AVProgram *program;
711 int p, i; 711 int p, i;
712 int start; 712 int start;
713 713
714 if(priv->avfc->nb_programs < 2) 714 prog->vid = prog->aid = prog->sid = -2; //no audio and no video by default
715 return DEMUXER_CTRL_NOTIMPL; 715 if(priv->avfc->nb_programs < 1)
716 return DEMUXER_CTRL_DONTKNOW;
716 717
717 if(prog->progid == -1) 718 if(prog->progid == -1)
718 { 719 {
719 p = 0; 720 p = 0;
720 while(p<priv->avfc->nb_programs && priv->avfc->programs[p]->id != priv->cur_program) 721 while(p<priv->avfc->nb_programs && priv->avfc->programs[p]->id != priv->cur_program)
725 { 726 {
726 for(i=0; i<priv->avfc->nb_programs; i++) 727 for(i=0; i<priv->avfc->nb_programs; i++)
727 if(priv->avfc->programs[i]->id == prog->progid) 728 if(priv->avfc->programs[i]->id == prog->progid)
728 break; 729 break;
729 if(i==priv->avfc->nb_programs) 730 if(i==priv->avfc->nb_programs)
730 return DEMUXER_CTRL_NOTIMPL; 731 return DEMUXER_CTRL_DONTKNOW;
731 p = i; 732 p = i;
732 } 733 }
733 prog->vid = prog->aid = prog->sid = -2; //no audio and no video by default
734 start = p; 734 start = p;
735 redo: 735 redo:
736 program = priv->avfc->programs[p]; 736 program = priv->avfc->programs[p];
737 for(i=0; i<program->nb_stream_indexes; i++) 737 for(i=0; i<program->nb_stream_indexes; i++)
738 { 738 {