1/*
2 * Copyright (c) 2013 Georg Martius <georg dot martius at web dot de>
3 *
4 * This file is part of FFmpeg.
5 *
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21#include "vidstabutils.h"
22
23/** convert AV's pixelformat to vid.stab pixelformat */
24VSPixelFormat av_2_vs_pixel_format(AVFilterContext *ctx, enum AVPixelFormat pf)
25{
26    switch (pf) {
27    case AV_PIX_FMT_YUV420P:  return PF_YUV420P;
28    case AV_PIX_FMT_YUV422P:  return PF_YUV422P;
29    case AV_PIX_FMT_YUV444P:  return PF_YUV444P;
30    case AV_PIX_FMT_YUV410P:  return PF_YUV410P;
31    case AV_PIX_FMT_YUV411P:  return PF_YUV411P;
32    case AV_PIX_FMT_YUV440P:  return PF_YUV440P;
33    case AV_PIX_FMT_YUVA420P: return PF_YUVA420P;
34    case AV_PIX_FMT_GRAY8:    return PF_GRAY8;
35    case AV_PIX_FMT_RGB24:    return PF_RGB24;
36    case AV_PIX_FMT_BGR24:    return PF_BGR24;
37    case AV_PIX_FMT_RGBA:     return PF_RGBA;
38    default:
39        av_log(ctx, AV_LOG_ERROR, "cannot deal with pixel format %i\n", pf);
40        return PF_NONE;
41    }
42}
43
44/** struct to hold a valid context for logging from within vid.stab lib */
45typedef struct {
46    const AVClass *class;
47} VS2AVLogCtx;
48
49/** wrapper to log vs_log into av_log */
50static int vs_2_av_log_wrapper(int type, const char *tag, const char *format, ...)
51{
52    va_list ap;
53    VS2AVLogCtx ctx;
54    AVClass class = {
55      .class_name = tag,
56      .item_name  = av_default_item_name,
57      .option     = 0,
58      .version    = LIBAVUTIL_VERSION_INT,
59      .category   = AV_CLASS_CATEGORY_FILTER,
60    };
61    ctx.class = &class;
62    va_start(ap, format);
63    av_vlog(&ctx, type, format, ap);
64    va_end(ap);
65    return VS_OK;
66}
67
68/** sets the memory allocation function and logging constants to av versions */
69void vs_set_mem_and_log_functions(void)
70{
71    vs_malloc  = av_malloc;
72    vs_zalloc  = av_mallocz;
73    vs_realloc = av_realloc;
74    vs_free    = av_free;
75
76    VS_ERROR_TYPE = AV_LOG_ERROR;
77    VS_WARN_TYPE  = AV_LOG_WARNING;
78    VS_INFO_TYPE  = AV_LOG_INFO;
79    VS_MSG_TYPE   = AV_LOG_VERBOSE;
80
81    vs_log   = vs_2_av_log_wrapper;
82
83    VS_ERROR = 0;
84    VS_OK    = 1;
85}
86