summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libhb/decomb.c17
-rw-r--r--libhb/hb.c33
-rw-r--r--libhb/hb.h2
-rw-r--r--libhb/scan.c2
4 files changed, 20 insertions, 34 deletions
diff --git a/libhb/decomb.c b/libhb/decomb.c
index 40bcb2a6c..e9519700f 100644
--- a/libhb/decomb.c
+++ b/libhb/decomb.c
@@ -1997,8 +1997,8 @@ static int hb_decomb_init( hb_filter_object_t * filter,
for( i = 0; i < 3; i++ )
{
int is_chroma = !!i;
- int w = ((init->width + 31) & (~31))>>is_chroma;
- int h = ((init->height+6+ 31) & (~31))>>is_chroma;
+ int w = ((init->width >>is_chroma) + 31) & (~31);
+ int h = ((init->height>>is_chroma)+6+ 31) & (~31);
pv->ref_stride[i] = w;
@@ -2012,8 +2012,8 @@ static int hb_decomb_init( hb_filter_object_t * filter,
for( i = 0; i < 3; i++ )
{
int is_chroma = !!i;
- int w = ((init->width + 31) & (~31))>>is_chroma;
- int h = ((init->height+6+ 31) & (~31))>>is_chroma;
+ int w = ((init->width >>is_chroma) + 31) & (~31);
+ int h = ((init->height>>is_chroma)+6+ 31) & (~31);
pv->mask[i] = calloc( 1, w*h*sizeof(uint8_t) ) + 3*w;
pv->mask_filtered[i] = calloc( 1, w*h*sizeof(uint8_t) ) + 3*w;
@@ -2027,8 +2027,8 @@ static int hb_decomb_init( hb_filter_object_t * filter,
for( i = 0; i < 3; i++ )
{
int is_chroma = !!i;
- int w = ((init->width + 31) & (~31))>>is_chroma;
- int h = ((height+6+ 31) & (~31))>>is_chroma;
+ int w = ((init->width>>is_chroma) + 31) & (~31);
+ int h = ((height>>is_chroma) + 6 + 31) & (~31);
for( j = 0; j < 4; j++ )
{
@@ -2037,12 +2037,11 @@ static int hb_decomb_init( hb_filter_object_t * filter,
}
/* Allocate full-height eedi2 buffers */
- height = init->height;
for( i = 0; i < 3; i++ )
{
int is_chroma = !!i;
- int w = ((init->width + 31) & (~31))>>is_chroma;
- int h = ((height+6+ 31) & (~31))>>is_chroma;
+ int w = ((init->width >>is_chroma) + 31) & (~31);
+ int h = ((init->height>>is_chroma)+6+ 31) & (~31);
for( j = 0; j < 5; j++ )
{
diff --git a/libhb/hb.c b/libhb/hb.c
index 0ad101aaf..9e331f0b3 100644
--- a/libhb/hb.c
+++ b/libhb/hb.c
@@ -865,15 +865,13 @@ void hb_get_preview( hb_handle_t * h, hb_title_t * title, int picture,
* @param prog_diff Sensitivity for detecting different colors on progressive frames
* @param prog_threshold Sensitivity for flagging progressive frames as combed
*/
-int hb_detect_comb( hb_buffer_t * buf, int width, int height, int color_equal, int color_diff, int threshold, int prog_equal, int prog_diff, int prog_threshold )
+int hb_detect_comb( hb_buffer_t * buf, int color_equal, int color_diff, int threshold, int prog_equal, int prog_diff, int prog_threshold )
{
int j, k, n, off, cc_1, cc_2, cc[3];
// int flag[3] ; // debugging flag
uint16_t s1, s2, s3, s4;
cc_1 = 0; cc_2 = 0;
- int offset = 0;
-
if ( buf->s.flags & 16 )
{
/* Frame is progressive, be more discerning. */
@@ -885,21 +883,10 @@ int hb_detect_comb( hb_buffer_t * buf, int width, int height, int color_equal, i
/* One pas for Y, one pass for Cb, one pass for Cr */
for( k = 0; k < 3; k++ )
{
- if( k == 1 )
- {
- /* Y has already been checked, now offset by Y's dimensions
- and divide all the other values by 2, since Cr and Cb
- are half-size compared to Y. */
- offset = width * height;
- width >>= 1;
- height >>= 1;
- }
- else if ( k == 2 )
- {
- /* Y and Cb are done, so the offset needs to be bumped
- so it's width*height + (width / 2) * (height / 2) */
- offset *= 5/4;
- }
+ uint8_t * data = buf->plane[k].data;
+ int width = buf->plane[k].width;
+ int stride = buf->plane[k].stride;
+ int height = buf->plane[k].height;
for( j = 0; j < width; ++j )
{
@@ -908,10 +895,10 @@ int hb_detect_comb( hb_buffer_t * buf, int width, int height, int color_equal, i
for( n = 0; n < ( height - 4 ); n = n + 2 )
{
/* Look at groups of 4 sequential horizontal lines */
- s1 = ( ( buf->data + offset )[ off + j ] & 0xff );
- s2 = ( ( buf->data + offset )[ off + j + width ] & 0xff );
- s3 = ( ( buf->data + offset )[ off + j + 2 * width ] & 0xff );
- s4 = ( ( buf->data + offset )[ off + j + 3 * width ] & 0xff );
+ s1 = ( ( data )[ off + j ] & 0xff );
+ s2 = ( ( data )[ off + j + stride ] & 0xff );
+ s3 = ( ( data )[ off + j + 2 * stride ] & 0xff );
+ s4 = ( ( data )[ off + j + 3 * stride ] & 0xff );
/* Note if the 1st and 2nd lines are more different in
color than the 1st and 3rd lines are similar in color.*/
@@ -926,7 +913,7 @@ int hb_detect_comb( hb_buffer_t * buf, int width, int height, int color_equal, i
++cc_2;
/* Now move down 2 horizontal lines before starting over.*/
- off += 2 * width;
+ off += 2 * stride;
}
}
diff --git a/libhb/hb.h b/libhb/hb.h
index a594d93fc..da2311834 100644
--- a/libhb/hb.h
+++ b/libhb/hb.h
@@ -57,7 +57,7 @@ hb_list_t * hb_get_titles( hb_handle_t * );
/* hb_detect_comb()
Analyze a frame for interlacing artifacts, returns true if they're found.
Taken from Thomas Oestreich's 32detect filter in the Transcode project. */
-int hb_detect_comb( hb_buffer_t * buf, int width, int height, int color_equal, int color_diff, int threshold, int prog_equal, int prog_diff, int prog_threshold );
+int hb_detect_comb( hb_buffer_t * buf, int color_equal, int color_diff, int threshold, int prog_equal, int prog_diff, int prog_threshold );
int hb_save_preview( hb_handle_t * h, int title, int preview,
hb_buffer_t *buf );
diff --git a/libhb/scan.c b/libhb/scan.c
index e06f14c5f..4776e08c4 100644
--- a/libhb/scan.c
+++ b/libhb/scan.c
@@ -739,7 +739,7 @@ static int DecodePreviews( hb_scan_t * data, hb_title_t * title )
}
/* Check preview for interlacing artifacts */
- if( hb_detect_comb( vid_buf, vid_info.width, vid_info.height, 10, 30, 9, 10, 30, 9 ) )
+ if( hb_detect_comb( vid_buf, 10, 30, 9, 10, 30, 9 ) )
{
hb_deep_log( 2, "Interlacing detected in preview frame %i", i+1);
interlaced_preview_count++;