Пример #1
0
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);
}
Пример #2
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);
}