xine-lib: xine-lib-1.2.12/src/post/deinterlace/speedy.h File Reference

xine-lib 1.2.12

Data Structures | Typedefs | Functions | Variables
speedy.h File Reference
`#include <stdint.h>`

Go to the source code of this file.

## Data Structures
struct | pulldown_metrics_s

## Typedefs
typedef struct pulldown_metrics_s | pulldown_metrics_t

## Functions
void | setup_speedy_calls (uint32_t accel, int verbose)
uint32_t | speedy_get_accel (void)

## Variables
void(* | interpolate_packed422_scanline )(uint8_t *output, uint8_t *top, uint8_t *bot, int width)
void(* | blit_colour_packed422_scanline )(uint8_t *output, int width, int y, int cb, int cr)
void(* | blit_colour_packed4444_scanline )(uint8_t *output, int width, int alpha, int luma, int cb, int cr)
void(* | blit_packed422_scanline )(uint8_t *dest, const uint8_t *src, int width)
void(* | composite_packed4444_to_packed422_scanline )(uint8_t *output, uint8_t *input, uint8_t *foreground, int width)
void(* | composite_packed4444_alpha_to_packed422_scanline )(uint8_t *output, uint8_t *input, uint8_t *foreground, int width, int alpha)
void(* | composite_alphamask_to_packed4444_scanline )(uint8_t *output, uint8_t *input, uint8_t *mask, int width, int textluma, int textcb, int textcr)
void(* | composite_alphamask_alpha_to_packed4444_scanline )(uint8_t *output, uint8_t *input, uint8_t *mask, int width, int textluma, int textcb, int textcr, int alpha)
void(* | composite_bars_packed4444_scanline )(uint8_t *output, uint8_t *background, int width, int a, int luma, int cb, int cr, int percentage)
void(* | premultiply_packed4444_scanline )(uint8_t *output, uint8_t *input, int width)
void(* | blend_packed422_scanline )(uint8_t *output, uint8_t *src1, uint8_t *src2, int width, int pos)
unsigned int(* | diff_factor_packed422_scanline )(uint8_t *cur, uint8_t *old, int width)
unsigned int(* | comb_factor_packed422_scanline )(uint8_t *top, uint8_t *mid, uint8_t *bot, int width)
void(* | vfilter_chroma_121_packed422_scanline )(uint8_t *output, int width, uint8_t *m, uint8_t *t, uint8_t *b)
void(* | vfilter_chroma_332_packed422_scanline )(uint8_t *output, int width, uint8_t *m, uint8_t *t, uint8_t *b)
void(* | filter_luma_121_packed422_inplace_scanline )(uint8_t *data, int width)
void(* | filter_luma_14641_packed422_inplace_scanline )(uint8_t *data, int width)
void(* | kill_chroma_packed422_inplace_scanline )(uint8_t *data, int width)
void(* | mirror_packed422_inplace_scanline )(uint8_t *data, int width)
void(* | halfmirror_packed422_inplace_scanline )(uint8_t *data, int width)
void(* | invert_colour_packed422_inplace_scanline )(uint8_t *data, int width)
void *(* | speedy_memcpy )(void *output, const void *input, size_t size)
void(* | diff_packed422_block8x8 )(pulldown_metrics_t *m, uint8_t *old, uint8_t *new, int os, int ns)
void(* | a8_subpix_blit_scanline )(uint8_t *output, uint8_t *input, int lasta, int startpos, int width)
void(* | quarter_blit_vertical_packed422_scanline )(uint8_t *output, uint8_t *one, uint8_t *three, int width)
void(* | subpix_blit_vertical_packed422_scanline )(uint8_t *output, uint8_t *top, uint8_t *bot, int subpixpos, int width)
void(* | packed444_to_nonpremultiplied_packed4444_scanline )(uint8_t *output, uint8_t *input, int width, int alpha)
void(* | packed444_to_packed422_scanline )(uint8_t *output, uint8_t *input, int width)
void(* | packed422_to_packed444_scanline )(uint8_t *output, uint8_t *input, int width)
void(* | packed422_to_packed444_rec601_scanline )(uint8_t *dest, uint8_t *src, int width)
void(* | packed444_to_rgb24_rec601_scanline )(uint8_t *output, uint8_t *input, int width)
void(* | rgb24_to_packed444_rec601_scanline )(uint8_t *output, uint8_t *input, int width)
void(* | rgba32_to_packed4444_rec601_scanline )(uint8_t *output, uint8_t *input, int width)
void(* | chroma_422_to_444_mpeg2_plane )(uint8_t *dst, uint8_t *src, int width, int height)
void(* | chroma_420_to_422_mpeg2_plane )(uint8_t *dst, uint8_t *src, int width, int height, int progressive)

