Error using iSight with iChat
more from apple
Jul 9, 05

For several months, I have been unable to use my iSight with iChat, as all chats resulted in the error "Can't get video from the camera". I finally decided to get to the bottom of this, and a little bit of research revealed a conflict between iChat/iSight and Postgres. The problem is that one cannot run while the other is also running. As a test, I left Postgres running and verified that I could not initiate video chats with iChat. After bringing the db server down, iChat was able to initiate video chats using my iSight.

I found several things discussing issues of limited shared memory between iChat and postgres, but none of the suggestions helped me (the first thing I found, which points to a postgres doc about shared memory). Initially, the only solution I found was to shutdown postgres before using iChat with iSight.

I did eventually find a way to get my iSight working again with iChat while leaving postgres running, and here's what I did.

Looking in postgresql.conf shows these default values for max_connections and shared_buffers:

max_connections = 40
shared_buffers = 200 # min 16, at least max_connections*2, 8KB each

I tried descreasing shared_buffers to 80 (the smallest value allowed following the math rule of max_connections*2) and leaving max_connections at its default value, but iChat still failed on video chats. This was logged to console output:

2005-07-17 06:37:13.894 iChat[8259] WARNING: Freeze-frame failed: couldn't get local buffer for layer Local!

When I decreased both max_connections and shared_buffers, as below, I found that I could leave postgres running and use iChat with iSight for video chats:

max_connections = 20
shared_buffers = 40 # min 16, at least max_connections*2, 8KB each

I suspect that the numbers could be bumped up a little higher than 20 and 40, but I am perfectly content to leave "good enough" alone.