作者ryanliang (暑假闲闲的大学生~~)
看板MacDev
标题Re: [问题] 有关ObjC呼叫其他Class的Method及呼叫C …
时间Mon Nov 15 19:35:12 2010
我自问自答一下,因为犯了一个很蠢的错误XD
首先,method call不到的问题,是因为我原本在大小判断的地方,我是用
640*480去判断。原因是我之前用的MacBook内建iSight解析度是640*480
所以我这样设定。
然而,我上礼拜换了一台别人归还的MacBook Pro,而MacBook Pro的iSight
解析度是1280*1024,有130画素的品质,所以因为我的一时不察,没有去
看解析度是多少,所以闹成今天的笑话,希望大家下次记得检查相容性XD
现在,我已经顺利call到另一个method,就解决了第一个问题。但是第二个
问题依然还悬在那里,希望板上先进可以帮帮我。
我在简单叙述一下我的问题好了。
我有一个格式转换的程式码(Pure C),里面有一个function如下:
int image_input(uint8_t * dst_y,
uint8_t * dst_u,
uint8_t * dst_v,
uint32_t width,
int height,
uint32_t edged_width,
uint8_t * src,
int src_stride,
int csp,
int interlaced);
带有八个参数。
而我在ObjC的Class里是这样呼叫的:
我先在主程式里面写这样
NSData *i420Data = [[NSData alloc] initWithData:
[mVideoGrabber RGB32toI420:buffer
length:(mLength - 54)
width:1280
height:1024]];
之後就会跳入class里面的下面这个method:
- (NSData *)RGB32toI420:(uint8_t *)data length:(NSUInteger)length
width:(uint32_t)width_
height:(int)height_
{
NSLog(@"%i",length);
if (length != (width_ * height_ * 4))
{
NSAssert(noErr == (length == (width_ * height_ * 4)),
@"Size Error !");
return nil;
}
else
{
NSLog(@"%i",sizeof(&data));
NSLog(@"I'm in !");
uint8_t *dataBlock = malloc((width_ * height_ * 4 / 2));
NSLog(@"%p",dataBlock);
uint8_t *yPtr = dataBlock ;
NSLog(@"%p",yPtr);
uint8_t *uPtr = yPtr + width_ * height_;
NSLog(@"%p",uPtr);
uint8_t *vPtr = uPtr + (width_ / 2) * (height_ / 2);
NSLog(@"%p",vPtr);
/*就是这个function出问题,执行时不会过
我也都有检查过他们传进来,准备传出去的资料形态
错误码是"EXC_BED_ACCESS",经过zonble大的提醒
我才去检查参数的形态正不正确,不过现在看似是一致的*/
image_input(yPtr,
uPtr,
vPtr,
width_,
height_,
width_,
data,
width_ * 4,
XVID_CSP_ABGR | XVID_CSP_VFLIP,
0);
/*回传一个NSData,里面是转换完的资料*/
return [NSData dataWithBytes:dataBlock
length:(width_ * height_ * 4 /2)];
}
}
大致就是这样,不过现在就是卡在那里,不知道是不是我的function呼叫
有问题,还是其他我不知道的地方,希望板上的先进能给我一点意见。
感谢!!
补充一下,我在Run的时候,一开始console都会跑出一堆(至少2.3十个)警
告,而且都是一样的警告:
warning: Bad symbol - type is N_SECT but section is 0
不晓得跟上面的Error有没有关系?或说有人跟我一样遇到这种警告的吗?
再次感谢!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.219.177.46
※ 编辑: ryanliang 来自: 61.219.177.46 (11/15 19:42)
1F:→ ryanliang:昨晚Debug的结果 感觉是没有呼叫到那个C function 不知 11/16 09:25
2F:→ ryanliang:到是不是那个C的Library没有建好 所以它叫不到那个函式 11/16 09:27
3F:→ ryanliang:我是用makefile的方式把我原先的C file make成.a的lib档 11/16 09:29
4F:→ ryanliang:不知道有没有大大有过类似的经验 能给我一些指点 谢谢~ 11/16 09:29