## Typedef Documentation

## ◆ pulldown_metrics_t

typedef struct pulldown_metrics_s pulldown_metrics_t

Copyright (c) 2002, 2003 Billy Biggs vekto.nosp@m.r@du.nosp@m.mbter.nosp@m.m.ne.nosp@m.t.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version.

This program 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 General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA. Speedy is a collection of optimized functions plus their C fallbacks. This includes a simple system to select which functions to use at runtime.

The optimizations are done with the help of the mmx.h system, from libmpeg2 by Michel Lespinasse and Aaron Holtzman.

The library is a collection of function pointers which must be first initialized by setup_speedy_calls() to point at the fastest available implementation of each function. Struct for pulldown detection metrics.

## Function Documentation

## ◆ setup_speedy_calls()

void setup_speedy_calls | ( | uint32_t | accel,
|  | int | verbose
| ) |  |

Sets up the function pointers to point at the fastest function available. Requires accelleration settings (see mm_accel.h).

References a8_subpix_blit_scanline, a8_subpix_blit_scanline_c(), blend_packed422_scanline, blend_packed422_scanline_c(), blit_colour_packed422_scanline, blit_colour_packed422_scanline_c(), blit_colour_packed4444_scanline, blit_colour_packed4444_scanline_c(), blit_packed422_scanline, blit_packed422_scanline_c(), chroma_420_to_422_mpeg2_plane, chroma_420_to_422_mpeg2_plane_c(), chroma_422_to_444_mpeg2_plane, chroma_422_to_444_mpeg2_plane_c(), comb_factor_packed422_scanline, composite_alphamask_alpha_to_packed4444_scanline, composite_alphamask_alpha_to_packed4444_scanline_c(), composite_alphamask_to_packed4444_scanline, composite_alphamask_to_packed4444_scanline_c(), composite_bars_packed4444_scanline, composite_bars_packed4444_scanline_c(), composite_packed4444_alpha_to_packed422_scanline, composite_packed4444_alpha_to_packed422_scanline_c(), composite_packed4444_to_packed422_scanline, composite_packed4444_to_packed422_scanline_c(), diff_factor_packed422_scanline, diff_factor_packed422_scanline_c(), diff_packed422_block8x8, diff_packed422_block8x8_c(), filter_luma_121_packed422_inplace_scanline, filter_luma_121_packed422_inplace_scanline_c(), filter_luma_14641_packed422_inplace_scanline, filter_luma_14641_packed422_inplace_scanline_c(), halfmirror_packed422_inplace_scanline, halfmirror_packed422_inplace_scanline_c(), interpolate_packed422_scanline, interpolate_packed422_scanline_c(), invert_colour_packed422_inplace_scanline, invert_colour_packed422_inplace_scanline_c(), kill_chroma_packed422_inplace_scanline, kill_chroma_packed422_inplace_scanline_c(), mirror_packed422_inplace_scanline, mirror_packed422_inplace_scanline_c(), MM_ACCEL_X86_MMX, MM_ACCEL_X86_MMXEXT, MM_ACCEL_X86_SSE2, packed422_to_packed444_rec601_scanline, packed422_to_packed444_rec601_scanline_c(), packed422_to_packed444_scanline, packed422_to_packed444_scanline_c(), packed444_to_nonpremultiplied_packed4444_scanline, packed444_to_nonpremultiplied_packed4444_scanline_c(), packed444_to_packed422_scanline, packed444_to_packed422_scanline_c(), packed444_to_rgb24_rec601_scanline, packed444_to_rgb24_rec601_scanline_c(), premultiply_packed4444_scanline, premultiply_packed4444_scanline_c(), quarter_blit_vertical_packed422_scanline, quarter_blit_vertical_packed422_scanline_c(), rgb24_to_packed444_rec601_scanline, rgb24_to_packed444_rec601_scanline_c(), rgba32_to_packed4444_rec601_scanline, rgba32_to_packed4444_rec601_scanline_c(), speedy_accel, speedy_memcpy, speedy_memcpy_c, speedy_memcpy_mmx, speedy_memcpy_mmxext, subpix_blit_vertical_packed422_scanline, subpix_blit_vertical_packed422_scanline_c(), vfilter_chroma_121_packed422_scanline, vfilter_chroma_121_packed422_scanline_c(), vfilter_chroma_332_packed422_scanline, and vfilter_chroma_332_packed422_scanline_c().

