[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    kdeextragear-2/taglib/ogg
From:       Scott Wheeler <wheeler () kde ! org>
Date:       2003-10-17 0:32:50
[Download RAW message or body]

CVS commit by wheeler: 

More hacks that *might* actually make Vorbis comment saving work.  I doubt
it, but I'll test later.  This is ugly and non-generic and all ofther sorts
of bad things, but it's a reasonable starting point for some non-trivial
code.


  M +20 -0     oggfile.cpp   1.9


--- kdeextragear-2/taglib/ogg/oggfile.cpp  #1.8:1.9
@@ -34,4 +34,5 @@ class Ogg::File::FilePrivate
 public:
   FilePrivate() :
+    streamSerialNumber(-1),
     currentPage(0)
     {}
@@ -41,6 +42,8 @@ public:
   }
 
+  int streamSerialNumber;
   Page *currentPage;
   ByteVectorList packets;
+  List<int> pageSizes;
 };
 
@@ -72,4 +75,7 @@ ByteVector Ogg::File::packet(uint i)
     delete d->currentPage;
     d->currentPage = new Page(this, nextPageOffset);
+    d->pageSizes.append(d->currentPage->size());
+    if(d->streamSerialNumber < 0)
+      d->streamSerialNumber = d->currentPage->pageHeader()->streamSerialNumber();
 
     // Handle the case of a Ogg packet spanning multiple pages.
@@ -81,4 +87,5 @@ ByteVector Ogg::File::packet(uint i)
       delete d->currentPage;
       d->currentPage = new Page(this, nextPageOffset);
+      d->pageSizes.append(d->currentPage->size());
     }
 
@@ -111,4 +118,17 @@ ByteVector Ogg::File::packet(uint i)
 
   return v;
+}
+
+void Ogg::File::save()
+{
+  ByteVectorList l;
+  l.append(packet(1));
+  l.append(commentPackets());
+  List<Page *> pages = Page::paginate(l, Page::SinglePagePerGroup,
+                                      d->streamSerialNumber, 0);
+
+  insert(pages.front()->render(), 0, d->pageSizes.front());
+  d->pageSizes[0] = pages.front()->size();
+  delete pages.front();
 }
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic