lavfi: add ff_parse_pixel_format() internal function, and use it
Reduce code duplication.
This commit is contained in:
parent
2c6348ea67
commit
e26782a9b4
@ -236,6 +236,21 @@ void avfilter_formats_changeref(AVFilterFormats **oldref,
|
|||||||
|
|
||||||
/* internal functions for parsing audio format arguments */
|
/* internal functions for parsing audio format arguments */
|
||||||
|
|
||||||
|
int ff_parse_pixel_format(enum PixelFormat *ret, const char *arg, void *log_ctx)
|
||||||
|
{
|
||||||
|
char *tail;
|
||||||
|
int pix_fmt = av_get_pix_fmt(arg);
|
||||||
|
if (pix_fmt == PIX_FMT_NONE) {
|
||||||
|
pix_fmt = strtol(arg, &tail, 0);
|
||||||
|
if (*tail || (unsigned)pix_fmt >= PIX_FMT_NB) {
|
||||||
|
av_log(log_ctx, AV_LOG_ERROR, "Invalid pixel format '%s'\n", arg);
|
||||||
|
return AVERROR(EINVAL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*ret = pix_fmt;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int ff_parse_sample_format(int *ret, const char *arg, void *log_ctx)
|
int ff_parse_sample_format(int *ret, const char *arg, void *log_ctx)
|
||||||
{
|
{
|
||||||
char *tail;
|
char *tail;
|
||||||
|
@ -63,6 +63,16 @@ int ff_fmt_is_in(int fmt, const int *fmts);
|
|||||||
|
|
||||||
/* Functions to parse audio format arguments */
|
/* Functions to parse audio format arguments */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse a pixel format.
|
||||||
|
*
|
||||||
|
* @param ret pixel format pointer to where the value should be written
|
||||||
|
* @param arg string to parse
|
||||||
|
* @param log_ctx log context
|
||||||
|
* @return 0 in case of success, a negative AVERROR code on error
|
||||||
|
*/
|
||||||
|
int ff_parse_pixel_format(enum PixelFormat *ret, const char *arg, void *log_ctx);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse a sample rate.
|
* Parse a sample rate.
|
||||||
*
|
*
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
#include "libavutil/pixdesc.h"
|
#include "libavutil/pixdesc.h"
|
||||||
#include "avfilter.h"
|
#include "avfilter.h"
|
||||||
|
#include "internal.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/**
|
/**
|
||||||
@ -41,7 +42,7 @@ static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
|
|||||||
FormatContext *format = ctx->priv;
|
FormatContext *format = ctx->priv;
|
||||||
const char *cur, *sep;
|
const char *cur, *sep;
|
||||||
char pix_fmt_name[PIX_FMT_NAME_MAXSIZE];
|
char pix_fmt_name[PIX_FMT_NAME_MAXSIZE];
|
||||||
int pix_fmt_name_len;
|
int pix_fmt_name_len, ret;
|
||||||
enum PixelFormat pix_fmt;
|
enum PixelFormat pix_fmt;
|
||||||
|
|
||||||
/* parse the list of formats */
|
/* parse the list of formats */
|
||||||
@ -57,12 +58,9 @@ static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
|
|||||||
|
|
||||||
memcpy(pix_fmt_name, cur, pix_fmt_name_len);
|
memcpy(pix_fmt_name, cur, pix_fmt_name_len);
|
||||||
pix_fmt_name[pix_fmt_name_len] = 0;
|
pix_fmt_name[pix_fmt_name_len] = 0;
|
||||||
pix_fmt = av_get_pix_fmt(pix_fmt_name);
|
|
||||||
|
|
||||||
if (pix_fmt == PIX_FMT_NONE) {
|
if ((ret = ff_parse_pixel_format(&pix_fmt, pix_fmt_name, ctx)) < 0)
|
||||||
av_log(ctx, AV_LOG_ERROR, "Unknown pixel format: %s\n", pix_fmt_name);
|
return ret;
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
format->listed_pix_fmt_flags[pix_fmt] = 1;
|
format->listed_pix_fmt_flags[pix_fmt] = 1;
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "avfilter.h"
|
#include "avfilter.h"
|
||||||
|
#include "internal.h"
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "vsrc_buffer.h"
|
#include "vsrc_buffer.h"
|
||||||
#include "libavutil/imgutils.h"
|
#include "libavutil/imgutils.h"
|
||||||
@ -134,7 +135,7 @@ static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
|
|||||||
{
|
{
|
||||||
BufferSourceContext *c = ctx->priv;
|
BufferSourceContext *c = ctx->priv;
|
||||||
char pix_fmt_str[128];
|
char pix_fmt_str[128];
|
||||||
int n = 0;
|
int ret, n = 0;
|
||||||
*c->sws_param = 0;
|
*c->sws_param = 0;
|
||||||
|
|
||||||
if (!args ||
|
if (!args ||
|
||||||
@ -145,14 +146,8 @@ static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
|
|||||||
return AVERROR(EINVAL);
|
return AVERROR(EINVAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((c->pix_fmt = av_get_pix_fmt(pix_fmt_str)) == PIX_FMT_NONE) {
|
if ((ret = ff_parse_pixel_format(&c->pix_fmt, pix_fmt_str, ctx)) < 0)
|
||||||
char *tail;
|
return ret;
|
||||||
c->pix_fmt = strtol(pix_fmt_str, &tail, 10);
|
|
||||||
if (*tail || c->pix_fmt < 0 || c->pix_fmt >= PIX_FMT_NB) {
|
|
||||||
av_log(ctx, AV_LOG_ERROR, "Invalid pixel format string '%s'\n", pix_fmt_str);
|
|
||||||
return AVERROR(EINVAL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
av_log(ctx, AV_LOG_INFO, "w:%d h:%d pixfmt:%s tb:%d/%d sar:%d/%d sws_param:%s\n",
|
av_log(ctx, AV_LOG_INFO, "w:%d h:%d pixfmt:%s tb:%d/%d sar:%d/%d sws_param:%s\n",
|
||||||
c->w, c->h, av_pix_fmt_descriptors[c->pix_fmt].name,
|
c->w, c->h, av_pix_fmt_descriptors[c->pix_fmt].name,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user