Commit 6d7f5667 authored by Martin Vignali's avatar Martin Vignali Committed by Paul B Mahol

avcodec/exr: enable mipmap, ripmap decoding

parent 37497488
...@@ -73,11 +73,13 @@ enum ExrTileLevelMode { ...@@ -73,11 +73,13 @@ enum ExrTileLevelMode {
EXR_TILE_LEVEL_ONE, EXR_TILE_LEVEL_ONE,
EXR_TILE_LEVEL_MIPMAP, EXR_TILE_LEVEL_MIPMAP,
EXR_TILE_LEVEL_RIPMAP, EXR_TILE_LEVEL_RIPMAP,
EXR_TILE_LEVEL_UNKNOWN,
}; };
enum ExrTileLevelRound { enum ExrTileLevelRound {
EXR_TILE_ROUND_UP, EXR_TILE_ROUND_UP,
EXR_TILE_ROUND_DOWN, EXR_TILE_ROUND_DOWN,
EXR_TILE_ROUND_UNKNOWN,
}; };
typedef struct EXRChannel { typedef struct EXRChannel {
...@@ -1011,9 +1013,9 @@ static int decode_block(AVCodecContext *avctx, void *tdata, ...@@ -1011,9 +1013,9 @@ static int decode_block(AVCodecContext *avctx, void *tdata,
if (data_size <= 0 || data_size > buf_size) if (data_size <= 0 || data_size > buf_size)
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
if (tileLevelX || tileLevelY) { /* tile of low resolution (Mipmap, rimmap) */ if (tileLevelX || tileLevelY) { /* tile level, is not the full res level */
av_log(s->avctx, AV_LOG_ERROR, "Wrong Tile level %i / %i.\n", tileLevelX, tileLevelY); avpriv_report_missing_feature(s->avctx, "Subres tile before full res tile");
return AVERROR_INVALIDDATA; return AVERROR_PATCHWELCOME;
} }
line = s->tile_attr.ySize * tileY; line = s->tile_attr.ySize * tileY;
...@@ -1490,13 +1492,13 @@ static int decode_header(EXRContext *s) ...@@ -1490,13 +1492,13 @@ static int decode_header(EXRContext *s)
s->tile_attr.level_mode = tileLevel & 0x0f; s->tile_attr.level_mode = tileLevel & 0x0f;
s->tile_attr.level_round = (tileLevel >> 4) & 0x0f; s->tile_attr.level_round = (tileLevel >> 4) & 0x0f;
if (s->tile_attr.level_mode != EXR_TILE_LEVEL_ONE) { if (s->tile_attr.level_mode >= EXR_TILE_LEVEL_UNKNOWN){
avpriv_report_missing_feature(s->avctx, "Tile level mode %d", avpriv_report_missing_feature(s->avctx, "Tile level mode %d",
s->tile_attr.level_mode); s->tile_attr.level_mode);
return AVERROR_PATCHWELCOME; return AVERROR_PATCHWELCOME;
} }
if (s->tile_attr.level_round != EXR_TILE_ROUND_UP) { if (s->tile_attr.level_round >= EXR_TILE_ROUND_UNKNOWN) {
avpriv_report_missing_feature(s->avctx, "Tile level round %d", avpriv_report_missing_feature(s->avctx, "Tile level round %d",
s->tile_attr.level_round); s->tile_attr.level_round);
return AVERROR_PATCHWELCOME; return AVERROR_PATCHWELCOME;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment