IoSeq *IoAVCode_frameSeqForAVFrame_(IoAVCodec *self, AVFrame *avframe, int srcPixelFormat, int width, int height) { AVPicture *rgbPicture = IoAVCode_allocDstPictureIfNeeded(self, PIX_FMT_RGB24, width, height); int result; struct SwsContext *img_convert_ctx; img_convert_ctx = sws_getContext(width, height, srcPixelFormat, width, height, PIX_FMT_RGB24, SWS_BICUBIC, NULL, NULL, NULL); result = sws_scale(img_convert_ctx, avframe->data, avframe->linesize, 0, height, rgbPicture->data, rgbPicture->linesize); sws_freeContext(img_convert_ctx); if (result) { printf("AVCodec: sws_scale error?\n"); } UArray *data = UArray_newWithData_type_encoding_size_copy_(rgbPicture->data[0], CTYPE_uint8_t, CENCODING_NUMBER, width * height * 3, 1); return IoSeq_newWithUArray_copy_(IOSTATE, data, 0); }
IoSeq *IoAVCode_frameSeqForAVFrame_(IoAVCodec *self, AVFrame *avframe, int srcPixelFormat, int width, int height) { AVPicture *rgbPicture = IoAVCode_allocDstPictureIfNeeded(self, srcPixelFormat, width, height); AVPicture srcPicture; int result; memcpy(srcPicture.data, avframe->data, sizeof(uint8_t *) * 4); memcpy(srcPicture.linesize, avframe->linesize, sizeof(int) * 4); result = img_convert(rgbPicture, PIX_FMT_RGB24, &srcPicture, srcPixelFormat, width, height); if (result) { printf("AVCodec: img_convert error?\n"); } UArray *data = UArray_newWithData_type_encoding_size_copy_(rgbPicture->data[0], CTYPE_uint8_t, CENCODING_NUMBER, width * height * 3, 1); return IoSeq_newWithUArray_copy_(IOSTATE, data, 0); }