Referenced by deinterlace_init_plugin().

## ◆ speedy_get_accel()

uint32_t speedy_get_accel | ( | void |  | ) |

Returns a bitfield of what accellerations were used when speedy was initialized. See mm_accel.h.

References speedy_accel.

## Variable Documentation

## ◆ a8_subpix_blit_scanline

void(* a8_subpix_blit_scanline) (uint8_t *output, uint8_t *input, int lasta, int startpos, int width) | ( | uint8_t * | output,
|  | uint8_t * | input,
|  | int | lasta,
|  | int | startpos,
|  | int | width
| ) |  |
| extern

Takes an alpha mask and subpixelly blits it using linear interpolation.

Referenced by setup_speedy_calls().

## ◆ blend_packed422_scanline

void(* blend_packed422_scanline) (uint8_t *output, uint8_t *src1, uint8_t *src2, int width, int pos) | ( | uint8_t * | output,
|  | uint8_t * | src1,
|  | uint8_t * | src2,
|  | int | width,
|  | int | pos
| ) |  |
| extern

Blend between two packed 4:2:2 scanline. Pos is the fade value in the range 0-256. A value of 0 gives 100% src1, and a value of 256 gives 100% src2. Anything in between gives the appropriate faded version.

Referenced by setup_speedy_calls().

## ◆ blit_colour_packed422_scanline

void(* blit_colour_packed422_scanline) (uint8_t *output, int width, int y, int cb, int cr) | ( | uint8_t * | output,
|  | int | width,
|  | int | y,
|  | int | cb,
|  | int | cr
| ) |  |
| extern

Blits a colour to a packed 4:2:2 scanline.

Referenced by setup_speedy_calls().

## ◆ blit_colour_packed4444_scanline

void(* blit_colour_packed4444_scanline) (uint8_t *output, int width, int alpha, int luma, int cb, int cr) | ( | uint8_t * | output,
|  | int | width,
|  | int | alpha,
|  | int | luma,
|  | int | cb,
|  | int | cr
| ) |  |
| extern

Blits a colour to a packed 4:4:4:4 scanline. I use luma/cb/cr instead of RGB but this will of course work for either.

Referenced by setup_speedy_calls().

## ◆ blit_packed422_scanline

void(* blit_packed422_scanline) (uint8_t *dest, const uint8_t *src, int width) | ( | uint8_t * | dest,
|  | const uint8_t * | src,
|  | int | width
| ) |  |
| extern

Blit from and to packed 4:2:2 scanline.

