회원 및 비회원 모두 열람이 가능합니다. 최대 업로드 가능한 용량은 20MB 입니다.
아래와 같이 코덱 출력인 YUV420 값으로 아래의 소스를 사용해서 YUV 출력파일을 만들었는데요 ...
이 출력파일을 YUV Viewer 로 보면 위에 나타낸 출력화면과 같이 에러화면이 나타납니다 ...
뭐가 잘못되었는지 알려주시면 감사하겠읍니다 ...
// Y 값이 저장된 배열 : SAMPLELP01[320*240]
// Cb 값이 저장된 배열 : SAMPLELP01[160*120]
// Cr 값이 저장된 배열 : SAMPLELP02[160*120]
int YUV_write(void)
{
int count4, ee1, ee2, ee3, ee4; long CNT2, CNT3;
unsigned char YUV[320*240 + 4*160*120];
long cxx = 320*240 + 2*160*120;
FILE *out_file;
int i,j,width,height;
int pos0, pos1, pos2, pos3;
width = 320; height = 240;
out_file = fopen("test_264.yuv", "w");
if (out_file == NULL) {
fprintf(stderr,"Can not open output filen");
exit (8);
}
CNT2 = 0; CNT3 = 0;
for(i=0;i<height;i+=2)
for(j=0;j<width;j+=2)
{
pos0 = i*width + j;
pos1 = pos0 + 1;
pos2 = pos0 + width;
pos3 = pos2 + 1;
YUV[CNT2++] = SAMPLECP01[CNT3];
YUV[CNT2++] = SAMPLELP01[pos0];
YUV[CNT2++] = SAMPLECP02[CNT3];
YUV[CNT2++] = SAMPLELP01[pos1];
YUV[CNT2++] = SAMPLECP01[CNT3];
YUV[CNT2++] = SAMPLELP01[pos2];
YUV[CNT2++] = SAMPLECP02[CNT3++];
YUV[CNT2++] = SAMPLELP01[pos3];
}
for (count4 = 0; count4 < cxx; count4++) {
fputc(YUV[count4], out_file);
}
fclose(out_file);
return (0);
}
저도 잘은 모르지만 궁금해서 몇자 적어 봅니다.
yuv420 이라고 하셨는데요. yuv 420 -> yuv 422로 바꾸시는 건가요? 대충 소스를 보면 그런 듯 합니다만,
배열값의 이름 등이 오타가 있는 듯 해서 이해하기 힘들어서요.
일단 생각해 보면 이미 분리가 되어 있는 값이니 YUYV, ... 식으로 나열만 하면 될 것 같기는 한데요.
몇군데 오타가 있어보이는데 옮겨 적으시면서 실수 하신 것이라면 다행이지만 아니라면 그 때문에 위치가 잘못되어 문제가 생기는 것 같습니다. 화면도 그런 듯 하고요.
동영상쪽은 잘 몰라서 제가 틀렸을 수도 있습니다.