代码在两个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端发送数据
扒拉几天了还没有扒拉出来,非常感谢
|