I just tested a bit more and it seems the performance problem is already in origin/masterHEAD~2 (http://repo.or.cz/w/microdia.git? a=commitdiff;h=9c5f82199c365e847906919af0f3b985fbc1696a). Although there was no lockup there was one very interesting thing: Framerate drops visibly when the camera input gets brighter. When the sensor adapts (via AEC or AGC) the framarate stabilizes. If that doesn't work the framerate stays low and mplayer gets upset. The only few reasons for a lockup under these circumstances are: The USB-subsystem deosn't like empty isochronous pipes. Or soft-AE has some side effect when it gets a very bright frame (BTW I don't use it - this is just the avgy calculation). OR fglrx is crappy (whoo - we didn't know that!).
Anyway I propose the following: We investigate this issue further but in the meantime the saturation patch goes into the repo. It maybe put the cream on top of some performance problem but the real cause is most likely somewhere else. The question is: To be or not to submit for 2.6.30 now? Maybe staging? GWater On 28 Mrz., 11:14, GWater <[email protected]> wrote: > I tested and I finally got something to show you: > > $ dmesg > sn9c20x: SN9C20X USB 2.0 Webcam - 0C45:624E plugged- > in. > sn9c20x: Detected SOI968 > Sensor. > sn9c20x: Webcam device 0C45:624E is now controlling video device /dev/ > video0 > input: SN9C20X Webcam as /devices/pci0000:00/0000:00:02.1/usb1/1-4/ > input/ > input6 > sn9c20x: Hue Value: > 180 > sn9c20x: Hue vsettings.hue: > 0 > sn9c20x: Hue Value: > 180 > sn9c20x: Hue vsettings.hue: > 0 > sn9c20x: Using yuv420 output > format > usbcore: registered new interface driver > sn9c20x > sn9c20x: SN9C20x USB 2.0 Webcam Driver v2009.01 > loaded > sn9c20x: Hue Value: > 180 > sn9c20x: Hue vsettings.hue: > 0 > sn9c20x: Hue Value: > 180 > sn9c20x: Hue vsettings.hue: > 0 > BUG: soft lockup - CPU#0 stuck for 62s! [kondemand/ > 0:1568] > Modules linked in: sn9c20x fuse it87 hwmon_vid ipv6 > nf_conntrack_netbios_ns cpufreq_ondemand powernow_k8 freq_table > dm_multipath uinput ppdev radio_gemtek_pci snd_seq_dummy snd_hda_intel > snd_seq_oss snd_seq_midi_event snd_seq snd_seq_device snd_pcm_oss > snd_mixer_oss snd_pcm snd_timer snd_page_alloc snd_hwdep k8temp > radio_maxiradio snd hwmon firewire_ohci compat_ioctl32 firewire_core > videodev fglrx(P) pcspkr crc_itu_t pata_amd forcedeth v4l1_compat > soundcore parport_pc parport i2c_nforce2 i2c_core ata_generic > pata_acpi sata_nv [last unloaded: > scsi_wait_scan] > CPU > 0: > Modules linked in: sn9c20x fuse it87 hwmon_vid ipv6 > nf_conntrack_netbios_ns cpufreq_ondemand powernow_k8 freq_table > dm_multipath uinput ppdev radio_gemtek_pci snd_seq_dummy snd_hda_intel > snd_seq_oss snd_seq_midi_event snd_seq snd_seq_device snd_pcm_oss > snd_mixer_oss snd_pcm snd_timer snd_page_alloc snd_hwdep k8temp > radio_maxiradio snd hwmon firewire_ohci compat_ioctl32 firewire_core > videodev fglrx(P) pcspkr crc_itu_t pata_amd forcedeth v4l1_compat > soundcore parport_pc parport i2c_nforce2 i2c_core ata_generic > pata_acpi sata_nv [last unloaded: > scsi_wait_scan] > Pid: 1568, comm: kondemand/0 Tainted: P > 2.6.27.19-170.2.35.fc10.x86_64 > #1 > RIP: 0010:[<ffffffff8123c5d7>] [<ffffffff8123c5d7>] usb_hcd_irq > +0xa1/0xb3 > RSP: 0018:ffffffff8170ec98 EFLAGS: > 00000292 > RAX: ffff88003d13b920 RBX: ffffffff8170ecb8 RCX: > 00000000000006d0 > RDX: 00000000ffffffff RSI: 0000000000000000 RDI: > 0000000000000292 > RBP: ffffffff8170ec10 R08: ffff88001a9f2800 R09: > ffff8800178666a0 > R10: 0000000014c88000 R11: ffff880017867000 R12: > ffffffff81011408 > R13: ffffffff8170ec10 R14: 0000000000000001 R15: > ffff88003d13b800 > FS: 00007f062e769950(0000) GS:ffffffff81717000(0000) knlGS: > 00000000f7f2b710 > CS: 0010 DS: 0018 ES: 0018 CR0: > 000000008005003b > CR2: 00007f6a96197000 CR3: 000000001b8cc000 CR4: > 00000000000006e0 > DR0: 0000000000000000 DR1: 0000000000000000 DR2: > 0000000000000000 > DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: > 0000000000000400 > > Call Trace: > <IRQ> [<ffffffff81082b1f>] ? handle_IRQ_event+0x33/0x6f > [<ffffffff81083f12>] ? handle_fasteoi_irq+0xa5/0xeb > [<ffffffff810130ce>] ? do_IRQ+0xf7/0x169 > [<ffffffff81010963>] ? ret_from_intr+0x0/0x2e > [<ffffffff81333b70>] ? _spin_unlock_irqrestore+0x33/0x3e > [<ffffffff8103a6bf>] ? try_to_wake_up+0x271/0x283 > [<ffffffff81010a37>] ? restore_args+0x0/0x30 > [<ffffffff8104b388>] ? process_timeout+0x0/0xb > [<ffffffff8103a6fd>] ? wake_up_process+0x10/0x12 > [<ffffffff8104b391>] ? process_timeout+0x9/0xb > [<ffffffff8104b0c6>] ? run_timer_softirq+0x19c/0x222 > [<ffffffffa004830f>] ? nv_nic_irq_optimized+0xbd/0x277 [forcedeth] > [<ffffffff81046c82>] ? __do_softirq+0x7e/0x10c > [<ffffffff81011bfc>] ? call_softirq+0x1c/0x28 > [<ffffffff81012e02>] ? do_softirq+0x4d/0xb0 > [<ffffffff81046857>] ? irq_exit+0x4e/0x9d > [<ffffffff8101311e>] ? do_IRQ+0x147/0x169 > [<ffffffff81010963>] ? ret_from_intr+0x0/0x2e > <EOI> [<ffffffff81016fc3>] ? native_read_tsc+0xc/0x22 > [<ffffffff8116df60>] ? delay_tsc+0x26/0x58 > [<ffffffff8116dff6>] ? __const_udelay+0x47/0x49 > [<ffffffff8116e008>] ? __udelay+0x10/0x12 > [<ffffffffa03f65df>] ? decrease_vid_code_by_step+0x33/0x3b > [powernow_k8] > [<ffffffffa03f6b61>] ? powernowk8_target+0x47d/0x8b5 [powernow_k8] > [<ffffffff812857c3>] ? __cpufreq_driver_target+0x64/0x74 > [<ffffffffa03fe751>] ? do_dbs_timer+0x1cb/0x235 [cpufreq_ondemand] > [<ffffffffa03fe586>] ? do_dbs_timer+0x0/0x235 [cpufreq_ondemand] > [<ffffffff81051c85>] ? run_workqueue+0xa3/0x146 > [<ffffffff81051e1d>] ? worker_thread+0xf5/0x109 > [<ffffffff8105553d>] ? autoremove_wake_function+0x0/0x38 > [<ffffffff81051d28>] ? worker_thread+0x0/0x109 > [<ffffffff810551f7>] ? kthread+0x49/0x76 > [<ffffffff81011719>] ? child_rip+0xa/0x11 > [<ffffffff81010a37>] ? restore_args+0x0/0x30 > [<ffffffff810551ae>] ? kthread+0x0/0x76 > [<ffffffff8101170f>] ? child_rip+0x0/0x11 > > hda-intel: IRQ timing workaround is activated for card #0. Suggest a > bigger bdl_pos_adj. > sn9c20x: [E] Empty buffer queue. > sn9c20x: Hue Value: 180 > sn9c20x: Hue vsettings.hue: 0 > sn9c20x: Hue Value: 180 > sn9c20x: Hue vsettings.hue: 0 > > (So, yes the system still locks up. This time I didn't even attempt to > set saturation. I suspect mplayer is sending ioctl by itself.) > > GWater > > On 28 Mrz., 07:16, Boris Borisov <[email protected]> wrote: > > > 3 times OK from me > > > Brian Johnson wrote: > > > ah was not aware that some chips didn't like setting spme of the color > > > matrix independently. > > > > Updated version that adds the 21byte array into the sn9c20x_video > > > struct so we can still sett the whole thing at once. > > > > 2009/3/27 Boris Borisov <[email protected]>: > > > >> Freezing on my camera the version of my bridge maybe is lowest. No way > > >> for > > >> detection of version of bridge. All parameters (21 parameters from > > >> 10e1)must > > >> be set at once for prevent of similar problem during iso transfer (I > > >> don't > > >> know why perhaps some engine bug). That is the main problem. > > >> On other one more new camera (same model 6270) is working. > > >> I check with 3 different (as producer but same as model) cameras 2 is OK > > >> 1 > > >> is NOK camera engine is freezing. > > > >> Brian Johnson wrote: > > > >> Here is a somewhat updated version of this patch that does > > >> successfully break hue/sat, contrast and brightness up into separate > > >> functions and seems to work fine. Don't know if it will actually help > > >> with the freezing when settings lower satuation that Joshua was > > >> experiencing. It also fixes a few other minor issues like accidentally > > >> undoing a few previous commits, making RX, RY, etc static, and adding > > >> hue as a module param. > > > >> On Fri, Mar 27, 2009 at 1:50 PM, Brian Johnson <[email protected]> wrote: > > > >> I didn't look too much at why the global static array is not working, > > >> however you really do not want to use one here because it will cause > > >> problems the first time you try to have the driver handle two > > >> different sn9c20x webcams. It would probably be better to add it to > > >> maybe to the sn9c20x_video struct. Also not sure the array has to be > > >> pre initialized either since given the first time you set > > >> brightness,contrast,etc it will be filled out properly and we will do > > >> this when the camera is initialized. > > > >> 2009/3/27 Boris Borisov <[email protected]>: > > > >> I do some investigation of function set_optical_parameters as I transfer > > >> execution of instruction into user space and disassemble the program. > > >> For reference I use cycle execution of i486 worst case (is possible for > > >> some instruction to not get the correct cycles but as estimation is good > > >> start). > > >> Possible optimization: > > >> 1. Define __u8 optical_parameters[21] as global static - I try but > > >> always the values is not save on this global static array - What I do > > >> wrong ??? Pleas for some idea about __u8 optical_parameters[21] (see in > > >> patch what i want to do with this array ) ??? For first time global > > >> initialization of array is not work for me ??? > > >> If this array going into global space as static the functions can split > > >> into small parts for Brightness, Contrast, HUE-Saturation > > > >> 2. Possible optimization of calculation multiplying and dividing I can > > >> replace with logic operation and reanalyze execution time. > > > >> 3. As total execution calculation of RGB matrix parameters is not get > > >> too much microprocessor time (near to sn9c20x_set_gamma - too many > > >> multiplication and dividing ). Maybe other often call code get this time. > > > >> diff --git a/sn9c20x-bridge.c b/sn9c20x-bridge.c > > >> index f5d77b8..b4c3212 100644 > > >> --- a/sn9c20x-bridge.c > > >> +++ b/sn9c20x-bridge.c > > >> @@ -30,8 +30,312 @@ > > >> #include "sn9c20x.h" > > >> #include "sn9c20x-bridge.h" > > > >> + > > >> + > > >> +/** > > >> + * @var RX > > >> + * Coordinate X aray for eliptic HSV corrections, conditionaly Red > > >> pixel > > >> + */ > > >> +const int RX[] = {41, 44, 46, 48, 50, 52, 54, 56, > > >> + 58, 60, 62, 64, 66, 68, 70, 72, > > >> + 74, 76, 78, 80, 81, 83, 85, 87, > > >> + 88, 90, 92, 93, 95, 97, 98, 100, > > >> + 101, 102, 104, 105, 107, 108, 109, 110, > > >> + 112, 113, 114, 115, 116, 117, 118, 119, > > >> + 120, 121, 122, 123, 123, 124, 125, 125, > > >> + 126, 127, 127, 128, 128, 129, 129, 129, > > >> + 130, 130, 130, 130, 131, 131, 131, 131, > > >> + 131, 131, 131, 131, 130, 130, 130, 130, > > >> + 129, 129, 129, 128, 128, 127, 127, 126, > > >> + 125, 125, 124, 123, 122, 122, 121, 120, > > >> + 119, 118, 117, 116, 115, 114, 112, 111, > > >> + 110, 109, 107, 106, 105, 103, 102, 101, > > >> + 99, 98, 96, 94, 93, 91, 90, 88, > > >> + 86, 84, 83, 81, 79, 77, 75, 74, > > >> + 72, 70, 68, 66, 64, 62, 60, 58, > > ... > > Erfahren Sie mehr » --~--~---------~--~----~------------~-------~--~----~ Lets make microdia webcams plug'n play, (currently plug'n pray) To post to this group, send email to [email protected] Visit us online https://groups.google.com/group/microdia -~----------~----~----~----~------~----~------~--~---
