Revert "Create three ogg pages when skipping vorbis comments."
authorAndre Noll <maan@systemlinux.org>
Thu, 24 Feb 2011 10:16:16 +0000 (11:16 +0100)
committerAndre Noll <maan@systemlinux.org>
Thu, 24 Feb 2011 10:16:16 +0000 (11:16 +0100)
This reverts commit 3569c4ac0d5b35318e741b0123bc707473261ad9 since
it did not fix the problem at all.  A proper fix is provided in the
next commit.

ogg_afh.c
ogg_afh_common.c

index e2d8dbc8f9130331b2c8e2bb3523bc9e25c2a4c3..2837db61c7de43a732564c8d46fec14ef6b4331e 100644 (file)
--- a/ogg_afh.c
+++ b/ogg_afh.c
@@ -85,18 +85,6 @@ static void add_ogg_page(ogg_page *og, struct vorbis_get_header_data *vghd)
                og->header_len, og->body_len, old_len, new_len);
 }
 
-/*
- * Process the first three ogg packets.
- *
- * This creates chunk zero (the audio file header) from the first three ogg
- * packets of the input file with metadata (vorbis comments) stripped off. Page
- * 0 of the input file always contains only ogg packet #0 while page 1 usually
- * contains both packets 1 (comments) and 2 (setup).  However, we always create
- * an separate ogg page for each packet to circumvent a bug in older libogg
- * versions which causes too little data being copied to the second ogg page.
- * This affects at least Ubuntu Hardy, and there is no real disadvantage in
- * creating three pages instead of two.
- */
 static int vorbis_get_header_callback(ogg_packet *packet, int packet_num,
                int serial, __a_unused struct afh_info *afhi, void *private_data)
 {
@@ -112,8 +100,7 @@ static int vorbis_get_header_callback(ogg_packet *packet, int packet_num,
                0xff /* framing bit */
        };
 
-       PARA_DEBUG_LOG("processing ogg packet #%d (%li bytes)\n",
-               packet_num, packet->bytes);
+       PARA_DEBUG_LOG("processing ogg packet #%d\n", packet_num);
        if (packet_num > 2)
                return 0;
        if (packet_num == 0) {
@@ -129,19 +116,15 @@ static int vorbis_get_header_callback(ogg_packet *packet, int packet_num,
                return 1;
        }
        if (packet_num == 1) {
-               PARA_INFO_LOG("replacing metadata packet (saved %ld bytes)\n",
-                       packet->bytes - sizeof(dummy_packet));
+               PARA_INFO_LOG("replacing metadata packet\n");
                ogg_packet replacement = *packet;
                replacement.packet = dummy_packet;
                replacement.bytes = sizeof(dummy_packet);
+               ret = ogg_stream_packetin(&vghd->os, &replacement);
+               if (ret >= 0)
+                       return 1;
                ret = -E_OGG_PACKET_IN;
-               if (ogg_stream_packetin(&vghd->os, &replacement) < 0)
-                       goto out;
-               ret = -E_OGG_STREAM_FLUSH;
-               if (ogg_stream_flush(&vghd->os, &og) == 0)
-                       goto out;
-               add_ogg_page(&og, vghd);
-               return 1;
+               goto out;
        }
        ret = -E_OGG_PACKET_IN;
        if (ogg_stream_packetin(&vghd->os, packet) < 0)
@@ -171,7 +154,7 @@ static void vorbis_get_header(void *map, size_t mapsize, char **buf,
                goto fail;
        *buf = vghd.buf;
        *len = vghd.len;
-       PARA_INFO_LOG("created %zu byte ogg/vorbis header chunk\n", *len);
+       PARA_INFO_LOG("created %zu byte ogg vorbis header\n", *len);
        return;
 fail:
        PARA_ERROR_LOG("%s\n", para_strerror(-ret));
index 777e2138ec3f858b5fe14e5706e9f74806944821..ad5963ebc1488ca32d6c2055ee5009fd377d4c8c 100644 (file)
@@ -32,19 +32,15 @@ static int process_packets_2_and_3(ogg_sync_state *oss,
                                break; /* Need more data */
                        if (ret != 1)
                                continue;
-                       PARA_DEBUG_LOG("next input page (header/body): %lu/%lu\n",
-                               page.header_len, page.body_len);
                        /*
                         * We can ignore any errors here as they'll also become
                         * apparent at packetout.
                         */
                        ogg_stream_pagein(stream, &page);
-                       PARA_DEBUG_LOG("ogg page serial: %d\n",
+                       PARA_INFO_LOG("ogg page serial: %d\n",
                                ogg_page_serialno(&page));
                        while (i < 2) {
                                ret = ogg_stream_packetout(stream, &packet);
-                               PARA_DEBUG_LOG("packet #%d: %lu bytes\n", i + 1,
-                                       packet.bytes);
                                if (ret == 0)
                                        break;
                                if (ret < 0)
@@ -73,8 +69,6 @@ static int process_ogg_packets(ogg_sync_state *oss, struct afh_info *afhi,
 
        if (ogg_sync_pageout(oss, &page) != 1)
                return -E_SYNC_PAGEOUT;
-       PARA_DEBUG_LOG("first input page (header/body): %lu/%lu\n",
-               page.header_len, page.body_len);
 
        ret = ogg_page_serialno(&page);
        ogg_stream_init(&stream, ret);
@@ -86,7 +80,6 @@ static int process_ogg_packets(ogg_sync_state *oss, struct afh_info *afhi,
        ret = -E_STREAM_PACKETOUT;
        if (ogg_stream_packetout(&stream, &packet) != 1)
                goto out;
-       PARA_DEBUG_LOG("packet #0: %lu bytes\n", packet.bytes);
        ret = ci->packet_callback(&packet, 0, ogg_page_serialno(&page),
                afhi, ci->private_data);
        if (ret < 0)