| 
																	
																	
																		
																	
																	
																 | 
																@@ -47,6 +47,7 @@ typedef struct HistogramContext { | 
															
														
														
													
														
															
																 | 
																 | 
																    int            scale_height; | 
																 | 
																 | 
																    int            scale_height; | 
															
														
														
													
														
															
																 | 
																 | 
																    int            step; | 
																 | 
																 | 
																    int            step; | 
															
														
														
													
														
															
																 | 
																 | 
																    int            waveform_mode; | 
																 | 
																 | 
																    int            waveform_mode; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    int            display_mode; | 
															
														
														
													
														
															
																 | 
																 | 
																} HistogramContext; | 
																 | 
																 | 
																} HistogramContext; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																#define OFFSET(x) offsetof(HistogramContext, x) | 
																 | 
																 | 
																#define OFFSET(x) offsetof(HistogramContext, x) | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																	
																 | 
																@@ -64,6 +65,9 @@ static const AVOption histogram_options[] = { | 
															
														
														
													
														
															
																 | 
																 | 
																    { "waveform_mode", "set waveform mode", OFFSET(waveform_mode), AV_OPT_TYPE_INT, {.i64=0}, 0, 1, FLAGS, "waveform_mode"}, | 
																 | 
																 | 
																    { "waveform_mode", "set waveform mode", OFFSET(waveform_mode), AV_OPT_TYPE_INT, {.i64=0}, 0, 1, FLAGS, "waveform_mode"}, | 
															
														
														
													
														
															
																 | 
																 | 
																    { "row",   NULL, 0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, FLAGS, "waveform_mode" }, | 
																 | 
																 | 
																    { "row",   NULL, 0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, FLAGS, "waveform_mode" }, | 
															
														
														
													
														
															
																 | 
																 | 
																    { "column", NULL, 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, FLAGS, "waveform_mode" }, | 
																 | 
																 | 
																    { "column", NULL, 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, FLAGS, "waveform_mode" }, | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    { "display_mode", "set display mode", OFFSET(display_mode), AV_OPT_TYPE_INT, {.i64=1}, 0, 1, FLAGS, "display_mode"}, | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    { "parade",  NULL, 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, FLAGS, "display_mode" }, | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    { "overlay", NULL, 0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, FLAGS, "display_mode" }, | 
															
														
														
													
														
															
																 | 
																 | 
																    { NULL }, | 
																 | 
																 | 
																    { NULL }, | 
															
														
														
													
														
															
																 | 
																 | 
																}; | 
																 | 
																 | 
																}; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																		
																	
																	
																 | 
																@@ -99,10 +103,10 @@ static int query_formats(AVFilterContext *ctx) | 
															
														
														
													
														
															
																 | 
																 | 
																    const enum AVPixelFormat *pix_fmts; | 
																 | 
																 | 
																    const enum AVPixelFormat *pix_fmts; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    switch (h->mode) { | 
																 | 
																 | 
																    switch (h->mode) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    case MODE_WAVEFORM: | 
															
														
														
													
														
															
																 | 
																 | 
																    case MODE_LEVELS: | 
																 | 
																 | 
																    case MODE_LEVELS: | 
															
														
														
													
														
															
																 | 
																 | 
																        pix_fmts = levels_pix_fmts; | 
																 | 
																 | 
																        pix_fmts = levels_pix_fmts; | 
															
														
														
													
														
															
																 | 
																 | 
																        break; | 
																 | 
																 | 
																        break; | 
															
														
														
													
														
															
																 | 
																 | 
																    case MODE_WAVEFORM: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    case MODE_COLOR: | 
																 | 
																 | 
																    case MODE_COLOR: | 
															
														
														
													
														
															
																 | 
																 | 
																    case MODE_COLOR2: | 
																 | 
																 | 
																    case MODE_COLOR2: | 
															
														
														
													
														
															
																 | 
																 | 
																        pix_fmts = color_pix_fmts; | 
																 | 
																 | 
																        pix_fmts = color_pix_fmts; | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																		
																	
																	
																 | 
																@@ -153,9 +157,9 @@ static int config_output(AVFilterLink *outlink) | 
															
														
														
													
														
															
																 | 
																 | 
																        break; | 
																 | 
																 | 
																        break; | 
															
														
														
													
														
															
																 | 
																 | 
																    case MODE_WAVEFORM: | 
																 | 
																 | 
																    case MODE_WAVEFORM: | 
															
														
														
													
														
															
																 | 
																 | 
																        if (h->waveform_mode) | 
																 | 
																 | 
																        if (h->waveform_mode) | 
															
														
														
													
														
															
																 | 
																 | 
																            outlink->h = 256; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            outlink->h = 256 * FFMAX(h->ncomp * h->display_mode, 1); | 
															
														
														
													
														
															
																 | 
																 | 
																        else | 
																 | 
																 | 
																        else | 
															
														
														
													
														
															
																 | 
																 | 
																            outlink->w = 256; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            outlink->w = 256 * FFMAX(h->ncomp * h->display_mode, 1); | 
															
														
														
													
														
															
																 | 
																 | 
																        break; | 
																 | 
																 | 
																        break; | 
															
														
														
													
														
															
																 | 
																 | 
																    case MODE_COLOR: | 
																 | 
																 | 
																    case MODE_COLOR: | 
															
														
														
													
														
															
																 | 
																 | 
																    case MODE_COLOR2: | 
																 | 
																 | 
																    case MODE_COLOR2: | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																		
																	
																	
																 | 
																@@ -223,23 +227,31 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *in) | 
															
														
														
													
														
															
																 | 
																 | 
																        break; | 
																 | 
																 | 
																        break; | 
															
														
														
													
														
															
																 | 
																 | 
																    case MODE_WAVEFORM: | 
																 | 
																 | 
																    case MODE_WAVEFORM: | 
															
														
														
													
														
															
																 | 
																 | 
																        if (h->waveform_mode) { | 
																 | 
																 | 
																        if (h->waveform_mode) { | 
															
														
														
													
														
															
																 | 
																 | 
																            for (i = 0; i < inlink->w; i++) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																                for (j = 0; j < inlink->h; j++) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																                    int pos = in->data[0][j * in->linesize[0] + i] * out->linesize[0] + i; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																                    unsigned value = out->data[0][pos]; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																                    value = FFMIN(value + h->step, 255); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																                    out->data[0][pos] = value; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            for (k = 0; k < h->ncomp; k++) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                int offset = k * 256 * h->display_mode; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                for (i = 0; i < inlink->w; i++) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                    for (j = 0; j < inlink->h; j++) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                        int pos = (offset + | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                                   in->data[k][j * in->linesize[k] + i]) * | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                                  out->linesize[k] + i; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                        unsigned value = out->data[k][pos]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                        value = FFMIN(value + h->step, 255); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                        out->data[k][pos] = value; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                    } | 
															
														
														
													
														
															
																 | 
																 | 
																                } | 
																 | 
																 | 
																                } | 
															
														
														
													
														
															
																 | 
																 | 
																            } | 
																 | 
																 | 
																            } | 
															
														
														
													
														
															
																 | 
																 | 
																        } else { | 
																 | 
																 | 
																        } else { | 
															
														
														
													
														
															
																 | 
																 | 
																            for (i = 0; i < inlink->h; i++) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																                src = in ->data[0] + i * in ->linesize[0]; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																                dst = out->data[0] + i * out->linesize[0]; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																                for (j = 0; j < inlink->w; j++) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																                    int pos = src[j]; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																                    unsigned value = dst[pos]; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																                    value = FFMIN(value + h->step, 255); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																                    dst[pos] = value; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            for (k = 0; k < h->ncomp; k++) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                int offset = k * 256 * h->display_mode; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                for (i = 0; i < inlink->h; i++) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                    src = in ->data[k] + i * in ->linesize[k]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                    dst = out->data[k] + i * out->linesize[k]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                    for (j = 0; j < inlink->w; j++) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                        int pos = src[j] + offset; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                        unsigned value = dst[pos]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                        value = FFMIN(value + h->step, 255); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                        dst[pos] = value; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                    } | 
															
														
														
													
														
															
																 | 
																 | 
																                } | 
																 | 
																 | 
																                } | 
															
														
														
													
														
															
																 | 
																 | 
																            } | 
																 | 
																 | 
																            } | 
															
														
														
													
														
															
																 | 
																 | 
																        } | 
																 | 
																 | 
																        } | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																	
																 | 
																
  |