Referenced by blend_packed422_scanline_c(), copy_scanline(), deinterlace_scanline_double(), deinterlace_scanline_weave(), pulldown_merge_fields(), setup_speedy_calls(), tvtime_build_copied_field(), and tvtime_build_deinterlaced_frame().

## ◆ chroma_420_to_422_mpeg2_plane

void(* chroma_420_to_422_mpeg2_plane) (uint8_t *dst, uint8_t *src, int width, int height, int progressive) | ( | uint8_t * | dst,
|  | uint8_t * | src,
|  | int | width,
|  | int | height,
|  | int | progressive
| ) |  |
| extern

Chroma upsampler for a chroma plane (8 bit per pixel) from 4:2:0 to 4:2:2. I believe that implements the filter described in the MPEG2 spec, but I have not confirmed.

Referenced by setup_speedy_calls().

## ◆ chroma_422_to_444_mpeg2_plane

void(* chroma_422_to_444_mpeg2_plane) (uint8_t *dst, uint8_t *src, int width, int height) | ( | uint8_t * | dst,
|  | uint8_t * | src,
|  | int | width,
|  | int | height
| ) |  |
| extern

Chroma upsampler for a chroma plane (8 bit per pixel) from 4:2:2 to 4:4:4. I believe that implements the filter described in the MPEG2 spec, but I have not confirmed.

Referenced by setup_speedy_calls().

## ◆ comb_factor_packed422_scanline

unsigned int(* comb_factor_packed422_scanline) (uint8_t *top, uint8_t *mid, uint8_t *bot, int width) | ( | uint8_t * | top,
|  | uint8_t * | mid,
|  | uint8_t * | bot,
|  | int | width
| ) |  |
| extern

Calculates the 'comb factor' for a set of three scanlines. This is a metric where higher values indicate a more likely chance that the two fields are at separate points in time.

Referenced by setup_speedy_calls().

## ◆ composite_alphamask_alpha_to_packed4444_scanline

void(* composite_alphamask_alpha_to_packed4444_scanline) (uint8_t *output, uint8_t *input, uint8_t *mask, int width, int textluma, int textcb, int textcr, int alpha) | ( | uint8_t * | output,
|  | uint8_t * | input,
|  | uint8_t * | mask,
|  | int | width,
|  | int | textluma,
|  | int | textcb,
|  | int | textcr,
|  | int | alpha
| ) |  |
| extern

