Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
KDE:KDE3
codeine
codeine-fix-xine-scope-plugin.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File codeine-fix-xine-scope-plugin.patch of Package codeine
diff -Naru codeine-1.0.1_orig/src/app/xineEngine.cpp codeine-1.0.1/src/app/xineEngine.cpp --- codeine-1.0.1_orig/src/app/xineEngine.cpp 2020-12-29 18:21:32.887134199 +0900 +++ codeine-1.0.1/src/app/xineEngine.cpp 2020-12-29 18:55:45.586375692 +0900 @@ -21,11 +21,6 @@ #include <unistd.h> -#define XINE_SAFE_MODE 1 - -extern "C" { void _debug( const char *string ) { debug() << string; } } //FIXME - - namespace Codeine { @@ -110,9 +105,7 @@ if( !m_xine ) return false; - #ifdef XINE_SAFE_MODE xine_engine_set_param( m_xine, XINE_ENGINE_PARAM_VERBOSITY, 99 ); - #endif debug() << "xine_config_load()\n"; xine_config_load( m_xine, QFile::encodeName( QDir::homeDirPath() + "/.xine/config" ) ); @@ -120,6 +113,11 @@ debug() << "xine_init()\n"; xine_init( m_xine ); +#if XINE_MAJOR_VERSION > 1 || (XINE_MAJOR_VERSION == 1 && XINE_MINOR_VERSION > 2) || \ + (XINE_MAJOR_VERSION == 1 && XINE_MINOR_VERSION == 2 && XINE_SUB_VERSION >= 10) + xine_register_plugins( m_xine, scope_plugin_info ); +#endif + debug() << "xine_open_video_driver()\n"; m_videoPort = xine_open_video_driver( m_xine, "auto", XINE_VISUAL_TYPE_X11, videoWindow()->x11Visual() ); @@ -146,16 +144,19 @@ xine_osd_set_text_palette( m_osd, XINE_TEXTPALETTE_WHITE_BLACK_TRANSPARENT, XINE_OSD_TEXT1 ); } - #ifndef XINE_SAFE_MODE debug() << "scope_plugin_new()\n"; - m_scope = scope_plugin_new( m_xine, m_audioPort ); +#if XINE_MAJOR_VERSION > 1 || (XINE_MAJOR_VERSION == 1 && XINE_MINOR_VERSION > 2) || \ + (XINE_MAJOR_VERSION == 1 && XINE_MINOR_VERSION == 2 && XINE_SUB_VERSION >= 10) + m_scope = xine_post_init( m_xine, "codeine-scope", 1, &m_audioPort, NULL ); +#else + m_scope = scope_plugin_new( m_xine, m_audioPort ); //FIXME this one seems to make seeking unstable for Codeine, perhaps xine_set_param( m_stream, XINE_PARAM_METRONOM_PREBUFFER, 6000 ); //less buffering, faster seeking.. // causes an abort currently //xine_trick_mode( m_stream, XINE_TRICK_MODE_SEEK_TO_TIME, 1 ); - #endif +#endif { @@ -261,7 +262,6 @@ //TODO popup message for no audio //TODO popup message for no video + no audio - #ifndef XINE_SAFE_MODE // ensure old buffers are deleted // FIXME leaves one erroneous buffer timerEvent( 0 ); @@ -271,7 +271,6 @@ xine_post_in_t *target = (xine_post_in_t*)xine_post_input( m_scope, const_cast<char*>("audio in") ); xine_post_wire( source, target ); } - #endif announceStateChange(); @@ -575,7 +574,8 @@ //prune the buffer list and update the m_current_vpts timestamp timerEvent( 0 ); - for( int channels = xine_get_stream_info( m_stream, XINE_STREAM_INFO_AUDIO_CHANNELS ), frame = 0; frame < SCOPE_SIZE; ) + const int64_t pts_per_smpls = 0; //scope_plugin_pts_per_smpls( m_scope ); +for( int channels = xine_get_stream_info( m_stream, XINE_STREAM_INFO_AUDIO_CHANNELS ), frame = 0; frame < SCOPE_SIZE; ) { MyNode *best_node = 0; @@ -590,7 +590,7 @@ diff = m_current_vpts; diff -= best_node->vpts; diff *= 1<<16; - diff /= myMetronom->pts_per_smpls; + diff /= pts_per_smpls; const int16_t* data16 = best_node->mem; @@ -626,7 +626,6 @@ VideoWindow::timerEvent( QTimerEvent* ) { /// here we prune the buffer list regularly - #ifndef XINE_SAFE_MODE MyNode * const first_node = myList->next; MyNode const * const list_end = myList; @@ -649,7 +648,6 @@ prev = node; } - #endif } void diff -Naru codeine-1.0.1_orig/src/app/xineScope.c codeine-1.0.1/src/app/xineScope.c --- codeine-1.0.1_orig/src/app/xineScope.c 2006-04-05 06:13:12.000000000 +0900 +++ codeine-1.0.1/src/app/xineScope.c 2020-12-29 19:10:20.184693507 +0900 @@ -1,8 +1,6 @@ /* Author: Max Howell <max.howell@methylblue.com>, (C) 2004 Copyright: See COPYING file that comes with this distribution */ -/* gcc doesn't like inline for me */ -#define inline /* need access to port_ticket */ #define XINE_ENGINE_INTERNAL @@ -12,16 +10,10 @@ static MyNode theList; -static metronom_t theMetronom; static int myChannels = 0; +static int64_t pts_per_smpls; MyNode* const myList = &theList; -metronom_t* const myMetronom = &theMetronom; - - -/* defined in xineEngine.cpp */ -extern void _debug( const char * ); - /************************* * post plugin functions * @@ -30,9 +22,7 @@ static int scope_port_open( xine_audio_port_t *port_gen, xine_stream_t *stream, uint32_t bits, uint32_t rate, int mode ) { - _debug( "scope_port_open()\n" ); - - #define port ((post_audio_port_t*)port_gen) + post_audio_port_t *port = (post_audio_port_t *)port_gen; _x_post_rewire( (post_plugin_t*)port->post ); _x_post_inc_usage( port ); @@ -44,13 +34,20 @@ myChannels = _x_ao_mode2channels( mode ); - return port->original_port->open( port->original_port, stream, bits, rate, mode ); + int ret = port->original_port->open( port->original_port, stream, bits, rate, mode ); +#if XINE_MAJOR_VERSION > 1 || (XINE_MAJOR_VERSION == 1 && XINE_MINOR_VERSION > 2) || \ + (XINE_MAJOR_VERSION == 1 && XINE_MINOR_VERSION == 2 && XINE_SUB_VERSION >= 10) + pts_per_smpls = ((uint32_t)90000 * (uint32_t)32768) / rate; +#else + pts_per_smpls = stream->metronom->pts_per_smpls; +#endif + return ret; } static void scope_port_close( xine_audio_port_t *port_gen, xine_stream_t *stream ) { - _debug( "scope_port_close()\n" ); + post_audio_port_t *port = (post_audio_port_t *)port_gen; port->stream = NULL; port->original_port->close( port->original_port, stream ); @@ -61,26 +58,29 @@ static void scope_port_put_buffer( xine_audio_port_t *port_gen, audio_buffer_t *buf, xine_stream_t *stream ) { - MyNode *new_node; - const int num_samples = buf->num_frames * myChannels; + post_audio_port_t *port = (post_audio_port_t *)port_gen; /* we are too simple to handle 8bit */ /* what does it mean when stream == NULL? */ if( port->bits == 8 ) { port->original_port->put_buffer( port->original_port, buf, stream ); return; } - /* I keep my own metronom because xine wouldn't for some reason */ - memcpy( myMetronom, stream->metronom, sizeof(metronom_t) ); + MyNode *new_node; + const int num_samples = buf->num_frames * myChannels; new_node = malloc( sizeof(MyNode) ); - new_node->vpts = myMetronom->got_audio_samples( myMetronom, buf->vpts, buf->num_frames ); +#ifdef METRONOM_VPTS + new_node->vpts = stream->metronom->get_option(stream->metronom, METRONOM_VPTS); +#else + new_node->vpts = stream->metronom->got_audio_samples( stream->metronom, 0, 0 ); +#endif new_node->num_frames = buf->num_frames; new_node->mem = malloc( num_samples * 2 ); memcpy( new_node->mem, buf->mem, num_samples * 2 ); { int64_t - K = myMetronom->pts_per_smpls; /*smpls = 1<<16 samples*/ + K = pts_per_smpls; /*smpls = 1<<16 samples*/ K *= num_samples; K /= (1<<16); K += new_node->vpts; @@ -95,8 +95,6 @@ * NOTE this is thread-safe due to the way we handle the list in the GUI thread */ new_node->next = myList->next; myList->next = new_node; - - #undef port } static void @@ -110,13 +108,17 @@ * plugin init function * ************************/ -xine_post_t* -scope_plugin_new( xine_t *xine, xine_audio_port_t *audio_target ) +#if XINE_MAJOR_VERSION > 1 || (XINE_MAJOR_VERSION == 1 && XINE_MINOR_VERSION > 2) || \ + (XINE_MAJOR_VERSION == 1 && XINE_MINOR_VERSION == 2 && XINE_SUB_VERSION >= 10) +static post_plugin_t* scope_plugin_new( post_class_t *class_gen, int inputs, xine_audio_port_t *audio_target[], xine_video_port_t *video_target[] ) +#else +xine_post_t* scope_plugin_new( xine_t *xine, xine_audio_port_t *audio_target ) +#endif { if( audio_target == NULL ) return NULL; - post_plugin_t *post_plugin = xine_xmalloc( sizeof(post_plugin_t) ); + post_plugin_t *post_plugin = calloc( 1, sizeof(post_plugin_t) ); { post_plugin_t *this = post_plugin; @@ -126,7 +128,12 @@ _x_post_init( this, 1, 0 ); - port = _x_post_intercept_audio_port( this, audio_target, &input, &output ); +#if XINE_MAJOR_VERSION > 1 || (XINE_MAJOR_VERSION == 1 && XINE_MINOR_VERSION > 2) || \ + (XINE_MAJOR_VERSION == 1 && XINE_MINOR_VERSION == 2 && XINE_SUB_VERSION >= 10) + port = _x_post_intercept_audio_port( post_plugin, audio_target[0], &input, &output ); +#else + port = _x_post_intercept_audio_port( post_plugin, audio_target, &input, &output ); +#endif port->new_port.open = scope_port_open; port->new_port.close = scope_port_close; port->new_port.put_buffer = scope_port_put_buffer; @@ -137,12 +144,51 @@ this->dispose = scope_dispose; } +#if XINE_MAJOR_VERSION < 1 || (XINE_MAJOR_VERSION == 1 && XINE_MINOR_VERSION < 2) || \ + (XINE_MAJOR_VERSION == 1 && XINE_MINOR_VERSION == 2 && XINE_SUB_VERSION < 10) /* code is straight from xine_init_post() can't use that function as it only dlopens the plugins and our plugin is statically linked in */ - post_plugin->running_ticket = xine->port_ticket; post_plugin->xine = xine; +#endif +#if XINE_MAJOR_VERSION > 1 || (XINE_MAJOR_VERSION == 1 && XINE_MINOR_VERSION > 2) || \ + (XINE_MAJOR_VERSION == 1 && XINE_MINOR_VERSION == 2 && XINE_SUB_VERSION >= 10) + return post_plugin; +#else return &post_plugin->xine_post; +#endif } + +int64_t scope_plugin_pts_per_smpls( void *post ) +{ + return pts_per_smpls; +} + +#if XINE_MAJOR_VERSION > 1 || (XINE_MAJOR_VERSION == 1 && XINE_MINOR_VERSION > 2) || \ + (XINE_MAJOR_VERSION == 1 && XINE_MINOR_VERSION == 2 && XINE_SUB_VERSION >= 10) +static void *scope_init_plugin(xine_t *xine, const void *data) +{ + static const post_class_t post_scope_class = { + .open_plugin = scope_plugin_new, + .identifier = "codeine-scope", + .description = "Codeine Scope", + .dispose = NULL, + }; + + (void)xine; + (void)data; + + return (void*)&post_scope_class; +} + +static const post_info_t scope_special_info = { + .type = XINE_POST_TYPE_AUDIO_VISUALIZATION, +}; + +const plugin_info_t scope_plugin_info[] = { + { PLUGIN_POST, 10, "codeine-scope", XINE_VERSION_CODE, &scope_special_info, scope_init_plugin }, + { PLUGIN_NONE, 0, NULL, 0, NULL, NULL } +}; +#endif diff -Naru codeine-1.0.1_orig/src/app/xineScope.h codeine-1.0.1/src/app/xineScope.h --- codeine-1.0.1_orig/src/app/xineScope.h 2005-04-28 10:39:55.000000000 +0900 +++ codeine-1.0.1/src/app/xineScope.h 2020-12-29 18:50:08.205096158 +0900 @@ -13,6 +13,15 @@ #include <sys/types.h> #include <xine/metronom.h> +#ifdef __cplusplus +extern "C" +{ +#endif +#include <xine/xine_plugin.h> +#ifdef __cplusplus +} +#endif + typedef struct my_node_s MyNode; struct my_node_s @@ -24,14 +33,18 @@ int64_t vpts_end; }; -extern metronom_t* const myMetronom; extern MyNode* const myList; #ifdef __cplusplus extern "C" { - xine_post_t* - scope_plugin_new( xine_t*, xine_audio_port_t* ); +#if XINE_MAJOR_VERSION > 1 || (XINE_MAJOR_VERSION == 1 && XINE_MINOR_VERSION > 2) || \ + (XINE_MAJOR_VERSION == 1 && XINE_MINOR_VERSION == 2 && XINE_SUB_VERSION >= 10) + extern const plugin_info_t scope_plugin_info[]; +#else + xine_post_t* scope_plugin_new( xine_t*, xine_audio_port_t* ); +#endif + int64_t scope_plugin_pts_per_smpls( void* ); } #endif
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor