diff options
author | Martin Storsjö <martin@martin.st> | 2012-09-11 13:32:37 +0400 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2012-09-12 13:08:09 +0400 |
commit | 43957fcc71c08697eea7c684900ac793c87e487c (patch) | |
tree | 2ea0ea9e0b0561aeb7989caf01eb0d154a5040d6 /libavformat/rtpdec_jpeg.c | |
parent | 932d8300d38587ebc223e3bacc3c33ed68bf3cf6 (diff) |
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@martin.st>
Diffstat (limited to 'libavformat/rtpdec_jpeg.c')
-rw-r--r-- | libavformat/rtpdec_jpeg.c | 28 |
1 files changed, 10 insertions, 18 deletions
diff --git a/libavformat/rtpdec_jpeg.c b/libavformat/rtpdec_jpeg.c index 0513b09b3d..1c75c47137 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); |