Advertisement
elvman

Untitled

Nov 24th, 2015
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.12 KB | None | 0 0
  1. static int poll_filter(OutputStream *ost)
  2. {
  3.     OutputFile    *of = output_files[ost->file_index];
  4.     AVFrame *filtered_frame = NULL;
  5.     int frame_size, ret;
  6.  
  7. #ifdef HAVE_PTHREAD
  8.     //pthread_mutex_lock(&filter_lock);
  9. #endif
  10.  
  11.     if (!(filtered_frame = av_frame_alloc())) {
  12.         printf("AVERROR(ENOMEM)\n");
  13.         return AVERROR(ENOMEM);
  14.     }
  15.  
  16.     printf("Alloc %p from %p\n", filtered_frame, pthread_self());
  17.    
  18.     if (ost->enc->type == AVMEDIA_TYPE_AUDIO &&
  19.         !(ost->enc->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE))
  20.         ret = av_buffersink_get_samples(ost->filter->filter, filtered_frame,
  21.                                          ost->enc_ctx->frame_size);
  22.     else
  23.         ret = av_buffersink_get_frame(ost->filter->filter, filtered_frame);
  24.  
  25.     if (ret < 0)
  26.         return ret;
  27.  
  28.     if (filtered_frame->pts != AV_NOPTS_VALUE) {
  29.         int64_t start_time = (of->start_time == AV_NOPTS_VALUE) ? 0 : of->start_time;
  30.         filtered_frame->pts = av_rescale_q(filtered_frame->pts,
  31.                                            ost->filter->filter->inputs[0]->time_base,
  32.                                            ost->enc_ctx->time_base) -
  33.                               av_rescale_q(start_time,
  34.                                            AV_TIME_BASE_Q,
  35.                                            ost->enc_ctx->time_base);
  36.     }
  37.    
  38.     switch (ost->filter->filter->inputs[0]->type) {
  39.     case AVMEDIA_TYPE_VIDEO:
  40.         if (!ost->frame_aspect_ratio)
  41.             ost->enc_ctx->sample_aspect_ratio = filtered_frame->sample_aspect_ratio;
  42.  
  43.         do_video_out(of->ctx, ost, filtered_frame, &frame_size);
  44.         if (vstats_filename && frame_size)
  45.             do_video_stats(ost, frame_size);
  46.         break;
  47.     case AVMEDIA_TYPE_AUDIO:
  48.         do_audio_out(of->ctx, ost, filtered_frame);
  49.         break;
  50.     default:
  51.         // TODO support subtitle filters
  52.         av_assert0(0);
  53.     }
  54.  
  55.     printf("Unref %p from %p\n", filtered_frame, pthread_self());
  56.     av_frame_unref(filtered_frame);
  57.    
  58. #ifdef HAVE_PTHREAD
  59.     //pthread_mutex_unlock(&filter_lock);
  60. #endif
  61.  
  62.     return 0;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement