Signed-off-by: Mans Rullgard <mans@mansr.com>tags/n0.8
@@ -194,6 +194,10 @@ int avfilter_config_links(AVFilterContext *filter) | |||||
link->time_base = link->src && link->src->input_count ? | link->time_base = link->src && link->src->input_count ? | ||||
link->src->inputs[0]->time_base : AV_TIME_BASE_Q; | link->src->inputs[0]->time_base : AV_TIME_BASE_Q; | ||||
if (link->sample_aspect_ratio.num == 0 && link->sample_aspect_ratio.den == 0) | |||||
link->sample_aspect_ratio = link->src->input_count ? | |||||
link->src->inputs[0]->sample_aspect_ratio : (AVRational){1,1}; | |||||
if ((config_link = link->dstpad->config_props)) | if ((config_link = link->dstpad->config_props)) | ||||
if ((ret = config_link(link)) < 0) | if ((ret = config_link(link)) < 0) | ||||
return ret; | return ret; | ||||
@@ -27,7 +27,7 @@ | |||||
#include "libavcore/samplefmt.h" | #include "libavcore/samplefmt.h" | ||||
#define LIBAVFILTER_VERSION_MAJOR 1 | #define LIBAVFILTER_VERSION_MAJOR 1 | ||||
#define LIBAVFILTER_VERSION_MINOR 75 | |||||
#define LIBAVFILTER_VERSION_MINOR 76 | |||||
#define LIBAVFILTER_VERSION_MICRO 0 | #define LIBAVFILTER_VERSION_MICRO 0 | ||||
#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ | #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ | ||||
@@ -580,9 +580,10 @@ struct AVFilterLink { | |||||
enum AVMediaType type; ///< filter media type | enum AVMediaType type; ///< filter media type | ||||
/* These two parameters apply only to video */ | |||||
/* These parameters apply only to video */ | |||||
int w; ///< agreed upon image width | int w; ///< agreed upon image width | ||||
int h; ///< agreed upon image height | int h; ///< agreed upon image height | ||||
AVRational sample_aspect_ratio; ///< agreed upon sample aspect ratio | |||||
/* These two parameters apply only to audio */ | /* These two parameters apply only to audio */ | ||||
int64_t channel_layout; ///< channel layout of current buffer (see libavcore/audioconvert.h) | int64_t channel_layout; ///< channel layout of current buffer (see libavcore/audioconvert.h) | ||||
int64_t sample_rate; ///< samples per second | int64_t sample_rate; ///< samples per second | ||||
@@ -82,6 +82,9 @@ static int setdar_config_props(AVFilterLink *inlink) | |||||
av_log(inlink->dst, AV_LOG_INFO, "w:%d h:%d -> dar:%d/%d par:%d/%d\n", | av_log(inlink->dst, AV_LOG_INFO, "w:%d h:%d -> dar:%d/%d par:%d/%d\n", | ||||
inlink->w, inlink->h, dar.num, dar.den, aspect->aspect.num, aspect->aspect.den); | inlink->w, inlink->h, dar.num, dar.den, aspect->aspect.num, aspect->aspect.den); | ||||
inlink->sample_aspect_ratio = aspect->aspect; | |||||
return 0; | return 0; | ||||
} | } | ||||
@@ -108,6 +111,16 @@ AVFilter avfilter_vf_setdar = { | |||||
#endif /* CONFIG_SETDAR_FILTER */ | #endif /* CONFIG_SETDAR_FILTER */ | ||||
#if CONFIG_SETSAR_FILTER | #if CONFIG_SETSAR_FILTER | ||||
/* for setdar filter, convert from frame aspect ratio to pixel aspect ratio */ | |||||
static int setsar_config_props(AVFilterLink *inlink) | |||||
{ | |||||
AspectContext *aspect = inlink->dst->priv; | |||||
inlink->sample_aspect_ratio = aspect->aspect; | |||||
return 0; | |||||
} | |||||
AVFilter avfilter_vf_setsar = { | AVFilter avfilter_vf_setsar = { | ||||
.name = "setsar", | .name = "setsar", | ||||
.description = NULL_IF_CONFIG_SMALL("Set the pixel sample aspect ratio."), | .description = NULL_IF_CONFIG_SMALL("Set the pixel sample aspect ratio."), | ||||
@@ -118,6 +131,7 @@ AVFilter avfilter_vf_setsar = { | |||||
.inputs = (AVFilterPad[]) {{ .name = "default", | .inputs = (AVFilterPad[]) {{ .name = "default", | ||||
.type = AVMEDIA_TYPE_VIDEO, | .type = AVMEDIA_TYPE_VIDEO, | ||||
.config_props = setsar_config_props, | |||||
.get_video_buffer = avfilter_null_get_video_buffer, | .get_video_buffer = avfilter_null_get_video_buffer, | ||||
.start_frame = start_frame, | .start_frame = start_frame, | ||||
.end_frame = avfilter_null_end_frame }, | .end_frame = avfilter_null_end_frame }, | ||||
@@ -102,6 +102,11 @@ static int config_props_output(AVFilterLink *outlink) | |||||
outlink->w = inlink->h; | outlink->w = inlink->h; | ||||
outlink->h = inlink->w; | outlink->h = inlink->w; | ||||
if (inlink->sample_aspect_ratio.num){ | |||||
outlink->sample_aspect_ratio = av_div_q((AVRational){1,1}, inlink->sample_aspect_ratio); | |||||
} else | |||||
outlink->sample_aspect_ratio = inlink->sample_aspect_ratio; | |||||
av_log(ctx, AV_LOG_INFO, "w:%d h:%d dir:%d -> w:%d h:%d rotation:%s vflip:%d\n", | av_log(ctx, AV_LOG_INFO, "w:%d h:%d dir:%d -> w:%d h:%d rotation:%s vflip:%d\n", | ||||
inlink->w, inlink->h, trans->dir, outlink->w, outlink->h, | inlink->w, inlink->h, trans->dir, outlink->w, outlink->h, | ||||
trans->dir == 1 || trans->dir == 3 ? "clockwise" : "counterclockwise", | trans->dir == 1 || trans->dir == 3 ? "clockwise" : "counterclockwise", | ||||