summaryrefslogtreecommitdiff
path: root/src/xine-utils
AgeCommit message (Collapse)Author
2011-12-22Use proper chroma upsampling for yv12 to yuy2 conversionRoland Scheidegger
The old code did some "averaging" which, while cheap, lead to serious chroma shift because the weighting factors turned out to be pretty random (arguably no averaging likely would have been given more correct results). It also in fact lead to chroma ghosts. To see why this was wrong read the following and then do the math. http://www.hometheaterhifi.com/the-dvd-benchmark/179-the-chroma-upsampling-error-and-the-420-interlaced-chroma-problem.html http://avisynth.org/mediawiki/Sampling As an example, let's look what happens at line 4 for interlaced content (where the code would have averaged chroma from chroma line 2 and 4): Chroma line 2 contains chroma values for line 2 (25%) and 4 (75%) while chroma line 4 contains chroma values for line 6 (25%) and 8 (75%) of the original (prior to subsampling) frame. Average these together and you get something quite wrong. Most importantly the center of these weights will be at 5.5 instead of 4 (hence chroma shift). For odd lines it is different (better but still wrong). So, fix this by using the correct weights for reconstruction of the chroma values (which is averaging for the progressive case for all pixels since the samples are defined to be between the lines, and use different weighting factors for odd/even/"upper"/"lower" lines). This runs more than twice the instructions (for the mmx case), but I measured only a performance impact of roughly 5% (on a Athlon64 X2) - seriously bound by memory access (by comparison the sort-of-pointless post-deinterlace chroma filter is nearly twice as slow hence if you don't need it because the values are correct this will be a lot faster). Note: this is only correct for codecs which use the same chroma positions as mpeg2 (dv is definitely different, mpeg1 is also different but only for horizontal positioning, which doesn't matter here). "yv12" as such seems underspecified wrt chroma positioning. On another note, while this algorithm may be correct, it is inherently suboptimal doing this pre-deinterlace (and a post-deinterlace chroma filter is not going to help much neither except it can blur the mess). This NEEDS to be part of deinterlace (which btw would also be quite a bit faster when handling planar directly due to saving one pass of going through all memory). The reason is while line 4 will now use the correct weighting factors, the fact remains it will use chroma values originating from lines 2, 4, 6 and 8 of the original image. However, if the deinterlacer decides to weave because there is no motion, it CAN and most likely wants to use chroma values from the other field (hence values originating from line 2, 3, 4, 5 in this case when using a very simple filter, with appropriate weighting). --HG-- branch : point-release extra : rebase_source : 808bb5785ca398970324bea6b391a9e24c576d2f
2011-12-16Silenced warningPetri Hintukainen
--HG-- branch : point-release
2011-10-10Fixed asprintf usagePetri Hintukainen
2011-10-10Added asprintf wrapperPetri Hintukainen
2011-10-10xine_check: check vasprintf() return valuePetri Hintukainen
2011-10-05Bring xine_private.h into line with 1.2 branch, which already has this ↵Chris Rankin
capability, and force an error if someone tries to include xine_private.h in an unsuitable source file.
2011-10-04Import xine_private.h as needed, not as part of xine_internal.h.Chris Rankin
2011-10-04utils.c: fixed missing prototypes: unconditionally include xine_internal.hPetri Hintukainen
_x_set_file_close_on_exec() and _x_set_socket_close_on_exec() prototypes were missing. We need the prototypes because of visibility attributes.
2011-10-03Set CLOEXEC flag on three more sockets.Chris Rankin
There are two functions that actually set this flag: int _x_set_file_close_on_exec() int _x_set_socket_close_on_exec() (We need two functions because file descriptors and sockets are not the same under WIN32 - of course). These function have been assigned "internal" visibility so that they can be used throughout libxine.so itself while still not being exported to the global symbol table. In other words, they're both as close to being "static" as I can make them.
2011-10-03Prefix open_cloexec() and create_cloexec() with xine_, and add new ↵Chris Rankin
xine_socket_cloexec() function.
2011-10-03Assign O_CLOEXEC a safe default value if it hasn't been defined already.Chris Rankin
2011-10-01Mark simple file and socket descriptors as uninheritable.Chris Rankin
This patch creates two utility functions: int open_cloexec(pathname, flags) int create_cloexec(pathname, flags, mode) These return a file descriptor with the CLOEXEC flag set, to ensure that the descriptor is not inherited across a fork/exec operation. The sockets returned by: _x_io_tcp_connect_ipv4() _x_io_tcp_connect() now also have their CLOEXEC flag set.
2010-11-23Build with -DLOG.František Dvořák
2010-10-30Try to meassure memcpy method speed by clock() when times() not available.František Dvořák
2010-10-23mingw32-w64 port: integer sizes portabilityFrantišek Dvořák
- use type of enough size for pointer types (uintptr_t) - fixes "Unhandled exception" in memcpy code
2010-10-23mingw32-w64 port:František Dvořák
- symbols in objects built by mingw64 not mangled - fixes build of deinterlace post plugin
2010-04-20remove the unneeded unistd.h and fix compatibility for msvcShixin Zeng
2010-04-12C89 fixShixin Zeng
2009-11-30Trim trailing space & reduce space+tab.Darren Salt
2009-10-15Make the XML lexer and parser re-entrantMatt Kraai
2009-10-13profiler: use uint64_t & replace arrays with a structCarlo Bramini
MSVC complained about a memset to a const object and all "long long" variables that are GNU only. I fixed it by grouping the fields into a structure and now even GCC is more happy.
2009-05-07Character encoding is stored in LC_CTYPESander Jansen
2009-02-18"No newline at end of file" fixes.Darren Salt
2009-02-17Allow cpuid code to compile on OpenBSD/i386.Brad Smith
2009-01-18Remove '#include "config.h"' from all public header files.Darren Salt
This requires that many other files include config.h themselves. Also convert <config.h> to "config.h".
2009-01-15Split most of the MMX declarations in xineutils.h out into xine_mmx.h.Darren Salt
This does not incompatibly change the API and has no effect on the ABI. --HG-- rename : src/xine-utils/xineutils.h => src/xine-utils/xine_mmx.h
2008-11-20Some warning fixes: XINE_FORMAT_SCANF, statics in headers, consts, ...František Dvořák
Add warning flags to the DEBUG_CFLAGS too.
2008-09-28Fix xine_usec_sleep for mingw+msysMatthias Ringwald
Bug was found and fixed by Carlo Bramini. select() does not work on mingw+msys causing xine_usec_sleep to sleep much longer than requested which completely broke audio playback
2008-07-11Fix xine_get_pluginroot (mingw32)Matthias Ringwald
xine_get_pluginroot now makes use of the XINE_REL_PLUGINROOT define
2008-07-08Fix compilation for pthread support provided by PTHREAD_{CFLAGS+LIBS}Matthias Ringwald
<xine-internals.h> includes <xine-utils/refcounter.h> which includes <pthread.h>. As all xine sources include <xine-internal.h>, the PTHREAD_CFLAGS are always needed. This patch removed it from two Makefile.am and adds them to CPPFLAGS
2008-07-04Use calloc to allocate the memory area for the YUV planes.Diego 'Flameeyes' Pettenò
--HG-- extra : transplant_source : %00%23%8FM%AA%B88C%FEA%7E%2C%D3%F5%29%8F%28%AC%D7_
2008-07-02provide PTHREAD_CFLAGS when neededMatthias Ringwald
2008-06-15Move the declaration of xine_strcat_realloc.Darren Salt
2008-06-12Fix up reporting of supported formats by the ALSA & OSS output plugins.Darren Salt
Adjust translations for the spacing changes etc. which this introduces.
2008-05-23Mark initialisation functions with malloc attribute.Diego 'Flameeyes' Pettenò
All the initialisation functions returning a new object instance that was allocated through malloc() or calloc() can get the malloc attribute so that the compiler can optimise their call.
2008-05-20Make xine_mm_accel() appear like a constant function.Diego 'Flameeyes' Pettenò
Its result will be always the same during execution, as it depends on the hardware present. --HG-- extra : transplant_source : %F2%D1%1A%84%0F%D4%08%C0%12%09%1A%BBb%7Ef%CC%F2%FB%A3t
2008-05-20Add check for const attribute (for mathematical functions).Diego 'Flameeyes' Pettenò
Add CC_ATTRIBUTE_CONST macro to the attributes.h. Run CC_ATTRIBUTE_CONST in configure. Define SUPPORT_ATTRIBUTE_CONST for GCC 3. Define XINE_CONST to __attribute__((__const__)) if supported. --HG-- extra : transplant_source : /26%26%DF%C0%3C%AC%27%5C%B7%B1y%FEQ%8Ay%EE%F1%BD
2008-05-09Use size_t to keep the value returned by strlen().Diego 'Flameeyes' Pettenò
When using a variable to store the result of strlen(), make sure its type is size_t just like the function returns, rather than using a smaller type like int. --HG-- extra : transplant_source : %B0%D5%3B%D7%1Dy%0A%7E%7D%7C%023%08%B2%CE%D3t%0B3%D7
2008-05-09Avoid loop for common memory operations (zeroing, copying, moving).Diego 'Flameeyes' Pettenò
Use the proper function for common memory operations (memset() for zeroing, memcpy() for copying, memmove() for moving), instead of looping through arrays. By extension, remove loops to reset arrays when they were allocated with calloc() and thus already zeroed.
2008-05-09Remove a new bunch of xine_malloc() calls.Diego 'Flameeyes' Pettenò
Also don't reset memory after it's allocated if we do that with calloc.
2008-05-09Cleanup handling of packed attribute.Diego 'Flameeyes' Pettenò
- Add a configure test for the attribute, during xine build process. - Define the attribute as supported when using GCC 2.95 or later outside xine build process. - Use the new XINE_PACKED define instead of the attribute directly. - Check for SUPPORT_ATTRIBUTE_PACKED rather than doing strange subdefines.
2008-05-07Deprecate xine_xmalloc().Diego 'Flameeyes' Pettenò
2008-05-07Merge file removal.Diego 'Flameeyes' Pettenò
2008-05-07xine_xmalloc() deprecation: replace its use with static and non-zero size.Diego 'Flameeyes' Pettenò
The xine_xmalloc() function is going to be deprecated, as its behaviour is rarely needed as such, and it's thus misused. With this, almost all uses of xine_xmalloc() with static size (for instance the value returned by sizeof()) or with a size that is guaranteed not to be zero (like strlen()+1) are replaced with calls to either calloc(1, ...) or malloc(). malloc() is used whenever the allocated memory is going to be immediately overwritten, while calloc() is used in every other case, as it sets the whole memory area to zero. --HG-- extra : transplant_source : %8F%98%EC%02%1E%83%F0s%06X%83C%205Y%80%B12%CC%E1
2008-05-07Actually remove the xine_check.h file.Diego 'Flameeyes' Pettenò
2008-05-07Define support for attributes based on compiler's version outside xine build.Diego 'Flameeyes' Pettenò
When we're including xine/attributes.h but we're not building xine, define the support for particular attributes based on the compiler and its version. This way semantic information is maintained outside xine's build (such as deprecated functions).
2008-05-07Make _x_health_check_* functions static.Diego 'Flameeyes' Pettenò
The xine_check.h header is not currently installed and the symbols are not exported, their are only ever used in the same unit they are defined.
2008-05-05Check for malloc attribute and define XINE_MALLOC for use in xineutils.h, ↵Diego 'Flameeyes' Pettenò
rather than just checking for GCC 3.
2008-05-03Mark some removed-in-1.2 exported/unimplemented functions as deprecated.Darren Salt
2008-05-03Add support for "deprecated" attribute.Darren Salt