示例#1
0
文件: avfilter.c 项目: Fatbag/libav
int avfilter_config_links(AVFilterContext *filter)
{
    int (*config_link)(AVFilterLink *);
    unsigned i;
    int ret;

    for (i = 0; i < filter->input_count; i ++) {
        AVFilterLink *link = filter->inputs[i];

        if (!link) continue;

        switch (link->init_state) {
        case AVLINK_INIT:
            continue;
        case AVLINK_STARTINIT:
            av_log(filter, AV_LOG_INFO, "circular filter chain detected\n");
            return 0;
        case AVLINK_UNINIT:
            link->init_state = AVLINK_STARTINIT;

            if ((ret = avfilter_config_links(link->src)) < 0)
                return ret;

            if (!(config_link = link->srcpad->config_props))
                config_link  = avfilter_default_config_output_link;
            if ((ret = config_link(link)) < 0)
                return ret;

            if (link->time_base.num == 0 && link->time_base.den == 0)
                link->time_base = link->src && link->src->input_count ?
                    link->src->inputs[0]->time_base : AV_TIME_BASE_Q;

            if (link->sample_aspect_ratio.num == 0 && link->sample_aspect_ratio.den == 0)
                link->sample_aspect_ratio = link->src->input_count ?
                    link->src->inputs[0]->sample_aspect_ratio : (AVRational){1,1};

            if ((config_link = link->dstpad->config_props))
                if ((ret = config_link(link)) < 0)
                    return ret;

            link->init_state = AVLINK_INIT;
        }
    }

    return 0;
}
示例#2
0
int avfilter_config_links(AVFilterContext *filter)
{
    int (*config_link)(AVFilterLink *);
    unsigned i;
    int ret;

    for (i = 0; i < filter->nb_inputs; i ++) {
        AVFilterLink *link = filter->inputs[i];
        AVFilterLink *inlink;

        if (!link) continue;
        if (!link->src || !link->dst) {
            av_log(filter, AV_LOG_ERROR,
                   "Not all input and output are properly linked (%d).\n", i);
            return AVERROR(EINVAL);
        }

        inlink = link->src->nb_inputs ? link->src->inputs[0] : NULL;
        link->current_pts = AV_NOPTS_VALUE;

        switch (link->init_state) {
        case AVLINK_INIT:
            continue;
        case AVLINK_STARTINIT:
            av_log(filter, AV_LOG_INFO, "circular filter chain detected\n");
            return 0;
        case AVLINK_UNINIT:
            link->init_state = AVLINK_STARTINIT;

            if ((ret = avfilter_config_links(link->src)) < 0)
                return ret;

            if (!(config_link = link->srcpad->config_props)) {
                if (link->src->nb_inputs != 1) {
                    av_log(link->src, AV_LOG_ERROR, "Source filters and filters "
                                                    "with more than one input "
                                                    "must set config_props() "
                                                    "callbacks on all outputs\n");
                    return AVERROR(EINVAL);
                }
            } else if ((ret = config_link(link)) < 0) {
                av_log(link->src, AV_LOG_ERROR,
                       "Failed to configure output pad on %s\n",
                       link->src->name);
                return ret;
            }

            switch (link->type) {
            case AVMEDIA_TYPE_VIDEO:
                if (!link->time_base.num && !link->time_base.den)
                    link->time_base = inlink ? inlink->time_base : AV_TIME_BASE_Q;

                if (!link->sample_aspect_ratio.num && !link->sample_aspect_ratio.den)
                    link->sample_aspect_ratio = inlink ?
                        inlink->sample_aspect_ratio : (AVRational){1,1};

                if (inlink && !link->frame_rate.num && !link->frame_rate.den)
                    link->frame_rate = inlink->frame_rate;

                if (inlink) {
                    if (!link->w)
                        link->w = inlink->w;
                    if (!link->h)
                        link->h = inlink->h;
                } else if (!link->w || !link->h) {
                    av_log(link->src, AV_LOG_ERROR,
                           "Video source filters must set their output link's "
                           "width and height\n");
                    return AVERROR(EINVAL);
                }
                break;

            case AVMEDIA_TYPE_AUDIO:
                if (inlink) {
                    if (!link->time_base.num && !link->time_base.den)
                        link->time_base = inlink->time_base;
                }

                if (!link->time_base.num && !link->time_base.den)
                    link->time_base = (AVRational) {1, link->sample_rate};
            }

            if ((config_link = link->dstpad->config_props))
                if ((ret = config_link(link)) < 0) {
                    av_log(link->dst, AV_LOG_ERROR,
                           "Failed to configure input pad on %s\n",
                           link->dst->name);
                    return ret;
                }

            link->init_state = AVLINK_INIT;
        }
    }

    return 0;
}
示例#3
0
文件: avfilter.c 项目: siretart/libav
int avfilter_config_links(AVFilterContext *filter)
{
    int (*config_link)(AVFilterLink *);
    unsigned i;
    int ret;

    for (i = 0; i < filter->nb_inputs; i ++) {
        AVFilterLink *link = filter->inputs[i];

        if (!link) continue;

        switch (link->init_state) {
        case AVLINK_INIT:
            continue;
        case AVLINK_STARTINIT:
            av_log(filter, AV_LOG_INFO, "circular filter chain detected\n");
            return 0;
        case AVLINK_UNINIT:
            link->init_state = AVLINK_STARTINIT;

            if ((ret = avfilter_config_links(link->src)) < 0)
                return ret;

            if (!(config_link = link->srcpad->config_props)) {
                if (link->src->nb_inputs != 1) {
                    av_log(link->src, AV_LOG_ERROR, "Source filters and filters "
                                                    "with more than one input "
                                                    "must set config_props() "
                                                    "callbacks on all outputs\n");
                    return AVERROR(EINVAL);
                }
            } else if ((ret = config_link(link)) < 0) {
                av_log(link->src, AV_LOG_ERROR,
                       "Failed to configure output pad on %s\n",
                       link->src->name);
                return ret;
            }

            if (link->time_base.num == 0 && link->time_base.den == 0)
                link->time_base = link->src && link->src->nb_inputs ?
                    link->src->inputs[0]->time_base : AV_TIME_BASE_Q;

            if (link->type == AVMEDIA_TYPE_VIDEO) {
                if (!link->sample_aspect_ratio.num && !link->sample_aspect_ratio.den)
                    link->sample_aspect_ratio = link->src->nb_inputs ?
                        link->src->inputs[0]->sample_aspect_ratio : (AVRational){1,1};

                if (link->src->nb_inputs) {
                    if (!link->w)
                        link->w = link->src->inputs[0]->w;
                    if (!link->h)
                        link->h = link->src->inputs[0]->h;
                } else if (!link->w || !link->h) {
                    av_log(link->src, AV_LOG_ERROR,
                           "Video source filters must set their output link's "
                           "width and height\n");
                    return AVERROR(EINVAL);
                }
            }

            if ((config_link = link->dstpad->config_props))
                if ((ret = config_link(link)) < 0) {
                    av_log(link->src, AV_LOG_ERROR,
                           "Failed to configure input pad on %s\n",
                           link->dst->name);
                    return ret;
                }

            link->init_state = AVLINK_INIT;
        }
    }

    return 0;
}
示例#4
0
int avfilter_config_links(AVFilterContext *filter)
{
    int (*config_link)(AVFilterLink *);
    unsigned i;
    int ret;

    for (i = 0; i < filter->nb_inputs; i ++) {
        AVFilterLink *link = filter->inputs[i];

        if (!link) continue;
        if (!link->src || !link->dst) {
            av_log(filter, AV_LOG_ERROR,
                   "Not all input and output are properly linked (%d).\n", i);
            return AVERROR(EINVAL);
        }

        switch (link->init_state) {
        case AVLINK_INIT:
            continue;
        case AVLINK_STARTINIT:
            av_log(filter, AV_LOG_INFO, "circular filter chain detected\n");
            return 0;
        case AVLINK_UNINIT:
            link->init_state = AVLINK_STARTINIT;

            if ((ret = avfilter_config_links(link->src)) < 0)
                return ret;

            if (!(config_link = link->srcpad->config_props)) {
                if (link->src->nb_inputs != 1) {
                    av_log(link->src, AV_LOG_ERROR, "Source filters and filters "
                                                    "with more than one input "
                                                    "must set config_props() "
                                                    "callbacks on all outputs\n");
                    return AVERROR(EINVAL);
                }
            } else if ((ret = config_link(link)) < 0) {
                av_log(link->src, AV_LOG_ERROR,
                       "Failed to configure output pad on %s\n",
                       link->src->name);
                return ret;
            }

            if (link->time_base.num == 0 && link->time_base.den == 0)
                link->time_base = link->src->nb_inputs ?
                    link->src->inputs[0]->time_base : AV_TIME_BASE_Q;

            if (link->type == AVMEDIA_TYPE_VIDEO) {
                if (!link->sample_aspect_ratio.num && !link->sample_aspect_ratio.den)
                    link->sample_aspect_ratio = link->src->nb_inputs ?
                        link->src->inputs[0]->sample_aspect_ratio : (AVRational){1,1};

                if (link->src->nb_inputs) {
                    if (!link->frame_rate.num && !link->frame_rate.den)
                        link->frame_rate = link->src->inputs[0]->frame_rate;
                    if (!link->w)
                        link->w = link->src->inputs[0]->w;
                    if (!link->h)
                        link->h = link->src->inputs[0]->h;
                } else if (!link->w || !link->h) {
                    av_log(link->src, AV_LOG_ERROR,
                           "Video source filters must set their output link's "
                           "width and height\n");
                    return AVERROR(EINVAL);
                }
            }

            if (link->src->nb_inputs && link->src->inputs[0]->hw_frames_ctx &&
                !(link->src->filter->flags_internal & FF_FILTER_FLAG_HWFRAME_AWARE)) {
                av_assert0(!link->hw_frames_ctx &&
                           "should not be set by non-hwframe-aware filter");
                link->hw_frames_ctx = av_buffer_ref(link->src->inputs[0]->hw_frames_ctx);
                if (!link->hw_frames_ctx)
                    return AVERROR(ENOMEM);
            }

            if ((config_link = link->dstpad->config_props))
                if ((ret = config_link(link)) < 0) {
                    av_log(link->dst, AV_LOG_ERROR,
                           "Failed to configure input pad on %s\n",
                           link->dst->name);
                    return ret;
                }

            link->init_state = AVLINK_INIT;
        }
    }

    return 0;
}
PUBLIC int application_layer_init(uint16_t num_host)
{
    int option =0, tam_window =0, ret_send=0, ret_recived=0, tam_buffer=0;
	uint16_t ips =0, dest=0, dest_ips=0, ret_connect =0, sp;
	char file_name[50];
	int l, c, d, mtu;
	uint16_t remote_host;
	//entra num loop at� o usuário solicitar o termino do programa
    while(option != 14)
   {
		LOG("BEM VINDO A CAMADA DE APLICACAO \n1 - Abrir ponto de servico(<void>)\n2 - Fechar ponto de servico(<IPS>)\n3 - conectar(<No de Destino>,<IPS>,<tamanho da janela>)\n4 - Fechar conexão do ponto de servico(<IPS>)\n5 - enviar(<IPS>)\n6 - receber(<IPS>)\n7 - baixar(<IPS>, <nome_arquivo>)\n8 - enviar arquivo(<IPS>)\n9 - Exibe tabela de rotas\n10 - Configurar o adulterador\n11 - Desabilitar enlace\n12 - Habilitar enlace\n13 - Depurar\n14 - Sair da camada de aplicacao\n Informe o numero do que deseja executar: ");
		scanf("%d",&option);
		__fpurge(stdin);
		switch(option)
		{
			case 1: //responsavel por abertura do ponto de servico
				LOG("Solicitacao de ponto de servico realizada!");
				
				ips = alloc_service_point();
				LOG ("Numero do ponto de servico: %u\n", ips);

				break;
			case 2: //responsavel por fechamento do ponto de servico
				LOG("Informe o ips:");
				scanf("%hd",&sp);
				__fpurge(stdin);
				dalloc_service_point(sp);
				LOG ("Ponto de servico %u fechado com sucesso!\n", sp);
				break;
			case 3: //responsavel por conectar
				LOG("Solicitacao para conectar!");
				
				LOG("Informe o ips origem:");
				scanf("%hd",&sp);
				__fpurge(stdin);
				
				LOG("Informe o destino (no):");
				scanf("%hd",&dest);
				__fpurge(stdin);
				
				LOG("Informe o destino (ips):");
				scanf("%hd",&dest_ips);
				__fpurge(stdin);
				
				LOG("Informe o tamanho da janela:");
				scanf("%d",&tam_window);
				__fpurge(stdin);
				
				ret_connect = connect_point(sp, dest, dest_ips,tam_window);
				LOG ("Retorno do conectar = %d\n", ret_connect);
				break;
			case 4: //responsavel por fechamento de conexão
				LOG("Informe o ips:");
				scanf("%hd",&sp);
				__fpurge(stdin);
				close_conn(sp);
				LOG ("Ponto de servico %u desconectado com sucesso!\n", sp);
				break;
			case 5: //responsavel por funcao de enviar
				LOG("Solicitacao para enviar!");
				
				LOG("Informe o ips:");
				scanf("%hd",&sp);
				__fpurge(stdin);
				
				LOG("Informe o tamanho (bytes) da mensagem que deseja enviar:");
				scanf("%d",&tam_buffer);
				__fpurge(stdin);
				
				char *str = (char*) malloc(tam_buffer * sizeof(char));
				 
				LOG("Infome a msg que deseja enviar:");
				scanf("%[^\n]",str);
				__fpurge(stdin);
				LOG ("MSG recebida: %s\n", str);
				ret_send = send_point(sp, str, (tam_buffer * sizeof(char)));
				LOG ("Tamanho da msg: %u",(tam_buffer * sizeof(char)));
				LOG ("Quantidade de bytes enviados = %d\n", ret_send);
				tam_buffer =0;
				free(str);
				break;
			case 6: //responsavel por funcao de receber
				LOG("Solicitacao para receber!");
				
				LOG("Informe o ips:");
				scanf("%hd",&sp);
				__fpurge(stdin);
				
				LOG("Informe o tamanho (bytes) da mensagem que deseja receber:");
				scanf("%d",&tam_buffer);
				__fpurge(stdin);
				
				char *str2 = (char*) malloc(tam_buffer * sizeof(char));
				
				ret_recived = recv_point(sp, str2, (tam_buffer * sizeof(char)));
				
				LOG ("Quantidade de bytes recebidos = %d", ret_recived);
				LOG ("MSG recebida: %s\n", str2);
				
				tam_buffer =0;
				free(str2);
				break;
			case 7: //responsavel por fazer o download de um arquivo
				LOG("Informe o ips:");
				scanf("%hd",&sp);
				__fpurge(stdin);
				LOG("Infome o nome do arquivo que deseja baixar:");
				scanf("%[^\n]",file_name);
				__fpurge(stdin);
				download(sp, file_name);
				break;
			case 8: //responsavel por fazer o upload de um arquivo
				LOG("Informe o ips:");
				scanf("%hd",&sp);
				__fpurge(stdin);
				upload(sp);
				break;
			case 9:
				/* Exibe a tabela de rotas*/
				dislpay_routes();
				break;
			case 10: //configura o adulterador
				//conf_adulterador(Perda, Corrupção, Duplicação), ca(...)
				LOG("Configuracao do adulterador:");
				printf("Informe a porcentagem de perda:");
				scanf("%d",&l);
				__fpurge(stdin);
				printf("Informe a porcentagem de corrupcao:");
				scanf("%d",&c);
				__fpurge(stdin);
				printf("Informe a porcentagem de duplicacao:");
				scanf("%d",&d);
				__fpurge(stdin);
				config_garbler(l, c, d);
				break;
			case 11: //desabilita um enlace
				//desabilitar_enlace(NóRem), de(...)
				printf("Informe o no remoto para desabilitar:");
				scanf("%hu", &remote_host);
				__fpurge(stdin);
				disable_route(remote_host);
				config_link(num_host, remote_host, -1);
				break;
			case 12: //habilita um enlace
				//habilitar_enlace(NóRem), he(...)
				printf("Informe o no remoto para habilitar:");
				scanf("%hu", &remote_host);
				__fpurge(stdin);
				printf("Informe mtu para habilitar:");
				scanf("%d",&mtu);
				__fpurge(stdin);
				enable_route(remote_host);
				config_link(num_host, remote_host, mtu);
				break;
			case 13: //depurar
				//depurar, dp
				depurar();
				break;
			case 14: //Fecha a camada de Aplicação
				LOG("Camada de APLICACAO terminou com sucesso.\n");
				break;
			default:
				LOG("Opcao invalida! Escolha Novamente.\n");
				break;
		}
   }
   return OK;

}