2017-01-10 20:00 GMT+01:00 Carl Eugen Hoyos <ceffm...@gmail.com>: > 2017-01-10 19:45 GMT+01:00 Gonzalo Garramuño <ggarr...@gmail.com>: > > > > > > El 10/01/2017 a las 10:21, Carl Eugen Hoyos escribió: > >> > >> } > >> + } else if (avctx->pix_fmt == AV_PIX_FMT_MONOWHITE) { > >> + ptr = picture->data[0]; > >> + for (y = 0; y < s->height; y++) { > >> + memcpy(ptr, ptr_data, s->width + 7 >> 3); > >> + ptr_data += s->width + 7 >> 3; > >> + ptr += picture->linesize[0]; > >> + } > > > > Just a nitpick. I would put s->width + 7 >> 3 in a variable outside the > > loop and use it in memcpy and in the ptr_data. > > Fixed locally. > > Tested on some sample, seems to work.
But maybe you can put the Store data code inside the planar part (it's very similar) Something like that ------------------- s->uncompressed_size = s->line_size * s->height * s->channel_count; switch (s->color_mode) { + case PSD_BITMAP: Overwrite here the linesize : s->line_size = s->width + 7 >> 3; + avctx->pix_fmt = AV_PIX_FMT_MONOWHITE; + break; case PSD_INDEXED: if (s->channel_depth != 8 || s->channel_count != 1) { av_log(s->avctx, AV_LOG_ERROR, @@ -420,6 +423,13 @@ static int decode_frame(AVCodecContext *avctx, void *data, } } } This special case can be delete : + } else if (avctx->pix_fmt == AV_PIX_FMT_MONOWHITE) { + ptr = picture->data[0]; + for (y = 0; y < s->height; y++) { + memcpy(ptr, ptr_data, s->width + 7 >> 3); + ptr_data += s->width + 7 >> 3; + ptr += picture->linesize[0]; + } and the planar part, can use s->line_size instead of s->width * s->pixel_size; so will work for both i think Martin _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel