| #ifndef AOM_AV1_ENCODER_SEGMENT_PATCH_H |
| #define AOM_AV1_ENCODER_SEGMENT_PATCH_H |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #include "aom/aom_integer.h" |
| |
| // Struct for parameters related to segmentation. |
| typedef struct { |
| float sigma; // Parameter used for gaussian smoothing of input image. |
| float k; // Threshold: larger values result in larger components. |
| int min_size; // Minimum component size enforced by post-processing. |
| } Av1SegmentParams; |
| |
| // Get reasonable defaults for segmentation parameters. |
| void av1_get_default_segment_params(Av1SegmentParams *params); |
| |
| // Get image segments. |
| // Inputs: |
| // - input: input image (Y plane) |
| // - width: input image width |
| // - height: input image height |
| // - stride: input image stride |
| // - seg_params: segmentation parameters |
| // Outputs: |
| // - output: segmented output image (Y plane) |
| // - num_components: Number of connected components (segments) in the output. |
| // Note: Assumes output array is already allocated with size = width * height. |
| void av1_get_segments(const uint8_t *input, int width, int height, int stride, |
| const Av1SegmentParams *seg_params, uint8_t *output, |
| int *num_components); |
| |
| // Amend mask with values {0,1} to one with values {0,64}. |
| // Input/output: |
| // - mask: Binary mask that is modified in-place. |
| // Inputs: |
| // - w: mask width and also stride |
| // - h: mask height |
| void av1_extend_binary_mask_range(uint8_t *const mask, int w, int h); |
| |
| // Applies box blur on 'mask' using an averaging filter. |
| // Input/output: |
| // - mask: Binary mask with extended range that is modified in-place. |
| // Inputs: |
| // - w: mask width and also stride |
| // - h: mask height |
| void av1_apply_box_blur(uint8_t *const mask, int w, int h); |
| |
| // Run-length encodes 'img'. |
| // Inputs: |
| // - img: image to be encoded |
| // - width: image width |
| // - height: image height |
| // - stride: image stride |
| // Outputs: |
| // - out: run-length encoded image. Assumed to be already allocated. |
| // - out_size: length of 'out' |
| void av1_run_length_encode(const uint8_t *const img, int width, int height, |
| int stride, uint8_t *out, int *out_size); |
| |
| #define DUMP_SEGMENT_MASKS 0 |
| |
| #if DUMP_SEGMENT_MASKS |
| // Dump raw Y plane to a YUV file. |
| // Can be viewed as follows, for example: |
| // ffplay -f rawvideo -pixel_format gray -video_size wxh -i <filename> |
| void av1_dump_raw_y_plane(const uint8_t *y, int width, int height, int stride, |
| const char *filename); |
| #endif // DUMP_SEGMENT_MASKS |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif // AOM_AV1_ENCODER_SEGMENT_PATCH_H |