On Mon, Mar 30, 2020 at 6:31 AM Michael Niedermayer <mich...@niedermayer.cc> wrote: > > On Sat, Mar 28, 2020 at 09:16:40PM +0530, gautamr...@gmail.com wrote: > > From: Gautam Ramakrishnan <gautamr...@gmail.com> > > > > This patch adds support for the PPT marker. It breaks down the > > jpeg2000_decode_packet() function to decode headers and data > > separately. > > --- > > libavcodec/jpeg2000dec.c | 202 +++++++++++++++++++++++++++++++++------ > > 1 file changed, 172 insertions(+), 30 deletions(-) > > > > [...] > > > @@ -927,30 +965,38 @@ static int getlblockinc(Jpeg2000DecoderContext *s) > > return res; > > } > > > > -static int jpeg2000_decode_packet(Jpeg2000DecoderContext *s, Jpeg2000Tile > > *tile, int *tp_index, > > - Jpeg2000CodingStyle *codsty, > > - Jpeg2000ResLevel *rlevel, int precno, > > - int layno, uint8_t *expn, int numgbits) > > +static int jpeg2000_decode_packet_header(Jpeg2000DecoderContext *s, > > Jpeg2000Tile *tile, > > + int *tp_index, > > + Jpeg2000CodingStyle *codsty, > > + Jpeg2000ResLevel *rlevel, int > > precno, > > + int layno, uint8_t *expn, int > > numgbits, > > + int *process_data) > > { > > int bandno, cblkno, ret, nb_code_blocks; > > - int cwsno; > > > > - if (layno < rlevel->band[0].prec[precno].decoded_layers) > > + if (layno < rlevel->band[0].prec[precno].decoded_layers) { > > + *process_data = 0; > > return 0; > > + } > > rlevel->band[0].prec[precno].decoded_layers = layno + 1; > > > > - if (bytestream2_get_bytes_left(&s->g) == 0 && s->bit_index == 8) { > > - if (*tp_index < FF_ARRAY_ELEMS(tile->tile_part) - 1) { > > - s->g = tile->tile_part[++(*tp_index)].tpg; > > + if (tile->has_ppt) { > > + s->g = tile->packed_headers_stream; > > + } else { > > + s->g = tile->tile_part[*tp_index].tpg; > > + if (bytestream2_get_bytes_left(&s->g) == 0 && s->bit_index == > > 8) { > > + if (*tp_index < FF_ARRAY_ELEMS(tile->tile_part) - 1) { > > + s->g = tile->tile_part[++(*tp_index)].tpg; > > + } > > } > > + if (bytestream2_peek_be32(&s->g) == JPEG2000_SOP_FIXED_BYTES) > > + bytestream2_skip(&s->g, JPEG2000_SOP_BYTE_LENGTH); > > } > > > > - if (bytestream2_peek_be32(&s->g) == JPEG2000_SOP_FIXED_BYTES) > > - bytestream2_skip(&s->g, JPEG2000_SOP_BYTE_LENGTH); > > - > > if (!(ret = get_bits(s, 1))) { > > jpeg2000_flush(s); > > - return 0; > > + *process_data = 0; > > + goto end; > > } else if (ret < 0) > > return ret; > > > > @@ -1055,6 +1101,34 @@ static int > > jpeg2000_decode_packet(Jpeg2000DecoderContext *s, Jpeg2000Tile *tile, > > else > > av_log(s->avctx, AV_LOG_ERROR, "EPH marker not found. instead > > %X\n", bytestream2_peek_be32(&s->g)); > > } > > +end: > > + if (tile->has_ppt) > > + tile->packed_headers_stream = s->g; > > + else > > + tile->tile_part[*tp_index].tpg = s->g; > > + return 0; > > +} > > + > > +static int jpeg2000_decode_packet_data(Jpeg2000DecoderContext *s, > > Jpeg2000Tile *tile, > > + int *tp_index, > > + Jpeg2000CodingStyle *codsty, > > + Jpeg2000ResLevel *rlevel, int > > precno, > > + int layno, uint8_t *expn, int > > numgbits) > > +{ > > + int bandno, cblkno, nb_code_blocks; > > + int cwsno; > > + > > + s->g = tile->tile_part[*tp_index].tpg; > > + if (tile->has_ppt) { > > + if (bytestream2_get_bytes_left(&s->g) == 0 && s->bit_index == 8) { > > + if (*tp_index < FF_ARRAY_ELEMS(tile->tile_part) - 1) { > > + s->g = tile->tile_part[++(*tp_index)].tpg; > > + } > > + } > > + if (bytestream2_peek_be32(&s->g) == JPEG2000_SOP_FIXED_BYTES) > > + bytestream2_skip(&s->g, JPEG2000_SOP_BYTE_LENGTH); > > + } > > + > > > > for (bandno = 0; bandno < rlevel->nbands; bandno++) { > > Jpeg2000Band *band = rlevel->band + bandno; > > @@ -1097,6 +1171,7 @@ static int > > jpeg2000_decode_packet(Jpeg2000DecoderContext *s, Jpeg2000Tile *tile, > > av_freep(&cblk->lengthinc); > > } > > } > > + tile->tile_part[*tp_index].tpg = s->g; > > return 0; > > } > > I think this function spliting should be in a seperate patch from adding > ppt support. > It would make the changes more readable in the git log > I have had lot of trouble understanding how to do this and took the easy route. I shall just split the function without creating the two new functions in one patch as mentioned by Carl. > thanks > > [...] > -- > Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB > > I have never wished to cater to the crowd; for what I know they do not > approve, and what they approve I do not know. -- Epicurus > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
-- ------------- Gautam | _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".