[Kdenlive-devel] Color correction tools: How and where to implement them?
jb
jb at kdenlive.org
Thu Jul 29 20:29:23 UTC 2010
On Thursday 22 July 2010 19:06:22 Dan Dennedy wrote:
>
> Yeah, this is bad. First of all, the mlt consumer-frame-show event
> supplies a frame reference, which gets lost in the Kdenlive
> rendererPosition signal that its frame-show event handler emits. It
> appears that kdenlive signal was intended purely for position-oriented
> thing like updating a timecode label, but now you could say it is
> being abused. Interestingly, when I trace your logic for updating the
> vectorscope, that frame position is not used. Instead it is a trigger
> to get the position of the mlt producer for the active monitor. Using
> the producer's position is the second bad thing. It is not the same
> position as that in the monitor (the mlt consumer). The producer may
> read ahead for some parallelism. While we currently keep this low for
> better latency handling, it is going to go up a little when additional
> parallelism is introduced. The third bad thing is that to get a frame
> object, it asks the producer to seek backwards when it may have
> already moved ahead! This might not be too bad right now due to some
> frame caching in MLT, but again, with increased parallelism coming, it
> may become worse. In summary, the scopes should be using the frame
> object from the mlt frame-show event and avoid jumping through so many
> hoops.
Hi all.
I had a look at this stuff and tried to use the frame object from the mlt-
frame-show event, using exactly the same code that is used to get a QImage
to display on the QGLWidget.
Added code in the consumer_frame_show event looks like this:
mlt_image_format format = mlt_image_rgb24a;
int width = 0;
int height = 0;
const uchar* image = frame.get_image(format, width, height);
QImage qimage(width, height, QImage::Format_ARGB32);
memcpy(qimage.bits(), image, width * height * 4);
self->gotFrame(qimage); // send the image for analysis
It works fine when seeking, but if I try to play the clip, it crashes with the
backtrace copied at the end of the mail.
So I am wondering if it is possible to use the frame from the consumer event
or if something in MLT's design makes it impossible...
Any hints welcome.
jb
backtrace:
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xabb86b70 (LWP 10659)]
__memcpy_ssse3 () at ../sysdeps/i386/i686/multiarch/memcpy-ssse3.S:1248
1248 ../sysdeps/i386/i686/multiarch/memcpy-ssse3.S: No such file or
directory.
in ../sysdeps/i386/i686/multiarch/memcpy-ssse3.S
(gdb) thread apply all bt
Thread 19 (Thread 0xabb86b70 (LWP 10659)):
#0 __memcpy_ssse3 () at ../sysdeps/i386/i686/multiarch/memcpy-ssse3.S:1248
#1 0xabb85ea8 in ?? ()
#2 0x00143f56 in mlt_consumer_frame_show (listener=0xacf8afc8,
owner=0x88c7fe0, this=0x88c8560,
args=0xabb85ff4) at mlt_consumer.c:276
#3 0x0013ce2c in mlt_events_fire (this=0x88c8d78, id=0x609c084 "consumer-
frame-show") at mlt_events.c:215
#4 0x06098dfd in consumer_frame_show_cb (sdl=0x88d5258, parent=0x88c8d78,
frame=0x8babb68)
at consumer_sdl_preview.c:118
#5 0x00143f56 in mlt_consumer_frame_show (listener=0xacf8afc8,
owner=0x88d5258, this=0x88c8d78,
args=0xabb86144) at mlt_consumer.c:276
#6 0x0013ce2c in mlt_events_fire (this=0x88cace8, id=0x609c084 "consumer-
frame-show") at mlt_events.c:215
#7 0x06096715 in consumer_play_video (arg=0x88cace8) at consumer_sdl.c:465
#8 video_thread (arg=0x88cace8) at consumer_sdl.c:698
#9 0x0097696e in start_thread (arg=0xabb86b70) at pthread_create.c:300
#10 0x02181a4e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130
More information about the Kdenlive
mailing list