On Tue, Apr 5, 2011 at 11:28 AM, Michael Niedermayer <michae...@gmx.at>wrote:
> > This results in > J2K_SIZ = 0xff51 > J2K_COD = 0xff52 > J2K_COC = 0xff53 > Thanks Michael, I understood that, it was my mistake. While processing 0xff52 (J2K_SOD) marker, the current decoder fails in the following code segment. /** get common part for COD and COC segments */ static int get_cox(J2kDecoderContext *s, J2kCodingStyle *c) { if (s->buf_end - s->buf < 5) return AVERROR(EINVAL); c->nreslevels = bytestream_get_byte(&s->buf) + 1; // num of resolution levels - 1 c->log2_cblk_width = bytestream_get_byte(&s->buf) + 2; // cblk width c->log2_cblk_height = bytestream_get_byte(&s->buf) + 2; // cblk height c->cblk_style = bytestream_get_byte(&s->buf); if (c->cblk_style != 0){ // cblk style av_log(s->avctx, AV_LOG_ERROR, "no extra cblk styles supported\n"); return -1; } c->transform = bytestream_get_byte(&s->buf); // transformation if (c->csty & J2K_CSTY_PREC) { int i; for (i = 0; i < c->nreslevels; i++) bytestream_get_byte(&s->buf); } return 0; } /** get coding parameters for a particular tile or whole image*/ static int get_cod(J2kDecoderContext *s, J2kCodingStyle *c, uint8_t *properties) { J2kCodingStyle tmp; int compno; av_log(s->avctx, AV_LOG_ERROR, "Inside get_cod\n"); if (s->buf_end - s->buf < 5) return AVERROR(EINVAL); tmp.log2_prec_width = tmp.log2_prec_height = 15; tmp.csty = bytestream_get_byte(&s->buf); if (bytestream_get_byte(&s->buf)){ // progression level av_log(s->avctx, AV_LOG_ERROR, "only LRCP progression supported\n"); return -1; } tmp.nlayers = bytestream_get_be16(&s->buf); tmp.mct = bytestream_get_byte(&s->buf); // multiple component transformation get_cox(s, &tmp); for (compno = 0; compno < s->ncomponents; compno++){ if (!(properties[compno] & HAD_COC)) memcpy(c + compno, &tmp, sizeof(J2kCodingStyle)); } return 0; } In the get_cox function, the decoder shows the error "no extra cblk style supported". But, I am wondering, why this IF statement. The specification (page-45) says, there could be one byte in this position Code-block style 8 Table A-17 Style of the code-block coding passes (8 means size of this field in bits, Table A-17 is for the meaning of this parameter) I cannot print the entire table here. /* if (c->cblk_style != 0){ // cblk style av_log(s->avctx, AV_LOG_ERROR, "no extra cblk styles supported\n"); return -1; }*/ However, if I comment this IF block, I can get rid of this problem. However, I get errors while processing other subsequent markers [j2k @ 0xab98210] unsupported marker 0xA17D at pos 0x145 [j2k @ 0xab98210] unsupported marker 0xEFC8 at pos 0xbfa [j2k @ 0xab98210] Missing EOC [j2k @ 0xab98210] Segmentation symbol value incorrect These errors only occur while decoding the files in codestrem_profile0 folder, not other files in testfiles_jp2folder. I am also looking how these markers have been processed. Thanks -- Rukhsana Ruby Phd Student Department of Electrical & Computer Engineering The University of British Columbia ============================
_______________________________________________ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel