mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-24 13:56:33 +02:00
lavf/rtpenc_jpeg: Fix sending multiple quantization tables.
This commit is contained in:
parent
99b0cadd13
commit
9901e53187
@ -28,7 +28,7 @@
|
||||
void ff_rtp_send_jpeg(AVFormatContext *s1, const uint8_t *buf, int size)
|
||||
{
|
||||
RTPMuxContext *s = s1->priv_data;
|
||||
const uint8_t *qtables = NULL;
|
||||
const uint8_t *qtables[4] = { NULL };
|
||||
int nb_qtables = 0;
|
||||
uint8_t type;
|
||||
uint8_t w, h;
|
||||
@ -64,18 +64,25 @@ void ff_rtp_send_jpeg(AVFormatContext *s1, const uint8_t *buf, int size)
|
||||
continue;
|
||||
|
||||
if (buf[i + 1] == DQT) {
|
||||
int tables, j;
|
||||
if (buf[i + 4] & 0xF0)
|
||||
av_log(s1, AV_LOG_WARNING,
|
||||
"Only 8-bit precision is supported.\n");
|
||||
|
||||
/* a quantization table is 64 bytes long */
|
||||
nb_qtables = AV_RB16(&buf[i + 2]) / 65;
|
||||
if (i + 4 + nb_qtables * 65 > size) {
|
||||
tables = AV_RB16(&buf[i + 2]) / 65;
|
||||
if (i + 5 + tables * 65 > size) {
|
||||
av_log(s1, AV_LOG_ERROR, "Too short JPEG header. Aborted!\n");
|
||||
return;
|
||||
}
|
||||
if (nb_qtables + tables > 4) {
|
||||
av_log(s1, AV_LOG_ERROR, "Invalid number of quantisation tables\n");
|
||||
return;
|
||||
}
|
||||
|
||||
qtables = &buf[i + 4];
|
||||
for (j = 0; j < tables; j++)
|
||||
qtables[nb_qtables + j] = buf + i + 5 + j * 65;
|
||||
nb_qtables += tables;
|
||||
} else if (buf[i + 1] == SOF0) {
|
||||
if (buf[i + 14] != 17 || buf[i + 17] != 17) {
|
||||
av_log(s1, AV_LOG_ERROR,
|
||||
@ -150,7 +157,7 @@ void ff_rtp_send_jpeg(AVFormatContext *s1, const uint8_t *buf, int size)
|
||||
bytestream_put_be16(&p, 64 * nb_qtables);
|
||||
|
||||
for (i = 0; i < nb_qtables; i++)
|
||||
bytestream_put_buffer(&p, &qtables[65 * i + 1], 64);
|
||||
bytestream_put_buffer(&p, qtables[i], 64);
|
||||
}
|
||||
|
||||
/* copy payload data */
|
||||
|
Loading…
x
Reference in New Issue
Block a user