SRCB 发表于 2019-4-28 18:18:51

overlay时,filter输出端get到数据时总是提示AVERROR(EAGAIN)

代码在两个mp4文件做overlay的时候可以正常工作;但将其中的一路换成Usb口的数据流时,filtersink获取数据的时候就出现AVERROR(EAGAIN);一直到mp4文件到最后一帧,才可以正常的获取。
filter的创建如下:

        sprintf_s(args, sizeof(args),
                "video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:pixel_aspect=%d/%d:sws_param=flags=%d:frame_rate=%d/%d",
                input_dec_ctx->width, input_dec_ctx->height, input_dec_ctx->pix_fmt,
                video_st->time_base.num, video_st->time_base.den,
                input_dec_ctx->sample_aspect_ratio.num, input_dec_ctx->sample_aspect_ratio.den,
                SWS_BILINEAR + ((video_st->codec->flags&AV_CODEC_FLAG_BITEXACT) ? SWS_BITEXACT : 0),
                video_st->r_frame_rate.num, video_st->r_frame_rate.den);

        printf("video_config_input_filter args = %s\n", args);
        ret = avfilter_graph_create_filter(input_filter_ctx, filter, "src_in", args, NULL, filter_graph);

      .......
    ret = avfilter_link(*input_filter_ctx, 0, first_filter, pad_idx);
////////////////////////////////////////////////////
ret = avfilter_graph_request_oldest(filter_graph);//filter执行的一个过程
av_buffersink_get_frame_flags(buffersink_ctx, filtered_frame,AV_BUFFERSINK_FLAG_NO_REQUEST);//filtersink端获取数据
av_buffersrc_add_frame_flags(buffersrc_ctx, mVideoFrame, AV_BUFFERSRC_FLAG_PUSH)//filter src端发送数据

扒拉几天了还没有扒拉出来,非常感谢


孙悟空 发表于 2019-5-4 20:33:22

mp4的话,moov是在mdat前面不

SRCB 发表于 2019-5-6 13:39:01

moov 是在mdata后边,我找了个转换函数,把moov放在mdata前生成了一个新的mp4,暴风影音就播放不了这个文件,然后avformat_open_input时就失败了
页: [1]
查看完整版本: overlay时,filter输出端get到数据时总是提示AVERROR(EAGAIN)