[FFmpeg-devel] [PATCH] lavfi/cropdetect: support more pixel formats

Paul B Mahol onemda at gmail.com
Mon Jul 8 14:07:45 CEST 2013


On 7/8/13, Stefano Sabatini <stefasab at gmail.com> wrote:
> On date Friday 2013-07-05 15:01:37 +0000, Paul B Mahol encoded:
>> Signed-off-by: Paul B Mahol <onemda at gmail.com>
>> ---
>>  doc/filters.texi            |  2 +-
>>  libavfilter/vf_cropdetect.c | 60
>> +++++++++++++++++++++++++++++++++++++++++----
>>  2 files changed, 56 insertions(+), 6 deletions(-)
>>
>> diff --git a/doc/filters.texi b/doc/filters.texi
>> index f713bb9..e1e13df 100644
>> --- a/doc/filters.texi
>> +++ b/doc/filters.texi
>> @@ -2529,7 +2529,7 @@ The filter accepts the following options:
>>
>>  @item limit
>>  Set higher black value threshold, which can be optionally specified
>> -from nothing (0) to everything (255). An intensity value greater
>> +from nothing (0) to everything (65535). An intensity value greater
>>  to the set value is considered non-black. Default value is 24.
>
> This means the user needs to know the colorspace used in the filter,
> which is not robust at all.
>
> A possibility would be to express the value in 1/255 units and
> introduce an relative parameter expressed as a floating point value in
> the 0-1 range or an expression like:
> gt(val, min_val+0.2*(max_val-min_val))
>
>>  @item round
>> diff --git a/libavfilter/vf_cropdetect.c b/libavfilter/vf_cropdetect.c
>> index 28ae887..e5fbc0a 100644
>> --- a/libavfilter/vf_cropdetect.c
>> +++ b/libavfilter/vf_cropdetect.c
>> @@ -25,6 +25,7 @@
>>
>>  #include "libavutil/imgutils.h"
>>  #include "libavutil/internal.h"
>> +#include "libavutil/intreadwrite.h"
>>  #include "libavutil/opt.h"
>>
>>  #include "avfilter.h"
>> @@ -45,11 +46,46 @@ typedef struct {
>>  static int query_formats(AVFilterContext *ctx)
>>  {
>>      static const enum AVPixelFormat pix_fmts[] = {
>> +        AV_PIX_FMT_GRAY8,   AV_PIX_FMT_GRAY16,
>> +        AV_PIX_FMT_YUV410P,
>> +        AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUVJ411P,
>>          AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVJ420P,
>>          AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVJ422P,
>> +        AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUVJ440P,
>>          AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVJ444P,
>> -        AV_PIX_FMT_YUV411P, AV_PIX_FMT_GRAY8,
>> +        AV_PIX_FMT_YUVA420P,
>> +        AV_PIX_FMT_YUVA422P,
>> +        AV_PIX_FMT_YUVA444P,
>> +        AV_PIX_FMT_YUV420P9,
>> +        AV_PIX_FMT_YUV422P9,
>> +        AV_PIX_FMT_YUV444P9,
>> +        AV_PIX_FMT_YUVA420P9,
>> +        AV_PIX_FMT_YUVA422P9,
>> +        AV_PIX_FMT_YUVA444P9,
>> +        AV_PIX_FMT_YUV420P10,
>> +        AV_PIX_FMT_YUV422P10,
>> +        AV_PIX_FMT_YUV444P10,
>> +        AV_PIX_FMT_YUVA420P10,
>> +        AV_PIX_FMT_YUVA422P10,
>> +        AV_PIX_FMT_YUVA444P10,
>> +        AV_PIX_FMT_YUV420P12,
>> +        AV_PIX_FMT_YUV422P12,
>> +        AV_PIX_FMT_YUV444P12,
>> +        AV_PIX_FMT_YUV420P14,
>> +        AV_PIX_FMT_YUV422P14,
>> +        AV_PIX_FMT_YUV444P14,
>> +        AV_PIX_FMT_YUV420P16,
>> +        AV_PIX_FMT_YUV422P16,
>> +        AV_PIX_FMT_YUV444P16,
>> +        AV_PIX_FMT_YUVA420P16,
>> +        AV_PIX_FMT_YUVA422P16,
>> +        AV_PIX_FMT_YUVA444P16,
>>          AV_PIX_FMT_NV12,    AV_PIX_FMT_NV21,
>> +        AV_PIX_FMT_RGB24,   AV_PIX_FMT_BGR24,
>> +        AV_PIX_FMT_RGBA,    AV_PIX_FMT_BGRA,
>> +        AV_PIX_FMT_RGB0,    AV_PIX_FMT_BGR0,
>> +        AV_PIX_FMT_RGB48,   AV_PIX_FMT_BGR48,
>> +        AV_PIX_FMT_RGBA64,  AV_PIX_FMT_BGRA64,
>>          AV_PIX_FMT_NONE
>>      };
>>
>> @@ -57,9 +93,9 @@ static int query_formats(AVFilterContext *ctx)
>>      return 0;
>>  }
>>
>> -static int checkline(void *ctx, const unsigned char *src, int stride, int
>> len, int bpp)
>> +static int64_t checkline(void *ctx, const uint8_t *src, int stride, int
>> len, int bpp)
>>  {
>> -    int total = 0;
>> +    int64_t total = 0;
>>      int div = len;
>>
>>      switch (bpp) {
>> @@ -69,6 +105,12 @@ static int checkline(void *ctx, const unsigned char
>> *src, int stride, int len, i
>>              src += stride;
>>          }
>>          break;
>> +    case 2:
>> +        while (--len >= 0) {
>> +            total += AV_RN16(&src[0]);
>> +            src += stride;
>> +        }
>> +        break;
>>      case 3:
>>      case 4:
>>          while (--len >= 0) {
>> @@ -77,10 +119,18 @@ static int checkline(void *ctx, const unsigned char
>> *src, int stride, int len, i
>>          }
>>          div *= 3;
>>          break;
>> +    case 6:
>> +    case 8:
>> +        while (--len >= 0) {
>> +            total += AV_RN16(&src[0]) + AV_RN16(&src[2]) +
>> AV_RN16(&src[4]);
>> +            src += stride;
>> +        }
>> +        div *= 3;
>> +        break;
>
> was the 3/4 path ever used before?

No, but it works.

>
> I suggest to add a note about RGB colorspace, or even better to add a
> distinct RGB path.

Nonsense.

>
> [...]
> --
> FFmpeg = Fabulous & Foolish Murdering Proud Enlightening Geek
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>


More information about the ffmpeg-devel mailing list