mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-17 21:14:47 +00:00
avcodec/exr: fix layer detection
Only test a channel if the layer name match. Avoid to try to mix channel between the main layer (rgba layer), and the layer request by the user.
This commit is contained in:
parent
43a4276c69
commit
753088a2a4
@ -1262,6 +1262,7 @@ static int check_header_variable(EXRContext *s,
|
||||
static int decode_header(EXRContext *s)
|
||||
{
|
||||
int magic_number, version, i, flags, sar = 0;
|
||||
int layer_match = 0;
|
||||
|
||||
s->current_channel_offset = 0;
|
||||
s->xmin = ~0;
|
||||
@ -1332,14 +1333,21 @@ static int decode_header(EXRContext *s)
|
||||
|
||||
if (strcmp(s->layer, "") != 0) {
|
||||
if (strncmp(ch_gb.buffer, s->layer, strlen(s->layer)) == 0) {
|
||||
layer_match = 1;
|
||||
av_log(s->avctx, AV_LOG_INFO,
|
||||
"Channel match layer : %s.\n", ch_gb.buffer);
|
||||
ch_gb.buffer += strlen(s->layer);
|
||||
if (*ch_gb.buffer == '.')
|
||||
ch_gb.buffer++; /* skip dot if not given */
|
||||
} else {
|
||||
av_log(s->avctx, AV_LOG_INFO,
|
||||
"Layer %s.%s matched.\n", s->layer, ch_gb.buffer);
|
||||
"Channel doesn't match layer : %s.\n", ch_gb.buffer);
|
||||
}
|
||||
} else {
|
||||
layer_match = 1;
|
||||
}
|
||||
|
||||
if (layer_match) { /* only search channel if the layer match is valid */
|
||||
if (!strcmp(ch_gb.buffer, "R") ||
|
||||
!strcmp(ch_gb.buffer, "X") ||
|
||||
!strcmp(ch_gb.buffer, "U"))
|
||||
@ -1357,6 +1365,7 @@ static int decode_header(EXRContext *s)
|
||||
else
|
||||
av_log(s->avctx, AV_LOG_WARNING,
|
||||
"Unsupported channel %.256s.\n", ch_gb.buffer);
|
||||
}
|
||||
|
||||
/* skip until you get a 0 */
|
||||
while (bytestream2_get_bytes_left(&ch_gb) > 0 &&
|
||||
|
Loading…
Reference in New Issue
Block a user