| @@ -660,18 +660,14 @@ static int j2k_probe(AVProbeData *p) | |||||
| static int jpeg_probe(AVProbeData *p) | static int jpeg_probe(AVProbeData *p) | ||||
| { | { | ||||
| const uint8_t *b = p->buf; | const uint8_t *b = p->buf; | ||||
| int i, state = 0xD8, exif_size = 0; | |||||
| int i, state = 0xD8; | |||||
| if (AV_RB16(b) != 0xFFD8 || | if (AV_RB16(b) != 0xFFD8 || | ||||
| AV_RB32(b) == 0xFFD8FFF7) | AV_RB32(b) == 0xFFD8FFF7) | ||||
| return 0; | return 0; | ||||
| b += 2; | b += 2; | ||||
| if (AV_RB16(b) == 0xFFE1 && AV_RB32(b + 4) == AV_RB32("Exif")) { | |||||
| exif_size = AV_RB16(b + 2) + 2; | |||||
| b += exif_size; | |||||
| } | |||||
| for (i = 0; i + exif_size < p->buf_size - 2; i++) { | |||||
| for (i = 0; i < p->buf_size - 3; i++) { | |||||
| int c; | int c; | ||||
| if (b[i] != 0xFF) | if (b[i] != 0xFF) | ||||
| continue; | continue; | ||||
| @@ -700,6 +696,24 @@ static int jpeg_probe(AVProbeData *p) | |||||
| return 0; | return 0; | ||||
| state = 0xD9; | state = 0xD9; | ||||
| break; | break; | ||||
| case 0xE0: | |||||
| case 0xE1: | |||||
| case 0xE2: | |||||
| case 0xE3: | |||||
| case 0xE4: | |||||
| case 0xE5: | |||||
| case 0xE6: | |||||
| case 0xE7: | |||||
| case 0xE8: | |||||
| case 0xE9: | |||||
| case 0xEA: | |||||
| case 0xEB: | |||||
| case 0xEC: | |||||
| case 0xED: | |||||
| case 0xEE: | |||||
| case 0xEF: | |||||
| i += AV_RB16(&b[i + 2]) + 1; | |||||
| break; | |||||
| default: | default: | ||||
| if ( (c >= 0x02 && c <= 0xBF) | if ( (c >= 0x02 && c <= 0xBF) | ||||
| || c == 0xC8) | || c == 0xC8) | ||||