mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
lavfi: parsing helper for unknown channel layouts.
Make ff_parse_channel_layout() accept unknown layouts too.
This commit is contained in:
parent
d300f5f6f5
commit
6e2473edfd
@ -66,7 +66,7 @@ static av_cold int init(AVFilterContext *ctx)
|
|||||||
(ret = ff_parse_sample_format(&aconvert->out_sample_fmt, aconvert->format_str, ctx)) < 0)
|
(ret = ff_parse_sample_format(&aconvert->out_sample_fmt, aconvert->format_str, ctx)) < 0)
|
||||||
return ret;
|
return ret;
|
||||||
if (aconvert->channel_layout_str && strcmp(aconvert->channel_layout_str, "auto"))
|
if (aconvert->channel_layout_str && strcmp(aconvert->channel_layout_str, "auto"))
|
||||||
return ff_parse_channel_layout(&aconvert->out_chlayout, aconvert->channel_layout_str, ctx);
|
return ff_parse_channel_layout(&aconvert->out_chlayout, NULL, aconvert->channel_layout_str, ctx);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,7 +116,7 @@ static av_cold int init(AVFilterContext *ctx)
|
|||||||
if (!args)
|
if (!args)
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
arg = av_strtok(args, "|", &tokenizer);
|
arg = av_strtok(args, "|", &tokenizer);
|
||||||
ret = ff_parse_channel_layout(&pan->out_channel_layout, arg, ctx);
|
ret = ff_parse_channel_layout(&pan->out_channel_layout, NULL, arg, ctx);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
pan->nb_output_channels = av_get_channel_layout_nb_channels(pan->out_channel_layout);
|
pan->nb_output_channels = av_get_channel_layout_nb_channels(pan->out_channel_layout);
|
||||||
|
@ -109,7 +109,7 @@ static av_cold int init(AVFilterContext *ctx)
|
|||||||
|
|
||||||
if (eval->chlayout_str) {
|
if (eval->chlayout_str) {
|
||||||
int n;
|
int n;
|
||||||
ret = ff_parse_channel_layout(&eval->chlayout, eval->chlayout_str, ctx);
|
ret = ff_parse_channel_layout(&eval->chlayout, NULL, eval->chlayout_str, ctx);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@ static av_cold int init(AVFilterContext *ctx)
|
|||||||
null->sample_rate_str, ctx)) < 0)
|
null->sample_rate_str, ctx)) < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
if ((ret = ff_parse_channel_layout(&null->channel_layout,
|
if ((ret = ff_parse_channel_layout(&null->channel_layout, NULL,
|
||||||
null->channel_layout_str, ctx)) < 0)
|
null->channel_layout_str, ctx)) < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -615,10 +615,21 @@ int ff_parse_sample_rate(int *ret, const char *arg, void *log_ctx)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ff_parse_channel_layout(int64_t *ret, const char *arg, void *log_ctx)
|
int ff_parse_channel_layout(int64_t *ret, int *nret, const char *arg,
|
||||||
|
void *log_ctx)
|
||||||
{
|
{
|
||||||
char *tail;
|
char *tail;
|
||||||
int64_t chlayout = av_get_channel_layout(arg);
|
int64_t chlayout, count;
|
||||||
|
|
||||||
|
if (nret) {
|
||||||
|
count = strtol(arg, &tail, 10);
|
||||||
|
if (*tail == 'c' && !tail[1] && count > 0 && count < 63) {
|
||||||
|
*nret = count;
|
||||||
|
*ret = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
chlayout = av_get_channel_layout(arg);
|
||||||
if (chlayout == 0) {
|
if (chlayout == 0) {
|
||||||
chlayout = strtol(arg, &tail, 10);
|
chlayout = strtol(arg, &tail, 10);
|
||||||
if (*tail || chlayout == 0) {
|
if (*tail || chlayout == 0) {
|
||||||
@ -627,6 +638,8 @@ int ff_parse_channel_layout(int64_t *ret, const char *arg, void *log_ctx)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
*ret = chlayout;
|
*ret = chlayout;
|
||||||
|
if (nret)
|
||||||
|
*nret = av_get_channel_layout_nb_channels(chlayout);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -207,11 +207,14 @@ int ff_parse_sample_format(int *ret, const char *arg, void *log_ctx);
|
|||||||
* Parse a channel layout or a corresponding integer representation.
|
* Parse a channel layout or a corresponding integer representation.
|
||||||
*
|
*
|
||||||
* @param ret 64bit integer pointer to where the value should be written.
|
* @param ret 64bit integer pointer to where the value should be written.
|
||||||
|
* @param nret integer pointer to the number of channels;
|
||||||
|
* if not NULL, then unknown channel layouts are accepted
|
||||||
* @param arg string to parse
|
* @param arg string to parse
|
||||||
* @param log_ctx log context
|
* @param log_ctx log context
|
||||||
* @return >= 0 in case of success, a negative AVERROR code on error
|
* @return >= 0 in case of success, a negative AVERROR code on error
|
||||||
*/
|
*/
|
||||||
int ff_parse_channel_layout(int64_t *ret, const char *arg, void *log_ctx);
|
int ff_parse_channel_layout(int64_t *ret, int *nret, const char *arg,
|
||||||
|
void *log_ctx);
|
||||||
|
|
||||||
void ff_update_link_current_pts(AVFilterLink *link, int64_t pts);
|
void ff_update_link_current_pts(AVFilterLink *link, int64_t pts);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user