[FFmpeg-devel] GSoC project (JPEG 2000)
rukhsana afroz
rukhsana.afroz at gmail.com
Wed Apr 6 01:37:08 CEST 2011
On Tue, Apr 5, 2011 at 11:28 AM, Michael Niedermayer <michaelni at 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
============================
More information about the ffmpeg-devel
mailing list