* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include "libavutil/pixdesc.h"
#include "avfilter.h"
/**
return formats;
}
-AVFilterFormats *avfilter_all_colorspaces(void)
+int avfilter_add_colorspace(AVFilterFormats **avff, enum PixelFormat pix_fmt)
{
- AVFilterFormats *ret;
- int i;
+ enum PixelFormat *pix_fmts;
- ret = av_mallocz(sizeof(AVFilterFormats));
- ret->formats = av_malloc(sizeof(*ret->formats) * PIX_FMT_NB);
- ret->format_count = PIX_FMT_NB;
+ if (!(*avff) && !(*avff = av_mallocz(sizeof(AVFilterFormats))))
+ return AVERROR(ENOMEM);
+
+ pix_fmts = av_realloc((*avff)->formats,
+ sizeof((*avff)->formats) * ((*avff)->format_count+1));
+ if (!pix_fmts)
+ return AVERROR(ENOMEM);
+
+ (*avff)->formats = pix_fmts;
+ (*avff)->formats[(*avff)->format_count++] = pix_fmt;
+ return 0;
+}
+
+AVFilterFormats *avfilter_all_colorspaces(void)
+{
+ AVFilterFormats *ret = NULL;
+ enum PixelFormat pix_fmt;
- for(i = 0; i < PIX_FMT_NB; i ++)
- ret->formats[i] = i;
+ for (pix_fmt = 0; pix_fmt < PIX_FMT_NB; pix_fmt++)
+ if (!(av_pix_fmt_descriptors[pix_fmt].flags & PIX_FMT_HWACCEL))
+ avfilter_add_colorspace(&ret, pix_fmt);
return ret;
}
void avfilter_formats_unref(AVFilterFormats **ref)
{
- int idx = find_ref_index(ref);
+ int idx;
+
+ if (!*ref)
+ return;
+
+ idx = find_ref_index(ref);
if(idx >= 0)
memmove((*ref)->refs + idx, (*ref)->refs + idx+1,