Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static int poll_filter(OutputStream *ost)
- {
- OutputFile *of = output_files[ost->file_index];
- AVFrame *filtered_frame = NULL;
- int frame_size, ret;
- #ifdef HAVE_PTHREAD
- //pthread_mutex_lock(&filter_lock);
- #endif
- if (!(filtered_frame = av_frame_alloc())) {
- printf("AVERROR(ENOMEM)\n");
- return AVERROR(ENOMEM);
- }
- printf("Alloc %p from %p\n", filtered_frame, pthread_self());
- if (ost->enc->type == AVMEDIA_TYPE_AUDIO &&
- !(ost->enc->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE))
- ret = av_buffersink_get_samples(ost->filter->filter, filtered_frame,
- ost->enc_ctx->frame_size);
- else
- ret = av_buffersink_get_frame(ost->filter->filter, filtered_frame);
- if (ret < 0)
- return ret;
- if (filtered_frame->pts != AV_NOPTS_VALUE) {
- int64_t start_time = (of->start_time == AV_NOPTS_VALUE) ? 0 : of->start_time;
- filtered_frame->pts = av_rescale_q(filtered_frame->pts,
- ost->filter->filter->inputs[0]->time_base,
- ost->enc_ctx->time_base) -
- av_rescale_q(start_time,
- AV_TIME_BASE_Q,
- ost->enc_ctx->time_base);
- }
- switch (ost->filter->filter->inputs[0]->type) {
- case AVMEDIA_TYPE_VIDEO:
- if (!ost->frame_aspect_ratio)
- ost->enc_ctx->sample_aspect_ratio = filtered_frame->sample_aspect_ratio;
- do_video_out(of->ctx, ost, filtered_frame, &frame_size);
- if (vstats_filename && frame_size)
- do_video_stats(ost, frame_size);
- break;
- case AVMEDIA_TYPE_AUDIO:
- do_audio_out(of->ctx, ost, filtered_frame);
- break;
- default:
- // TODO support subtitle filters
- av_assert0(0);
- }
- printf("Unref %p from %p\n", filtered_frame, pthread_self());
- av_frame_unref(filtered_frame);
- #ifdef HAVE_PTHREAD
- //pthread_mutex_unlock(&filter_lock);
- #endif
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement