xine-lib 1.2.11
|
#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 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.
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().
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.
|
extern |
Takes an alpha mask and subpixelly blits it using linear interpolation.
Referenced by setup_speedy_calls().
|
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().
|
extern |
Blits a colour to a packed 4:2:2 scanline.
Referenced by setup_speedy_calls().
|
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().
|
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().
|
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().
|
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().
|
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().
|
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().
|
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().
|
extern |
Sub-pixel data bar renderer. There are 128 bars.
Referenced by setup_speedy_calls().
|
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().
|
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().
|
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().
|
extern |
Calculates the block difference metrics for dalias' pulldown detection algorithm.
Referenced by diff_factor_packed422_frame(), and setup_speedy_calls().
|
extern |
In-place [1 2 1] filter.
Referenced by setup_speedy_calls().
|
extern |
In-place [1 4 6 4 1] filter.
Referenced by setup_speedy_calls().
|
extern |
Mirrors the first half of the scanline onto the second half in-place.
Referenced by setup_speedy_calls().
|
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().
|
extern |
Inverts the colours on a scanline in-place.
Referenced by setup_speedy_calls().
|
extern |
Sets the chroma of the scanline to neutral (128) in-place.
Referenced by setup_speedy_calls().
|
extern |
Mirrors the scanline in-place.
Referenced by setup_speedy_calls().
|
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().
|
extern |
Converts packed 4:2:2 to packed 4:4:4 scanlines using nearest neighbour chroma upsampling.
Referenced by setup_speedy_calls().
|
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().
|
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().
|
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().
|
extern |
Premultiplies the colour by the alpha channel in a packed 4:4:4:4 scanline.
Referenced by setup_speedy_calls().
|
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().
|
extern |
Referenced by setup_speedy_calls().
|
extern |
Referenced by setup_speedy_calls().
|
extern |
Fast memcpy function, used by all of the blit functions. Won't blit anything if dest == src.
Referenced by setup_speedy_calls().
|
extern |
Vertical subpixel blit for packed 4:2:2 scanlines using linear interpolation.
Referenced by setup_speedy_calls().
|
extern |
Vertical [1 2 1] chroma filter.
Referenced by setup_speedy_calls().
|
extern |
Vertical [3 3 2] chroma filter.
Referenced by apply_chroma_filter(), and setup_speedy_calls().