Просмотр исходного кода

sink_buffer: implement fixed frame size.

Nicolas George 12 лет назад
Родитель
Сommit
1f5c1333a7
2 измененных файлов с 17 добавлено и 0 удалено
  1. 9 0
      libavfilter/buffersink.h
  2. 8 0
      libavfilter/sink_buffer.c

+ 9 - 0
libavfilter/buffersink.h

@@ -55,6 +55,15 @@ typedef struct {
  */
 AVABufferSinkParams *av_abuffersink_params_alloc(void);
 
+/**
+ * Set the frame size for an audio buffer sink.
+ *
+ * All calls to av_buffersink_get_buffer_ref will return a buffer with
+ * exactly the specified number of samples, or AVERROR(EAGAIN) if there is
+ * not enough. The last buffer at EOF will be padded with 0.
+ */
+void av_buffersink_set_frame_size(AVFilterContext *ctx, unsigned frame_size);
+
 /**
  * Tell av_buffersink_get_buffer_ref() to read video/samples buffer
  * reference, but not remove it from the buffer. This is useful if you

+ 8 - 0
libavfilter/sink_buffer.c

@@ -125,6 +125,14 @@ static void end_frame(AVFilterLink *inlink)
     }
 }
 
+void av_buffersink_set_frame_size(AVFilterContext *ctx, unsigned frame_size)
+{
+    AVFilterLink *inlink = ctx->inputs[0];
+
+    inlink->min_samples = inlink->max_samples =
+    inlink->partial_buf_size = frame_size;
+}
+
 int av_buffersink_get_buffer_ref(AVFilterContext *ctx,
                                   AVFilterBufferRef **bufref, int flags)
 {