gug-bg-herd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[k3b] Помощ при миграция libmpcdec3 -> libmpcdec6


From: Yavor Doganov
Subject: [k3b] Помощ при миграция libmpcdec3 -> libmpcdec6
Date: Fri, 05 Jun 2009 13:39:44 +0300

Следва k3b (#476379).  Тук големия зор беше зареждането на приставките,
когато програмата е инсталирана с prefix != този на системните
библиотеки на KDE4 (т.е. изхода на `kde4-config --prefix) [1], както и
първия ми сблъсък със CMake (address@hidden).

Кръпката е срещу SVN trunk (upstream) [2], защото порта за KDE4 ще
замени старата версия на k3b съвсем скоро.

Не съм сигурен за тази промяна:

#ifdef MPC_OLD_API
m_decoder          = new mpc_decoder;
#endif

но иначе получавам грешки при компилиране.

Тествах с двата формата -- файловете се добавят, като правилно се
извлича времетраенето.  (Функционалността за изпълнение на песните
plugins/audiooutput/* изглежда е временно премахната в новата версия.)

[1] Ако kde4libs е в /usr, а инсталирате k3b (или което и да е
приложение за KDE4) някъде другаде, трябва да се добавят тези два реда в
~/kde{4}/share/config/kdeglobals:

[Directories]
prefixes=/path/to/alternative/prefix

и след това да се изпълни (като нормален потребител) kbuildsycoca4.
Инак приставките в ${libdir}/kde4/ не могат да се заредят.

[2] svn://anonsvn.kde.org/home/kde/trunk/extragear/multimedia/k3b

(И да, компилирането на k3b е истинска Голгота за процесора :-{  Все пак
се надявам някой да прегледа кръпката и да тества, преди да я подам.)
Index: cmake/modules/FindMuse.cmake
===================================================================
--- cmake/modules/FindMuse.cmake        (revision 977727)
+++ cmake/modules/FindMuse.cmake        (working copy)
@@ -16,12 +16,17 @@
 endif ( MUSE_INCLUDE_DIR AND MUSE_LIBRARIES )
 
 
-FIND_PATH(MUSE_INCLUDE_DIR NAMES mpcdec/mpcdec.h
+FIND_PATH(MUSE_INCLUDE_DIR NAMES mpc/mpcdec.h
 )
 
 if(MUSE_INCLUDE_DIR)
   FIND_LIBRARY(MUSE_LIBRARIES NAMES mpcdec)
+  set(MPC_HEADER_FILE "<mpc/mpcdec.h>")
+else(MUSE_INCLUDE_DIR)
+  FIND_PATH(MUSE_INCLUDE_DIR NAMES mpcdec/mpcdec.h)
+  FIND_LIBRARY(MUSE_LIBRARIES NAMES mpcdec)
   set(MPC_HEADER_FILE "<mpcdec/mpcdec.h>")
+  set(MPC_OLD_API 1)
 else(MUSE_INCLUDE_DIR)
   FIND_PATH(MUSE_INCLUDE_DIR NAMES musepack/musepack.h)
   set(MPC_HEADER_FILE "<musepack/musepack.h>")
Index: plugins/decoder/musepack/k3bmpcwrapper.cpp
===================================================================
--- plugins/decoder/musepack/k3bmpcwrapper.cpp  (revision 977727)
+++ plugins/decoder/musepack/k3bmpcwrapper.cpp  (working copy)
@@ -19,32 +19,60 @@
 #include <qfile.h>
 
 
+#ifdef MPC_OLD_API
 mpc_int32_t read_impl( void* data, void* ptr, mpc_int32_t size )
 {
   QFile* input = static_cast<QFile*>( data );
+#else
+mpc_int32_t read_impl( mpc_reader* data, void* ptr, mpc_int32_t size )
+{
+  QFile* input = static_cast<QFile*>( data->data );
+#endif
   return input->read( (char*)ptr, size );
 }
 
 
+#ifdef MPC_OLD_API
 mpc_bool_t seek_impl( void* data, mpc_int32_t offset )
 {
   QFile* input = static_cast<QFile*>( data );
+#else
+mpc_bool_t seek_impl( mpc_reader* data, mpc_int32_t offset )
+{
+  QFile* input = static_cast<QFile*>( data->data );
+#endif
   return input->seek( offset );
 }
 
+#ifdef MPC_OLD_API
 mpc_int32_t tell_impl( void* data )
 {
   QFile* input = static_cast<QFile*>( data );
+#else
+mpc_int32_t tell_impl( mpc_reader* data )
+{
+  QFile* input = static_cast<QFile*>( data->data );
+#endif
   return input->pos();
 }
 
+#ifdef MPC_OLD_API
 mpc_int32_t get_size_impl( void* data )
 {
   QFile* input = static_cast<QFile*>( data );
+#else
+mpc_int32_t get_size_impl( mpc_reader* data )
+{
+  QFile* input = static_cast<QFile*>( data->data );
+#endif
   return input->size();
 }
 
+#ifdef MPC_OLD_API
 mpc_bool_t canseek_impl( void* )
+#else
+mpc_bool_t canseek_impl( mpc_reader* )
+#endif
 {
   return true;
 }
@@ -74,7 +102,9 @@
   m_reader->canseek  = canseek_impl;
   m_reader->data     = m_input;
 
+#ifdef MPC_OLD_API
   m_decoder          = new mpc_decoder;
+#endif
 
   m_info             = new mpc_streaminfo;
 }
@@ -85,7 +115,12 @@
   close();
 
   delete m_reader;
+#ifdef MPC_OLD_API
   delete m_decoder;
+#else
+  if( m_decoder)
+    mpc_demux_exit( m_decoder );
+#endif
   delete m_info;
   delete m_input;
 }
@@ -98,6 +133,7 @@
   m_input->setFileName( filename );
 
   if( m_input->open( QIODevice::ReadOnly ) ) {
+#ifdef MPC_OLD_API
     mpc_streaminfo_init( m_info );
     if( mpc_streaminfo_read( m_info, m_reader ) != ERROR_CODE_OK ) {
       kDebug() << "(K3bMpcWrapper) Not a valid musepack file: \"" << filename 
<< "\"";
@@ -106,16 +142,25 @@
     else {
       mpc_decoder_setup( m_decoder, m_reader );
       if( !mpc_decoder_initialize( m_decoder, m_info ) ) {
+#else
+      m_decoder = mpc_demux_init( m_reader );
+      if( !m_decoder ) {
+#endif
        kDebug() << "(K3bMpcWrapper) failed to initialize the Musepack 
decoder.";
        close();
        return false;
       }
       else {
+#ifndef MPC_OLD_API
+       mpc_demux_get_info( m_decoder, m_info );
+#endif
        kDebug() << "(K3bMpcWrapper) valid musepack file. " 
                  << channels() << " Channels and Samplerate: " << samplerate() 
<< endl;
        return true;
       }
+#ifdef MPC_OLD_API
     }
+#endif
   }
   else
     return false;
@@ -133,8 +178,17 @@
   // FIXME: make this a member variable
   MPC_SAMPLE_FORMAT sample_buffer[MPC_DECODER_BUFFER_LENGTH];
 
+#ifdef MPC_OLD_API
   unsigned int samples = mpc_decoder_decode( m_decoder, sample_buffer, 0, 0 );
+#else
+  unsigned int samples;
+  mpc_frame_info frame;
 
+  frame.buffer = sample_buffer;
+  mpc_demux_decode( m_decoder, &frame);
+  samples = frame.samples;
+#endif
+
   if( samples*channels()*2 > (unsigned int)max ) {
     kDebug() << "(K3bMpcWrapper) buffer not big enough.";
     return -1;
@@ -170,7 +224,11 @@
 
 bool K3bMpcWrapper::seek( const K3b::Msf& msf )
 {
+#ifdef MPC_OLD_API
   return mpc_decoder_seek_seconds( m_decoder, (double)msf.totalFrames()/75.0 );
+#else
+  return mpc_demux_seek_second( m_decoder, (double)msf.totalFrames()/75.0 );
+#endif
 }
 
 
Index: plugins/decoder/musepack/k3bmpcwrapper.h
===================================================================
--- plugins/decoder/musepack/k3bmpcwrapper.h    (revision 977727)
+++ plugins/decoder/musepack/k3bmpcwrapper.h    (working copy)
@@ -49,7 +49,11 @@
  private:
   QFile* m_input;
   mpc_reader* m_reader;
+#ifdef MPC_OLD_API
   mpc_decoder* m_decoder;
+#else
+  mpc_demux* m_decoder;
+#endif
   mpc_streaminfo* m_info;
 };
 
Index: plugins/decoder/musepack/k3bmpc_config.h.cmake
===================================================================
--- plugins/decoder/musepack/k3bmpc_config.h.cmake      (revision 977727)
+++ plugins/decoder/musepack/k3bmpc_config.h.cmake      (working copy)
@@ -1 +1,2 @@
 #define MPC_HEADER_FILE ${MPC_HEADER_FILE}
+#cmakedefine MPC_OLD_API

reply via email to

[Prev in Thread] Current Thread [Next in Thread]