[FFmpeg-cvslog] rtpdec_jpeg: Simplify writing of the jpeg header

Martin Storsjö git at videolan.org
Thu Sep 13 15:29:00 CEST 2012


ffmpeg | branch: master | Martin Storsjö <martin at martin.st> | Tue Sep 11 12:32:37 2012 +0300| [43957fcc71c08697eea7c684900ac793c87e487c] | committer: Martin Storsjö

rtpdec_jpeg: Simplify writing of the jpeg header

Generalize writing of any number of qtables. Don't manually write
16 bit values in two separate calls.

Signed-off-by: Martin Storsjö <martin at martin.st>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=43957fcc71c08697eea7c684900ac793c87e487c
---

 libavformat/rtpdec_jpeg.c |   28 ++++++++++------------------
 1 file changed, 10 insertions(+), 18 deletions(-)

diff --git a/libavformat/rtpdec_jpeg.c b/libavformat/rtpdec_jpeg.c
index 0513b09..1c75c47 100644
--- a/libavformat/rtpdec_jpeg.c
+++ b/libavformat/rtpdec_jpeg.c
@@ -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);



More information about the ffmpeg-cvslog mailing list