我试图使用ffmpeg将RGB帧(ppm格式)转换为YUV420P格式。为了确保我的代码C是好的,我将输出与这个命令(同一个文件器BILINEAR)创建的输出进行了比较: ffmpeg-start_number1-i data/test512x512%d.ppm-sws_flags'bilinear'-pix_fmtyuv420p data/test-yuv420p.yuv
我的代码:
static unsigned char *readPPM(int i)
{
FILE *pF;
unsigned char *imgRGB;
unsigned char *imgBGR;
int w,h;
int c;
int bit;
char buff[16];
char *filename;
asprintf(&filename,"test512x512%d.ppm",i);
pF = fopen(filename,"rb");
free(filename);
if (pF) {
if (!fgets(buff, sizeof(buff), pF)) {
return nullptr;
}
if (buff[0] != 'P' || buff[1] != '6') {
fprintf(stderr, "Invalid image format (must be 'P6')\n");
return nullptr;
}
c = getc(pF);
while (c == '#') {
while (getc(pF) != '\n') ;
c = getc(pF);
}
ungetc(c, pF);
// read size
if (fscanf(pF, "%d %d", &w, &h) != 2) {
fprintf(stderr, "Invalid image size (error loading '%s')\n", filename);
return nullptr;
}
//read bit
if (fscanf(pF, "%d", &bit) != 1) {
fprintf(stderr, "Invalid rgb component (error loading '%s')\n", filename);
exit(1);
}
imgRGB =(unsigned char*) malloc(3*h*w);
imgBGR =(unsigned char*) malloc(3*h*w);
//read pixel data from file
int length = fread(imgBGR, sizeof(unsigned char)*3, w*h, pF) ;
if (length != w*h) {
fprintf(stderr, "Error loading image '%s'\n", filename);
return nullptr;
}
int start=0;
for (i=0; i < HEIGHT*WIDTH;i++) {
imgRGB[start] = imgBGR[start];
imgRGB[start+2]= imgBGR[start+2];
imgRGB[start+1]= imgBGR[start+1];
start+=3;
}
fclose(pF);
free(imgBGR);
return imgRGB;
}
else {
return nullptr;
}
}
void Test_FFMPEG::FillFrame (uint8_t* pic, int index)
{
avpicture_fill((AVPicture*)RGBFrame, pic, AV_PIX_FMT_RGB24, encodeContext->width, encodeContext->height);
struct SwsContext* fooContext = sws_getContext(encodeContext->width, encodeContext->height,
PIX_FMT_RGB24,
encodeContext->width, encodeContext->height,
PIX_FMT_YUV420P,
SWS_BILINEAR , nullptr, nullptr, nullptr);
sws_scale(fooContext, RGBFrame->data, RGBFrame->linesize, 0, encodeContext->height, OrgFrame->data, OrgFrame->linesize);
OrgFrame->pts = index;
}
比较结果不好。在Y和V上有细微的差别,但在U上有很多差别。我不能发布我的图片,但Y的一部分在U图片中。它会使颜色有一点变化。
你能告诉我我的错误在哪里吗?谢谢
我不肯定ffmpeg的默认值,但是使用SWS_BILINEAR|SWS_ACCURATE_RND
应该会产生更好的结果。
我可以运行这个程序,但由于某些原因,它会显示/放置随机字符,而不是二进制的初始值,而且我似乎无法将程序从十进制运行回二进制。我该如何改进这些代码。要明确说明它不会将二进制转换为十进制,我将如何将其转换回十进制转换为二进制,如果有一些代码可以帮助我,将不胜感激。
本文向大家介绍十进制到二进制转换,包括了十进制到二进制转换的使用技巧和注意事项,需要的朋友参考一下 十进制数字也可以转换为二进制格式。要将十进制数转换为二进制数,我们需要将数字除以2,直到达到0或1。然后,在每一步骤中,其余部分将分开存储以形成相反的二进制等效数。 在此算法中,我们将遵循递归方法。这将帮助我们在不使用堆栈数据结构的情况下解决问题。在实现中,我们知道函数的递归将遵循内部堆栈。我们将使
问题内容: 如何将文件转换为二进制文件?我的项目只需要它。我需要通过二进制文件加密文件。 问题答案: 如果您要访问ACTUAL BINARY形式,则读入文件并将每个字节转换为二进制表示形式… 编辑: 以下是一些代码,可将字节转换为带有位的字符串: 如果要访问文件中的字节,则只需使用以下代码(在第一种情况下也可以使用此代码): 要使用这两段代码,您现在可以遍历每个字节并使用以下位创建一个String
我正在将整数值转换为三元数(即字符串)。我怀疑应该有一种更好的方法来实现这一点,只需较少的计算工作量。 我的算法直接实现了长除法,可以在十进制和任意基数之间转换数字。 即使在这个例子中,三元数是3位长,我的目标是使它成为n位长。也欢迎就如何对n位三元数执行此操作提出建议。
本文向大家介绍通过代码实现如下转换(进制之间转换)相关面试题,主要包含被问及通过代码实现如下转换(进制之间转换)时的应答技巧和注意事项,需要的朋友参考一下
本文向大家介绍Python中的十进制到二进制列表转换,包括了Python中的十进制到二进制列表转换的使用技巧和注意事项,需要的朋友参考一下 Python是一种通用语言,可以处理数据处理过程中提出的许多要求。当我们需要将十进制数转换为二进制数时,可以使用以下python程序。 使用格式 我们可以使用格式化程序中的字母来表示哪个数字基:十进制,十六进制,八进制或二进制,我们希望对数字进行格式化。在下面