Update of /cvs/poppler/poppler/qt4/src
In directory kemper:/tmp/cvs-serv20800/qt4/src

Modified Files:
        poppler-sound.cc 
Log Message:
        * poppler/Sound.h:
        * poppler/Sound.cc:
        * qt4/src/poppler-sound.cc: Move most of the sound reading code
        into the Sound class, so frontends can use it easily.
        Patch by Pino Toscano <[EMAIL PROTECTED]>.


Index: poppler-sound.cc
===================================================================
RCS file: /cvs/poppler/poppler/qt4/src/poppler-sound.cc,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- poppler-sound.cc    6 Jan 2007 21:53:08 -0000       1.2
+++ poppler-sound.cc    17 Jan 2007 20:06:30 -0000      1.3
@@ -1,5 +1,5 @@
 /* poppler-sound.cc: qt interface to poppler
- * Copyright (C) 2006, Pino Toscano <[EMAIL PROTECTED]>
+ * Copyright (C) 2006-2007, Pino Toscano <[EMAIL PROTECTED]>
  *
  * 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
@@ -18,12 +18,7 @@
 
 #define UNSTABLE_POPPLER_QT4
 
-#include <QtCore/QByteArray>
-#include <QtCore/QString>
-#include <QtCore/QVariant>
-
 #include "Object.h"
-#include "Dict.h"
 #include "Stream.h"
 #include "Sound.h"
 
@@ -36,107 +31,41 @@
 {
 public:
        SoundData()
-         : m_channels( 1 ), m_bitsPerSample( 8 ), m_soundEncoding( 
SoundObject::Raw ), m_soundObj( new Object() )
-       { m_soundObj->initNull(); }
+         : m_soundObj( 0 )
+       {
+       }
 
        ~SoundData()
        {
-               m_soundObj->free();
                delete m_soundObj;
        }
 
-       QVariant m_data;
        SoundObject::SoundType m_type;
-       double m_samplingRate;
-       int m_channels;
-       int m_bitsPerSample;
-       SoundObject::SoundEncoding m_soundEncoding;
-       Object *m_soundObj;
+       Sound *m_soundObj;
 };
 
 SoundObject::SoundObject(Sound *popplersound)
 {
        m_soundData = new SoundData();
-       Dict *dict = popplersound->getStream()->getDict();
-       Object tmp;
-       // file specs / data
-       dict->lookup("F", &tmp);
-       if ( !tmp.isNull() )
-       {
-               // valid 'F' key -> external file
-               m_soundData->m_type = SoundObject::External;
-               // TODO read the file specifications
-               m_soundData->m_data = QVariant( QString() );
-       }
-       else
-       {
-               // no file specification, then the sound data have to be
-               // extracted from the stream
-               m_soundData->m_type = SoundObject::Embedded;
-               Stream *stream = popplersound->getStream();
-               stream->reset();
-               int dataLen = 0;
-               QByteArray fileArray;
-               int i;
-               while ( (i = stream->getChar()) != EOF) {
-                       fileArray[dataLen] = (char)i;
-                       ++dataLen;
-               }
-               fileArray.resize(dataLen);
-               m_soundData->m_data = QVariant( fileArray );
-       }
-       tmp.free();
-       // sampling rate
-       dict->lookup( "R", &tmp );
-       if ( tmp.isNum() )
-       {
-               m_soundData->m_samplingRate = tmp.getNum();
-       }
-       tmp.free();
-       // sound channels
-       dict->lookup( "C", &tmp );
-       if ( tmp.isInt() )
-       {
-               m_soundData->m_channels = tmp.getInt();
-       }
-       tmp.free();
-       // sound channels
-       dict->lookup( "B", &tmp );
-       if ( tmp.isInt() )
-       {
-               m_soundData->m_bitsPerSample = tmp.getInt();
-       }
-       tmp.free();
-       // encoding format
-       dict->lookup( "E", &tmp );
-       if ( tmp.isName() )
+       switch ( popplersound->getSoundKind() )
        {
-               const char *enc = tmp.getName();
-               if ( !strcmp( "Raw", enc ) )
-                       m_soundData->m_soundEncoding = SoundObject::Raw;
-               else if ( !strcmp( "Signed", enc ) )
-                       m_soundData->m_soundEncoding = SoundObject::Signed;
-               if ( !strcmp( "muLaw", enc ) )
-                       m_soundData->m_soundEncoding = SoundObject::muLaw;
-               if ( !strcmp( "ALaw", enc ) )
-                       m_soundData->m_soundEncoding = SoundObject::ALaw;
+               case soundEmbedded:
+                       m_soundData->m_type = SoundObject::Embedded;
+                       break;
+               case soundExternal:
+               default:
+                       m_soundData->m_type = SoundObject::External;
+                       break;
        }
-       tmp.free();
-       // at the end, copying the object
-       popplersound->getObject()->copy(m_soundData->m_soundObj);
+
+       m_soundData->m_soundObj = popplersound->copy();
 }
 
 SoundObject::SoundObject(const SoundObject &s)
 {
        m_soundData = new SoundData();
        m_soundData->m_type = s.m_soundData->m_type;
-       m_soundData->m_data = s.m_soundData->m_data;
-       m_soundData->m_type = s.m_soundData->m_type;
-       m_soundData->m_samplingRate = s.m_soundData->m_samplingRate;
-       m_soundData->m_channels = s.m_soundData->m_channels;
-       m_soundData->m_bitsPerSample = s.m_soundData->m_bitsPerSample;
-       m_soundData->m_soundEncoding = s.m_soundData->m_soundEncoding;
-       s.m_soundData->m_soundObj->copy(m_soundData->m_soundObj);
+       m_soundData->m_soundObj = s.m_soundData->m_soundObj->copy();
 }
 
 SoundObject::~SoundObject()
@@ -151,32 +80,61 @@
 
 QString SoundObject::url() const
 {
-       return m_soundData->m_type == SoundObject::External ? 
m_soundData->m_data.toString() : QString();
+       if ( m_soundData->m_type != SoundObject::External )
+               return QString();
+
+       GooString * goo = m_soundData->m_soundObj->getFileName();
+       return goo ? QString( goo->getCString() ) : QString();
 }
 
 QByteArray SoundObject::data() const
 {
-       return m_soundData->m_type == SoundObject::Embedded ? 
m_soundData->m_data.toByteArray() : QByteArray();
+       if ( m_soundData->m_type != SoundObject::Embedded )
+               return QByteArray();
+
+       Stream *stream = m_soundData->m_soundObj->getStream();
+       stream->reset();
+       int dataLen = 0;
+       QByteArray fileArray;
+       int i;
+       while ( (i = stream->getChar()) != EOF) {
+               fileArray[dataLen] = (char)i;
+               ++dataLen;
+       }
+       fileArray.resize(dataLen);
+
+       return fileArray;
 };
 
 double SoundObject::samplingRate() const
 {
-       return m_soundData->m_samplingRate;
+       return m_soundData->m_soundObj->getSamplingRate();
 }
 
 int SoundObject::channels() const
 {
-       return m_soundData->m_channels;
+       return m_soundData->m_soundObj->getChannels();
 }
 
 int SoundObject::bitsPerSample() const
 {
-       return m_soundData->m_bitsPerSample;
+       return m_soundData->m_soundObj->getBitsPerSample();
 }
 
 SoundObject::SoundEncoding SoundObject::soundEncoding() const
 {
-       return m_soundData->m_soundEncoding;
+       switch ( m_soundData->m_soundObj->getEncoding() )
+       {
+               case soundRaw:
+                       return SoundObject::Raw;
+               case soundSigned:
+                       return SoundObject::Signed;
+               case soundMuLaw:
+                       return SoundObject::muLaw;
+               case soundALaw:
+                       return SoundObject::ALaw;
+       }
+       return SoundObject::Raw;
 }
 
 }

_______________________________________________
poppler mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/poppler

Reply via email to