On Wed, Jan 28, 2015 at 04:41:25PM +0100, Jean First wrote: > syntax is: 20,10,2 > this adds 3 layers, the first with a 20x, the second with 10x and > a third with 2x compression. > > Layers define the progression by image quality within the code stream and, > although not defined by the JPEG 2000 standard, in general codecs try to > build layers in such a way that the image quality will increase monotonically > with each layer. > > Signed-off-by: Jean First <jeanfi...@gmail.com> > --- > > it remove the numlayers parameter, but i'm not sure it ever worked. > Unfortunately > the j2k_dump provided by openjpeg won't show the individual rates per layer > - I > also tried the files provided in > http://samples.ffmpeg.org/jpeg2000/fdis_j2kp4files.zip > and the rates shown are always 0.0 > > TODO: Write the libopenjpegenc documentation > > libavcodec/libopenjpegenc.c | 21 ++++++++++++++++++--- > 1 file changed, 18 insertions(+), 3 deletions(-) > > diff --git a/libavcodec/libopenjpegenc.c b/libavcodec/libopenjpegenc.c > index bbf6190..b9a8bac 100644 > --- a/libavcodec/libopenjpegenc.c > +++ b/libavcodec/libopenjpegenc.c > @@ -56,6 +56,8 @@ typedef struct { > int disto_alloc; > int fixed_alloc; > int fixed_quality; > + char *layerrates;
> + float tcp_rates[100]; /** User specified rate stored in case of cinema > option */ /**< ... > } LibOpenJPEGContext; > > static void error_callback(const char *msg, void *data) > @@ -224,8 +226,21 @@ static av_cold int > libopenjpeg_encode_init(AVCodecContext *avctx) > ctx->enc_params.cp_disto_alloc = ctx->disto_alloc; > ctx->enc_params.cp_fixed_alloc = ctx->fixed_alloc; > ctx->enc_params.cp_fixed_quality = ctx->fixed_quality; > - ctx->enc_params.tcp_numlayers = ctx->numlayers; > - ctx->enc_params.tcp_rates[0] = FFMAX(avctx->compression_level, 0) * 2; > + ctx->enc_params.tcp_numlayers = 0; > + > + char *s = ctx->layerrates; mixing delaration and statement > + while (sscanf(s, "%f", &ctx->tcp_rates[ctx->enc_params.tcp_numlayers]) > == 1) { > + ctx->enc_params.tcp_numlayers++; > + while (*s && *s != ',') > + s++; > + if (!*s) > + break; > + s++; > + } missing tcp_rates[] size check also "auto" also this crashes: ./ffmpeg -i tests/vsynth1/01.pgm -vcodec libopenjpeg file.j2k ==11538== Invalid free() / delete / delete[] / realloc() ==11538== at 0x4C2B5D9: free (vg_replace_malloc.c:446) ==11538== by 0xE09663: av_free (mem.c:232) ==11538== by 0xE09688: av_freep (mem.c:239) ==11538== by 0xE0F5C8: av_opt_free (opt.c:1441) ==11538== by 0xA8CCA6: avcodec_close (utils.c:2858) ==11538== by 0xC976E0: worker (frame_thread_encoder.c:113) ==11538== by 0xD1BFE99: start_thread (pthread_create.c:308) ==11538== by 0xD4C92EC: clone (clone.S:112) ==11538== Address 0x10ee24f0 is 0 bytes inside a block of size 5 free'd ==11538== at 0x4C2B5D9: free (vg_replace_malloc.c:446) ==11538== by 0xE09663: av_free (mem.c:232) ==11538== by 0xE09688: av_freep (mem.c:239) ==11538== by 0xE0F5C8: av_opt_free (opt.c:1441) ==11538== by 0xA8CCA6: avcodec_close (utils.c:2858) ==11538== by 0xC976E0: worker (frame_thread_encoder.c:113) ==11538== by 0xD1BFE99: start_thread (pthread_create.c:308) ==11538== by 0xD4C92EC: clone (clone.S:112) [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB I am the wisest man alive, for I know one thing, and that is that I know nothing. -- Socrates
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel