* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include "libavutil/avassert.h"
+#include "libavutil/avstring.h"
+#include "libavutil/channel_layout.h"
#include "libavutil/common.h"
+#include "libavutil/imgutils.h"
#include "libavutil/pixdesc.h"
#include "libavutil/rational.h"
-#include "libavutil/audioconvert.h"
-#include "libavutil/avassert.h"
-#include "libavutil/avstring.h"
+#include "libavutil/samplefmt.h"
+#include "audio.h"
#include "avfilter.h"
#include "formats.h"
#include "internal.h"
int avfilter_register(AVFilter *filter)
{
+ int i;
+
if (next_registered_avfilter_idx == MAX_REGISTERED_AVFILTERS_NB) {
av_log(NULL, AV_LOG_ERROR,
"Maximum number of registered filters %d reached, "
return AVERROR(ENOMEM);
}
+ for(i=0; filter->inputs && filter->inputs[i].name; i++) {
+ const AVFilterPad *input = &filter->inputs[i];
+ av_assert0( !input->filter_frame
+ || (!input->start_frame && !input->end_frame && !input->draw_slice));
+ }
+
registered_avfilters[next_registered_avfilter_idx++] = filter;
return 0;
}
{
return pads[pad_idx].type;
}
+
+int ff_filter_frame(AVFilterLink *link, AVFilterBufferRef *frame)
+{
+ int ret;
+ FF_TPRINTF_START(NULL, filter_frame); ff_tlog_link(NULL, link, 1); ff_tlog(NULL, " "); ff_tlog_ref(NULL, frame, 1);
+
+ switch (link->type) {
+ case AVMEDIA_TYPE_VIDEO:
+ if((ret = ff_start_frame(link, frame)) < 0)
+ return ret;
+ if((ret = ff_draw_slice(link, 0, frame->video->h, 1)) < 0)
+ return ret;
+ if((ret = ff_end_frame(link)) < 0)
+ return ret;
+ return ret;
+ case AVMEDIA_TYPE_AUDIO:
+ return ff_filter_samples(link, frame);
+ default: return AVERROR(EINVAL);
+ }
+}