mirror of https://git.ffmpeg.org/ffmpeg.git
png_parser: Fix parsing on big endian
Since pc.state is populated by shifting in from the end of the 32 bit word, the content within pc.state is already in native endian and should not be read with the AV_R{L,B} functions. This was already done correctly for state64 above. This fixes the fate-corepng test on big endian. Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
d8fd183683
commit
b3189aff8b
|
@ -78,7 +78,7 @@ static int png_parse(AVCodecParserContext *s, AVCodecContext *avctx,
|
|||
for (; ppc->pc.frame_start_found && i < buf_size; i++) {
|
||||
ppc->pc.state = (ppc->pc.state << 8) | buf[i];
|
||||
if (ppc->chunk_pos == 3) {
|
||||
ppc->chunk_length = AV_RL32(&ppc->pc.state);
|
||||
ppc->chunk_length = ppc->pc.state;
|
||||
if (ppc->chunk_length > 0x7fffffff) {
|
||||
ppc->chunk_pos = ppc->pc.frame_start_found = 0;
|
||||
goto flush;
|
||||
|
@ -87,7 +87,7 @@ static int png_parse(AVCodecParserContext *s, AVCodecContext *avctx,
|
|||
} else if (ppc->chunk_pos == 7) {
|
||||
if (ppc->chunk_length >= buf_size - i)
|
||||
ppc->remaining_size = ppc->chunk_length - buf_size + i + 1;
|
||||
if (AV_RB32(&ppc->pc.state) == MKTAG('I', 'E', 'N', 'D')) {
|
||||
if (ppc->pc.state == MKBETAG('I', 'E', 'N', 'D')) {
|
||||
if (ppc->remaining_size)
|
||||
ppc->chunk_pos = -1;
|
||||
else
|
||||
|
|
Loading…
Reference in New Issue