Takes an alphamask and the given colour (in Y'CbCr) and composites it onto a packed 4:4:4:4 scanline. The alpha value provided is in the range 0-256 and is first applied to the input (for fadeouts).

Referenced by setup_speedy_calls().

## ◆ composite_alphamask_to_packed4444_scanline

void(* composite_alphamask_to_packed4444_scanline) (uint8_t *output, uint8_t *input, uint8_t *mask, int width, int textluma, int textcb, int textcr) | ( | uint8_t * | output,
|  | uint8_t * | input,
|  | uint8_t * | mask,
|  | int | width,
|  | int | textluma,
|  | int | textcb,
|  | int | textcr
| ) |  |
| extern

Takes an alphamask and the given colour (in Y'CbCr) and composites it onto a packed 4:4:4:4 scanline.

Referenced by setup_speedy_calls().

## ◆ composite_bars_packed4444_scanline

void(* composite_bars_packed4444_scanline) (uint8_t *output, uint8_t *background, int width, int a, int luma, int cb, int cr, int percentage) | ( | uint8_t * | output,
|  | uint8_t * | background,
|  | int | width,
|  | int | a,
|  | int | luma,
|  | int | cb,
|  | int | cr,
|  | int | percentage
| ) |  |
| extern

Sub-pixel data bar renderer. There are 128 bars.

Referenced by setup_speedy_calls().

## ◆ composite_packed4444_alpha_to_packed422_scanline

void(* composite_packed4444_alpha_to_packed422_scanline) (uint8_t *output, uint8_t *input, uint8_t *foreground, int width, int alpha) | ( | uint8_t * | output,
|  | uint8_t * | input,
|  | uint8_t * | foreground,
|  | int | width,
|  | int | alpha
| ) |  |
| extern

Composites a packed 4:4:4:4 scanline onto a packed 4:2:2 scanline. Chroma is downsampled by dropping samples (nearest neighbour). The alpha value provided is in the range 0-256 and is first applied to the input (for fadeouts).

Referenced by setup_speedy_calls().

## ◆ composite_packed4444_to_packed422_scanline

void(* composite_packed4444_to_packed422_scanline) (uint8_t *output, uint8_t *input, uint8_t *foreground, int width) | ( | uint8_t * | output,
|  | uint8_t * | input,
|  | uint8_t * | foreground,
|  | int | width
| ) |  |
| extern

Composites a packed 4:4:4:4 scanline onto a packed 4:2:2 scanline. Chroma is downsampled by dropping samples (nearest neighbour).

Referenced by setup_speedy_calls().

## ◆ diff_factor_packed422_scanline

unsigned int(* diff_factor_packed422_scanline) (uint8_t *cur, uint8_t *old, int width) | ( | uint8_t * | cur,
|  | uint8_t * | old,
|  | int | width
| ) |  |
| extern

Calculates the 'difference factor' for two scanlines. This is a metric where higher values indicate that the two scanlines are more different.

Referenced by calculate_pulldown_score_vektor(), and setup_speedy_calls().

## ◆ diff_packed422_block8x8

void(* diff_packed422_block8x8) (pulldown_metrics_t *m, uint8_t *old, uint8_t *new, int os, int ns) | ( | pulldown_metrics_t * | m,
|  | uint8_t * | old,
|  | uint8_t * | new,
|  | int | os,
|  | int | ns
| ) |  |
| extern

Calculates the block difference metrics for dalias' pulldown detection algorithm.

Referenced by diff_factor_packed422_frame(), and setup_speedy_calls().

## ◆ filter_luma_121_packed422_inplace_scanline

void(* filter_luma_121_packed422_inplace_scanline) (uint8_t *data, int width) | ( | uint8_t * | data,
|  | int | width
| ) |  |
| extern

In-place [1 2 1] filter.

Referenced by setup_speedy_calls().

## ◆ filter_luma_14641_packed422_inplace_scanline

void(* filter_luma_14641_packed422_inplace_scanline) (uint8_t *data, int width) | ( | uint8_t * | data,
|  | int | width
| ) |  |
| extern

In-place [1 4 6 4 1] filter.

Referenced by setup_speedy_calls().

## ◆ halfmirror_packed422_inplace_scanline

void(* halfmirror_packed422_inplace_scanline) (uint8_t *data, int width) | ( | uint8_t * | data,
|  | int | width
| ) |  |
| extern

Mirrors the first half of the scanline onto the second half in-place.

Referenced by setup_speedy_calls().

## ◆ interpolate_packed422_scanline

void(* interpolate_packed422_scanline) (uint8_t *output, uint8_t *top, uint8_t *bot, int width) | ( | uint8_t * | output,
|  | uint8_t * | top,
|  | uint8_t * | bot,
|  | int | width
| ) |  |
| extern

Interpolates a packed 4:2:2 scanline using linear interpolation.

Copyright (c) 2002, 2003 Billy Biggs vekto.nosp@m.r@du.nosp@m.mbter.nosp@m.m.ne.nosp@m.t. Copyright (C) 2001 Matthew J. Marjanovic maddo.nosp@m.g@mi.nosp@m.r.com

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version.

This program 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 General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA. Includes 420to422, 422to444 scaling filters from the MPEG2 reference implementation. The v12 source code indicates that they were written by Cheung Auyeung auyeu.nosp@m.ng@m.nosp@m.ot.co.nosp@m.m. The file they were in was:

store.c, picture output routines Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved.

Disclaimer of Warranty

These software programs are available to the user without any license fee or royalty on an "as is" basis. The MPEG Software Simulation Group disclaims any and all warranties, whether express, implied, or statuary, including any implied warranties or merchantability or of fitness for a particular purpose. In no event shall the copyright-holder be liable for any incidental, punitive, or consequential damages of any kind whatsoever arising from the use of these programs.

This disclaimer of warranty extends to the user of these programs and user's customers, employees, agents, transferees, successors, and assigns.

The MPEG Software Simulation Group does not represent or warrant that the programs furnished hereunder are free of infringement of any third-party patents.

Commercial implementations of MPEG-1 and MPEG-2 video, including shareware, are subject to royalty fees to patent holders. Many of these patents are general enough such that they are unavoidable regardless of implementation design.

Referenced by blend_packed422_scanline_c(), deinterlace_scanline_linear(), setup_speedy_calls(), and subpix_blit_vertical_packed422_scanline_c().

## ◆ invert_colour_packed422_inplace_scanline

void(* invert_colour_packed422_inplace_scanline) (uint8_t *data, int width) | ( | uint8_t * | data,
|  | int | width
| ) |  |
| extern

Inverts the colours on a scanline in-place.

Referenced by setup_speedy_calls().

## ◆ kill_chroma_packed422_inplace_scanline

void(* kill_chroma_packed422_inplace_scanline) (uint8_t *data, int width) | ( | uint8_t * | data,
|  | int | width
| ) |  |
| extern

Sets the chroma of the scanline to neutral (128) in-place.

Referenced by setup_speedy_calls().

## ◆ mirror_packed422_inplace_scanline

void(* mirror_packed422_inplace_scanline) (uint8_t *data, int width) | ( | uint8_t * | data,
|  | int | width
| ) |  |
| extern

Mirrors the scanline in-place.

Referenced by setup_speedy_calls().

## ◆ packed422_to_packed444_rec601_scanline

void(* packed422_to_packed444_rec601_scanline) (uint8_t *dest, uint8_t *src, int width) | ( | uint8_t * | dest,
|  | uint8_t * | src,
|  | int | width
| ) |  |
| extern

This filter actually does not meet the spec so calling it rec601 is a bit of a lie. I got the filter from Poynton's site. This converts a scanline from packed 4:2:2 to packed 4:4:4. But this function should point at some high quality to-the-spec resampler.

Referenced by setup_speedy_calls().

## ◆ packed422_to_packed444_scanline

void(* packed422_to_packed444_scanline) (uint8_t *output, uint8_t *input, int width) | ( | uint8_t * | output,
|  | uint8_t * | input,
|  | int | width
| ) |  |
| extern

Converts packed 4:2:2 to packed 4:4:4 scanlines using nearest neighbour chroma upsampling.

Referenced by setup_speedy_calls().

## ◆ packed444_to_nonpremultiplied_packed4444_scanline

void(* packed444_to_nonpremultiplied_packed4444_scanline) (uint8_t *output, uint8_t *input, int width, int alpha) | ( | uint8_t * | output,
|  | uint8_t * | input,
|  | int | width,
|  | int | alpha
| ) |  |
| extern

Simple function to convert a 4:4:4 scanline to a 4:4:4:4 scanline by adding an alpha channel. Result is non-premultiplied.

Referenced by setup_speedy_calls().

## ◆ packed444_to_packed422_scanline

void(* packed444_to_packed422_scanline) (uint8_t *output, uint8_t *input, int width) | ( | uint8_t * | output,
|  | uint8_t * | input,
|  | int | width
| ) |  |
| extern

I think this function needs to be rethought and renamed, but here it is for now. This function horizontally resamples a scanline using linear interpolation to compensate for a change in pixel aspect ratio. Convert a packed 4:4:4 surface to a packed 4:2:2 surface using nearest neighbour chroma downsampling.

Referenced by setup_speedy_calls().

## ◆ packed444_to_rgb24_rec601_scanline

void(* packed444_to_rgb24_rec601_scanline) (uint8_t *output, uint8_t *input, int width) | ( | uint8_t * | output,
|  | uint8_t * | input,
|  | int | width
| ) |  |
| extern

Conversions between Y'CbCr and R'G'B'. We use Rec.601 numbers since our source is broadcast video, but I think there is an argument to be made for switching to Rec.709.

Referenced by setup_speedy_calls().

## ◆ premultiply_packed4444_scanline

void(* premultiply_packed4444_scanline) (uint8_t *output, uint8_t *input, int width) | ( | uint8_t * | output,
|  | uint8_t * | input,
|  | int | width
| ) |  |
| extern

Premultiplies the colour by the alpha channel in a packed 4:4:4:4 scanline.

Referenced by setup_speedy_calls().

## ◆ quarter_blit_vertical_packed422_scanline

void(* quarter_blit_vertical_packed422_scanline) (uint8_t *output, uint8_t *one, uint8_t *three, int width) | ( | uint8_t * | output,
|  | uint8_t * | one,
|  | uint8_t * | three,
|  | int | width
| ) |  |
| extern

1/4 vertical subpixel blit for packed 4:2:2 scanlines using linear interpolation.

Referenced by setup_speedy_calls(), subpix_blit_vertical_packed422_scanline_c(), and tvtime_build_copied_field().

## ◆ rgb24_to_packed444_rec601_scanline

void(* rgb24_to_packed444_rec601_scanline) (uint8_t *output, uint8_t *input, int width) | ( | uint8_t * | output,
|  | uint8_t * | input,
|  | int | width
| ) |  |
| extern

Referenced by setup_speedy_calls().

## ◆ rgba32_to_packed4444_rec601_scanline

void(* rgba32_to_packed4444_rec601_scanline) (uint8_t *output, uint8_t *input, int width) | ( | uint8_t * | output,
|  | uint8_t * | input,
|  | int | width
| ) |  |
| extern

Referenced by setup_speedy_calls().

## ◆ speedy_memcpy

void *(* speedy_memcpy) (void *output, const void *input, size_t size) | ( | void * | output,
|  | const void * | input,
|  | size_t | size
| ) |  |
| extern

Fast memcpy function, used by all of the blit functions. Won't blit anything if dest == src.

Referenced by setup_speedy_calls().

## ◆ subpix_blit_vertical_packed422_scanline

void(* subpix_blit_vertical_packed422_scanline) (uint8_t *output, uint8_t *top, uint8_t *bot, int subpixpos, int width) | ( | uint8_t * | output,
|  | uint8_t * | top,
|  | uint8_t * | bot,
|  | int | subpixpos,
|  | int | width
| ) |  |
| extern

Vertical subpixel blit for packed 4:2:2 scanlines using linear interpolation.

Referenced by setup_speedy_calls().

## ◆ vfilter_chroma_121_packed422_scanline

void(* vfilter_chroma_121_packed422_scanline) (uint8_t *output, int width, uint8_t *m, uint8_t *t, uint8_t *b) | ( | uint8_t * | output,
|  | int | width,
|  | uint8_t * | m,
|  | uint8_t * | t,
|  | uint8_t * | b
| ) |  |
| extern

Vertical [1 2 1] chroma filter.

Referenced by setup_speedy_calls().

## ◆ vfilter_chroma_332_packed422_scanline

void(* vfilter_chroma_332_packed422_scanline) (uint8_t *output, int width, uint8_t *m, uint8_t *t, uint8_t *b) | ( | uint8_t * | output,
|  | int | width,
|  | uint8_t * | m,
|  | uint8_t * | t,
|  | uint8_t * | b
| ) |  |
| extern

Vertical [3 3 2] chroma filter.

Referenced by apply_chroma_filter(), and setup_speedy_calls().