]> git.sesse.net Git - ffmpeg/commitdiff
rtpdec_jpeg: Simplify writing of the jpeg header
authorMartin Storsjö <martin@martin.st>
Tue, 11 Sep 2012 09:32:37 +0000 (12:32 +0300)
committerMartin Storsjö <martin@martin.st>
Wed, 12 Sep 2012 09:08:09 +0000 (12:08 +0300)
Generalize writing of any number of qtables. Don't manually write
16 bit values in two separate calls.

Signed-off-by: Martin Storsjö <martin@martin.st>
libavformat/rtpdec_jpeg.c

index 0513b09b3d346856bb3a13865758476a54e123b2..1c75c47137648d82cdd5666bca50bd4a7f441c7f 100644 (file)
@@ -101,7 +101,7 @@ static int jpeg_create_header(uint8_t *buf, int size, uint32_t type, uint32_t w,
 {
     PutBitContext pbc;
     uint8_t *dht_size_ptr;
-    int dht_size;
+    int dht_size, i;
 
     init_put_bits(&pbc, buf, size);
 
@@ -125,21 +125,15 @@ static int jpeg_create_header(uint8_t *buf, int size, uint32_t type, uint32_t w,
 
     /* DQT */
     put_marker(&pbc, DQT);
-    if (nb_qtable == 2) {
-        put_bits(&pbc, 16, 2 + 2 * (1 + 64));
-    } else {
-        put_bits(&pbc, 16, 2 + 1 * (1 + 64));
-    }
-    put_bits(&pbc, 8, 0);
+    put_bits(&pbc, 16, 2 + nb_qtable * (1 + 64));
 
-    /* Each table is an array of 64 values given in zig-zag
-     * order, identical to the format used in a JFIF DQT
-     * marker segment. */
-    avpriv_copy_bits(&pbc, qtable, 64 * 8);
+    for (i = 0; i < nb_qtable; i++) {
+        put_bits(&pbc, 8, i);
 
-    if (nb_qtable == 2) {
-        put_bits(&pbc, 8, 1);
-        avpriv_copy_bits(&pbc, qtable + 64, 64 * 8);
+        /* Each table is an array of 64 values given in zig-zag
+         * order, identical to the format used in a JFIF DQT
+         * marker segment. */
+        avpriv_copy_bits(&pbc, qtable + 64 * i, 64 * 8);
     }
 
     /* DHT */
@@ -163,10 +157,8 @@ static int jpeg_create_header(uint8_t *buf, int size, uint32_t type, uint32_t w,
     put_marker(&pbc, SOF0);
     put_bits(&pbc, 16, 17);
     put_bits(&pbc, 8, 8);
-    put_bits(&pbc, 8, h >> 8);
-    put_bits(&pbc, 8, h);
-    put_bits(&pbc, 8, w >> 8);
-    put_bits(&pbc, 8, w);
+    put_bits(&pbc, 16, h);
+    put_bits(&pbc, 16, w);
     put_bits(&pbc, 8, 3);
     put_bits(&pbc, 8, 1);
     put_bits(&pbc, 8, type ? 34 : 33);