Commit c784b5cf authored by Paul B Mahol's avatar Paul B Mahol

avfilter/vf_histogram: set foreground alpha if possible in destination format

Signed-off-by: 's avatarPaul B Mahol <onemda@gmail.com>
parent 915abab2
...@@ -35,6 +35,7 @@ typedef struct HistogramContext { ...@@ -35,6 +35,7 @@ typedef struct HistogramContext {
int histogram_size; int histogram_size;
int mult; int mult;
int ncomp; int ncomp;
int dncomp;
uint8_t bg_color[4]; uint8_t bg_color[4];
uint8_t fg_color[4]; uint8_t fg_color[4];
int level_height; int level_height;
...@@ -236,6 +237,7 @@ static int config_output(AVFilterLink *outlink) ...@@ -236,6 +237,7 @@ static int config_output(AVFilterLink *outlink)
outlink->h = (h->level_height + h->scale_height) * FFMAX(ncomp * h->display_mode, 1); outlink->h = (h->level_height + h->scale_height) * FFMAX(ncomp * h->display_mode, 1);
h->odesc = av_pix_fmt_desc_get(outlink->format); h->odesc = av_pix_fmt_desc_get(outlink->format);
h->dncomp = h->odesc->nb_components;
outlink->sample_aspect_ratio = (AVRational){1,1}; outlink->sample_aspect_ratio = (AVRational){1,1};
return 0; return 0;
...@@ -319,7 +321,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) ...@@ -319,7 +321,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
if (h->histogram_size <= 256) { if (h->histogram_size <= 256) {
for (j = h->level_height - 1; j >= col_height; j--) { for (j = h->level_height - 1; j >= col_height; j--) {
if (h->display_mode) { if (h->display_mode) {
for (l = 0; l < h->ncomp; l++) for (l = 0; l < h->dncomp; l++)
out->data[l][(j + start) * out->linesize[l] + i] = h->fg_color[l]; out->data[l][(j + start) * out->linesize[l] + i] = h->fg_color[l];
} else { } else {
out->data[p][(j + start) * out->linesize[p] + i] = 255; out->data[p][(j + start) * out->linesize[p] + i] = 255;
...@@ -332,7 +334,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) ...@@ -332,7 +334,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
for (j = h->level_height - 1; j >= col_height; j--) { for (j = h->level_height - 1; j >= col_height; j--) {
if (h->display_mode) { if (h->display_mode) {
for (l = 0; l < h->ncomp; l++) for (l = 0; l < h->dncomp; l++)
AV_WN16(out->data[l] + (j + start) * out->linesize[l] + i * 2, h->fg_color[l] * mult); AV_WN16(out->data[l] + (j + start) * out->linesize[l] + i * 2, h->fg_color[l] * mult);
} else { } else {
AV_WN16(out->data[p] + (j + start) * out->linesize[p] + i * 2, 255 * mult); AV_WN16(out->data[p] + (j + start) * out->linesize[p] + i * 2, 255 * mult);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment