/* * Copyright (c) 2005 Robert Edele <yartrebo@earthlink.net> * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */#include "bbox.h"int ff_calculate_bounding_box(FFBoundingBox *bbox, const uint8_t *data, int linesize, int w, int h, int min_val){ int x, y; int start_x; int start_y; int end_x; int end_y; const uint8_t *line; /* left bound */ for (start_x = 0; start_x < w; start_x++) for (y = 0; y < h; y++) if ((data[y * linesize + start_x] > min_val)) goto outl;outl: if (start_x == w) /* no points found */ return 0; /* right bound */ for (end_x = w - 1; end_x >= start_x; end_x--) for (y = 0; y < h; y++) if ((data[y * linesize + end_x] > min_val)) goto outr;outr: /* top bound */ line = data; for (start_y = 0; start_y < h; start_y++) { for (x = 0; x < w; x++) if (line[x] > min_val) goto outt; line += linesize; }outt: /* bottom bound */ line = data + (h-1)*linesize; for (end_y = h - 1; end_y >= start_y; end_y--) { for (x = 0; x < w; x++) if (line[x] > min_val) goto outb; line -= linesize; }outb: bbox->x1 = start_x; bbox->y1 = start_y; bbox->x2 = end_x; bbox->y2 = end_y; return 1;}
/*
* Copyright (c) 2005 Robert Edele <yartrebo@earthlink.net>
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "bbox.h"
int ff_calculate_bounding_box(FFBoundingBox *bbox,
const uint8_t *data, int linesize, int w, int h,
int min_val)
{
int x, y;
int start_x;
int start_y;
int end_x;
int end_y;
const uint8_t *line;
/* left bound */
for (start_x = 0; start_x < w; start_x++)
for (y = 0; y < h; y++)
if ((data[y * linesize + start_x] > min_val))
goto outl;
outl:
if (start_x == w) /* no points found */
return 0;
/* right bound */
for (end_x = w - 1; end_x >= start_x; end_x--)
for (y = 0; y < h; y++)
if ((data[y * linesize + end_x] > min_val))
goto outr;
outr:
/* top bound */
line = data;
for (start_y = 0; start_y < h; start_y++) {
for (x = 0; x < w; x++)
if (line[x] > min_val)
goto outt;
line += linesize;
}
outt:
/* bottom bound */
line = data + (h-1)*linesize;
for (end_y = h - 1; end_y >= start_y; end_y--) {
for (x = 0; x < w; x++)
if (line[x] > min_val)
goto outb;
line -= linesize;
}
outb:
bbox->x1 = start_x;
bbox->y1 = start_y;
bbox->x2 = end_x;
bbox->y2 = end_y;
return 1;
}