]> git.sesse.net Git - mlt/commitdiff
added luma transition and new frame properties
authorddennedy <ddennedy@d19143bc-622f-0410-bfdd-b5b2a6649095>
Tue, 6 Jan 2004 06:45:28 +0000 (06:45 +0000)
committerddennedy <ddennedy@d19143bc-622f-0410-bfdd-b5b2a6649095>
Tue, 6 Jan 2004 06:45:28 +0000 (06:45 +0000)
git-svn-id: https://mlt.svn.sourceforge.net/svnroot/mlt/trunk/mlt@37 d19143bc-622f-0410-bfdd-b5b2a6649095

14 files changed:
mlt/src/framework/mlt_transition.c
mlt/src/framework/mlt_transition.h
mlt/src/modules/core/Makefile
mlt/src/modules/core/configure
mlt/src/modules/core/factory.c
mlt/src/modules/dv/producer_libdv.c
mlt/src/tests/dan.c
src/framework/mlt_transition.c
src/framework/mlt_transition.h
src/modules/core/Makefile
src/modules/core/configure
src/modules/core/factory.c
src/modules/dv/producer_libdv.c
src/tests/dan.c

index dd4f2f64dfe2069a5c921a314bf71e7072c8f9d0..a571dfe8707b2f354dc061443ddcf9cb5ec39141 100644 (file)
@@ -56,6 +56,14 @@ mlt_service mlt_transition_service( mlt_transition this )
        return &this->parent;
 }
 
+/** Get the properties interface.
+*/
+
+mlt_properties mlt_transition_properties( mlt_transition this )
+{
+       return mlt_service_properties( mlt_transition_service( this ) );
+}
+
 /** Connect this transition with a producers a and b tracks.
 */
 
@@ -223,7 +231,7 @@ static int transition_get_frame( mlt_service service, mlt_frame_ptr frame, int i
 /** Close the transition.
 */
 
-void mlt_transitition_close( mlt_transition this )
+void mlt_transition_close( mlt_transition this )
 {
        if ( this->close != NULL )
                this->close( this );
index 397483f1a761e60c0b8d140349eb43789f784dbf..1686199970e962f781476e7e8f239f5feb5fe44f 100644 (file)
@@ -57,12 +57,13 @@ struct mlt_transition_s
 
 extern int mlt_transition_init( mlt_transition this, void *child );
 extern mlt_service mlt_transition_service( mlt_transition this );
+extern mlt_properties mlt_transition_properties( mlt_transition this );
 extern int mlt_transition_connect( mlt_transition this, mlt_service producer, int a_track, int b_track );
 extern void mlt_transition_set_in_and_out( mlt_transition this, mlt_timecode in, mlt_timecode out );
 extern int mlt_transition_get_a_track( mlt_transition this );
 extern int mlt_transition_get_b_track( mlt_transition this );
 extern mlt_timecode mlt_transition_get_in( mlt_transition this );
 extern mlt_timecode mlt_transition_get_out( mlt_transition this );
-extern void mlt_transitition_close( mlt_transition this );
+extern void mlt_transition_close( mlt_transition this );
 
 #endif
index 8c505ee1b1e6d0e1829b50aa207f80eeb4e351df..9dd52cda02c685782288980794d56479e6291ffd 100644 (file)
@@ -7,7 +7,8 @@ OBJS = factory.o \
           filter_greyscale.o \
           filter_gamma.o \
           filter_resize.o \
-          transition_composite.o
+          transition_composite.o \
+          transition_luma.o
 
 CFLAGS = -I../../ -Wall -g -D_FILE_OFFSET_BITS=64 -pthread
 
index 336d89e1ddfd5d9487eeb76f79d226fe4a2c3fd8..4b73ac861b659b53d1b3f4b51402ef4377783312 100755 (executable)
@@ -16,6 +16,7 @@ EOF
 
 cat << EOF >> ../transitions.dat
 composite              libmltcore.so
+luma           libmltcore.so
 EOF
 
 fi
index 33fe9eacdacd61e69eb7300b609a1ab1d2e1c493..78bdea75f9a1860dd4567c00f830a78032e8e97f 100644 (file)
@@ -26,6 +26,7 @@
 #include "filter_resize.h"
 #include "filter_gamma.h"
 #include "transition_composite.h"
+#include "transition_luma.h"
 
 void *mlt_create_producer( char *id, void *arg )
 {
@@ -51,6 +52,8 @@ void *mlt_create_transition( char *id, void *arg )
 {
        if ( !strcmp( id, "composite" ) )
                return transition_composite_init( arg );
+       if ( !strcmp( id, "luma" ) )
+               return transition_luma_init( arg );
        return NULL;
 }
 
index 34a73f76a73e7ca69fd6981f1c41ac8a0f622926..05218cf3fe6d29445ff0af57bbac969e48070116 100644 (file)
@@ -163,9 +163,6 @@ static int producer_get_image( mlt_frame this, uint8_t **buffer, mlt_image_forma
        *width = mlt_properties_get_int( properties, "width" );
        *height = mlt_properties_get_int( properties, "height" );
 
-       // Parse the header
-       dv_parse_header( decoder, dv_data );
-
        // Extract an image of the format requested
        if ( *format == mlt_image_yuv422 )
        {
@@ -218,9 +215,6 @@ static int producer_get_audio( mlt_frame this, int16_t **buffer, mlt_audio_forma
        // Get the dv data
        uint8_t *dv_data = mlt_properties_get_data( properties, "dv_data", NULL );
 
-       // Parse the header for meta info
-       dv_parse_header( decoder, dv_data );
-
        // Obtain required values
        *frequency = decoder->audio->frequency;
        *samples = decoder->audio->samples_this_frame;
@@ -283,6 +277,12 @@ static int producer_get_frame( mlt_producer producer, mlt_frame_ptr frame, int i
                // Update other info on the frame
                mlt_properties_set_int( properties, "width", 720 );
                mlt_properties_set_int( properties, "height", this->is_pal ? 576 : 480 );
+               mlt_properties_set_int( properties, "top_field_first", 0 );
+               
+               // Parse the header for meta info
+               dv_parse_header( this->dv_decoder, data );
+               mlt_properties_set_int( properties, "progressive", dv_is_progressive( this->dv_decoder ) );
+               mlt_properties_set_double( properties, "display_aspect", dv_format_wide( this->dv_decoder ) ? 16.0/9.0 : 4.0/3.0 );
 
                // Hmm - register audio callback
                ( *frame )->get_audio = producer_get_audio;
index 8e499bcdeb059b6001e81a1b686c22ce4147eedf..99469a8dddbde1948209a68c01e67f5cf9244985 100644 (file)
@@ -22,10 +22,14 @@ int main( int argc, char **argv )
        mlt_consumer consumer = mlt_factory_consumer( "sdl", "NTSC" );
 
        // Create the producer(s)
-       mlt_producer dv1 = mlt_factory_producer( "mcmpeg", file1 );
+       mlt_producer dv1 = mlt_factory_producer( "mcdv", file1 );
+       mlt_producer_set_in_and_out( dv1, 0.0, 2.0 );
+       
+       mlt_producer dv2 = mlt_factory_producer( "mcmpeg", file2 );
+       //mlt_producer_set_in_and_out( dv2, 10.0, 30.0 );
 
 #if 0
-       // Connect the tractor to the consumer
+       // Connect the consumer to the producer
        mlt_consumer_connect( consumer, mlt_producer_service( dv1 ) );
 
        // Do stuff until we're told otherwise...
@@ -38,6 +42,7 @@ int main( int argc, char **argv )
        //mlt_producer dv1 = producer_pixbuf_init( file1 );
        //mlt_producer dv2 = producer_libdv_init( file2 );
        //mlt_producer dv2 = mlt_factory_producer( "pixbuf", file2 );
+#if 0
        mlt_producer dv2 = mlt_factory_producer( "pango", NULL ); //"<span font_desc=\"Sans Bold 36\">Mutton <span font_desc=\"Luxi Serif Bold Oblique 36\">Lettuce</span> Tomato</span>" );
        mlt_properties_set( mlt_producer_properties( dv2 ), "font", "Sans Bold 36" );
        mlt_properties_set( mlt_producer_properties( dv2 ), "text", "Mutton Lettuce\nTomato" );
@@ -47,21 +52,31 @@ int main( int argc, char **argv )
        mlt_properties_set_int( mlt_producer_properties( dv2 ), "align", 1 );
        mlt_properties_set_int( mlt_producer_properties( dv2 ), "x", -20 );
        mlt_properties_set_int( mlt_producer_properties( dv2 ), "y", 40 );
+#endif
+
+       mlt_playlist playlist1 = mlt_playlist_init();
+       mlt_playlist_append( playlist1, dv1 );
 
+       mlt_playlist playlist2 = mlt_playlist_init();
+       mlt_playlist_blank( playlist2, 1.0 );
+       mlt_playlist_append( playlist2, dv2 );
+       
        // Register producers(s) with a multitrack object
        mlt_multitrack multitrack = mlt_multitrack_init( );
-       mlt_multitrack_connect( multitrack, dv1, 0 );
-       mlt_multitrack_connect( multitrack, dv2, 1 );
+       mlt_multitrack_connect( multitrack, mlt_playlist_producer( playlist1 ), 0 );
+       mlt_multitrack_connect( multitrack, mlt_playlist_producer( playlist2 ), 1 );
 
        // Create a filter and associate it to track 0
-       mlt_filter filter = mlt_factory_filter( "deinterlace", NULL );
-       mlt_filter_connect( filter, mlt_multitrack_service( multitrack ), 0 );
-       mlt_filter_set_in_and_out( filter, 0, 1000 );
+       //mlt_filter filter = mlt_factory_filter( "deinterlace", NULL );
+       //mlt_filter_connect( filter, mlt_multitrack_service( multitrack ), 0 );
+       //mlt_filter_set_in_and_out( filter, 0, 1000 );
 
        // Define a transition
-       mlt_transition transition = mlt_factory_transition( "composite", NULL );
-       mlt_transition_connect( transition, mlt_filter_service( filter ), 0, 1 );
-       mlt_transition_set_in_and_out( transition, 0, 5.0 );
+       mlt_transition transition = mlt_factory_transition( "luma", NULL );
+       mlt_transition_connect( transition, mlt_multitrack_service( multitrack ), 0, 1 );
+       mlt_transition_set_in_and_out( transition, 1.0, 2.0 );
+       mlt_properties_set( mlt_transition_properties( transition ), "filename", "clock.pgm" );
+       mlt_properties_set_double( mlt_transition_properties( transition ), "softness", 0.1 );
 
        // Buy a tractor and connect it to the filter
        mlt_tractor tractor = mlt_tractor_init( );
@@ -74,17 +89,10 @@ int main( int argc, char **argv )
        fprintf( stderr, "Press return to continue\n" );
        fgets( temp, 132, stdin );
 
-       mlt_properties_set( mlt_producer_properties( dv2 ), "font", "Sans Oblique 36" );
-       mlt_properties_set( mlt_producer_properties( dv2 ), "text", "Mutton\nLettuce Tomato" );
-
-       // Do stuff until we're told otherwise...
-       fprintf( stderr, "Press return to continue\n" );
-       fgets( temp, 132, stdin );
-       
        // Close everything...
        mlt_consumer_close( consumer );
        mlt_tractor_close( tractor );
-       //mlt_filter_close( filter );
+//     mlt_filter_close( filter );
        mlt_multitrack_close( multitrack );
        mlt_producer_close( dv1 );
        mlt_producer_close( dv2 );
index dd4f2f64dfe2069a5c921a314bf71e7072c8f9d0..a571dfe8707b2f354dc061443ddcf9cb5ec39141 100644 (file)
@@ -56,6 +56,14 @@ mlt_service mlt_transition_service( mlt_transition this )
        return &this->parent;
 }
 
+/** Get the properties interface.
+*/
+
+mlt_properties mlt_transition_properties( mlt_transition this )
+{
+       return mlt_service_properties( mlt_transition_service( this ) );
+}
+
 /** Connect this transition with a producers a and b tracks.
 */
 
@@ -223,7 +231,7 @@ static int transition_get_frame( mlt_service service, mlt_frame_ptr frame, int i
 /** Close the transition.
 */
 
-void mlt_transitition_close( mlt_transition this )
+void mlt_transition_close( mlt_transition this )
 {
        if ( this->close != NULL )
                this->close( this );
index 397483f1a761e60c0b8d140349eb43789f784dbf..1686199970e962f781476e7e8f239f5feb5fe44f 100644 (file)
@@ -57,12 +57,13 @@ struct mlt_transition_s
 
 extern int mlt_transition_init( mlt_transition this, void *child );
 extern mlt_service mlt_transition_service( mlt_transition this );
+extern mlt_properties mlt_transition_properties( mlt_transition this );
 extern int mlt_transition_connect( mlt_transition this, mlt_service producer, int a_track, int b_track );
 extern void mlt_transition_set_in_and_out( mlt_transition this, mlt_timecode in, mlt_timecode out );
 extern int mlt_transition_get_a_track( mlt_transition this );
 extern int mlt_transition_get_b_track( mlt_transition this );
 extern mlt_timecode mlt_transition_get_in( mlt_transition this );
 extern mlt_timecode mlt_transition_get_out( mlt_transition this );
-extern void mlt_transitition_close( mlt_transition this );
+extern void mlt_transition_close( mlt_transition this );
 
 #endif
index 8c505ee1b1e6d0e1829b50aa207f80eeb4e351df..9dd52cda02c685782288980794d56479e6291ffd 100644 (file)
@@ -7,7 +7,8 @@ OBJS = factory.o \
           filter_greyscale.o \
           filter_gamma.o \
           filter_resize.o \
-          transition_composite.o
+          transition_composite.o \
+          transition_luma.o
 
 CFLAGS = -I../../ -Wall -g -D_FILE_OFFSET_BITS=64 -pthread
 
index 336d89e1ddfd5d9487eeb76f79d226fe4a2c3fd8..4b73ac861b659b53d1b3f4b51402ef4377783312 100755 (executable)
@@ -16,6 +16,7 @@ EOF
 
 cat << EOF >> ../transitions.dat
 composite              libmltcore.so
+luma           libmltcore.so
 EOF
 
 fi
index 33fe9eacdacd61e69eb7300b609a1ab1d2e1c493..78bdea75f9a1860dd4567c00f830a78032e8e97f 100644 (file)
@@ -26,6 +26,7 @@
 #include "filter_resize.h"
 #include "filter_gamma.h"
 #include "transition_composite.h"
+#include "transition_luma.h"
 
 void *mlt_create_producer( char *id, void *arg )
 {
@@ -51,6 +52,8 @@ void *mlt_create_transition( char *id, void *arg )
 {
        if ( !strcmp( id, "composite" ) )
                return transition_composite_init( arg );
+       if ( !strcmp( id, "luma" ) )
+               return transition_luma_init( arg );
        return NULL;
 }
 
index 34a73f76a73e7ca69fd6981f1c41ac8a0f622926..05218cf3fe6d29445ff0af57bbac969e48070116 100644 (file)
@@ -163,9 +163,6 @@ static int producer_get_image( mlt_frame this, uint8_t **buffer, mlt_image_forma
        *width = mlt_properties_get_int( properties, "width" );
        *height = mlt_properties_get_int( properties, "height" );
 
-       // Parse the header
-       dv_parse_header( decoder, dv_data );
-
        // Extract an image of the format requested
        if ( *format == mlt_image_yuv422 )
        {
@@ -218,9 +215,6 @@ static int producer_get_audio( mlt_frame this, int16_t **buffer, mlt_audio_forma
        // Get the dv data
        uint8_t *dv_data = mlt_properties_get_data( properties, "dv_data", NULL );
 
-       // Parse the header for meta info
-       dv_parse_header( decoder, dv_data );
-
        // Obtain required values
        *frequency = decoder->audio->frequency;
        *samples = decoder->audio->samples_this_frame;
@@ -283,6 +277,12 @@ static int producer_get_frame( mlt_producer producer, mlt_frame_ptr frame, int i
                // Update other info on the frame
                mlt_properties_set_int( properties, "width", 720 );
                mlt_properties_set_int( properties, "height", this->is_pal ? 576 : 480 );
+               mlt_properties_set_int( properties, "top_field_first", 0 );
+               
+               // Parse the header for meta info
+               dv_parse_header( this->dv_decoder, data );
+               mlt_properties_set_int( properties, "progressive", dv_is_progressive( this->dv_decoder ) );
+               mlt_properties_set_double( properties, "display_aspect", dv_format_wide( this->dv_decoder ) ? 16.0/9.0 : 4.0/3.0 );
 
                // Hmm - register audio callback
                ( *frame )->get_audio = producer_get_audio;
index 8e499bcdeb059b6001e81a1b686c22ce4147eedf..99469a8dddbde1948209a68c01e67f5cf9244985 100644 (file)
@@ -22,10 +22,14 @@ int main( int argc, char **argv )
        mlt_consumer consumer = mlt_factory_consumer( "sdl", "NTSC" );
 
        // Create the producer(s)
-       mlt_producer dv1 = mlt_factory_producer( "mcmpeg", file1 );
+       mlt_producer dv1 = mlt_factory_producer( "mcdv", file1 );
+       mlt_producer_set_in_and_out( dv1, 0.0, 2.0 );
+       
+       mlt_producer dv2 = mlt_factory_producer( "mcmpeg", file2 );
+       //mlt_producer_set_in_and_out( dv2, 10.0, 30.0 );
 
 #if 0
-       // Connect the tractor to the consumer
+       // Connect the consumer to the producer
        mlt_consumer_connect( consumer, mlt_producer_service( dv1 ) );
 
        // Do stuff until we're told otherwise...
@@ -38,6 +42,7 @@ int main( int argc, char **argv )
        //mlt_producer dv1 = producer_pixbuf_init( file1 );
        //mlt_producer dv2 = producer_libdv_init( file2 );
        //mlt_producer dv2 = mlt_factory_producer( "pixbuf", file2 );
+#if 0
        mlt_producer dv2 = mlt_factory_producer( "pango", NULL ); //"<span font_desc=\"Sans Bold 36\">Mutton <span font_desc=\"Luxi Serif Bold Oblique 36\">Lettuce</span> Tomato</span>" );
        mlt_properties_set( mlt_producer_properties( dv2 ), "font", "Sans Bold 36" );
        mlt_properties_set( mlt_producer_properties( dv2 ), "text", "Mutton Lettuce\nTomato" );
@@ -47,21 +52,31 @@ int main( int argc, char **argv )
        mlt_properties_set_int( mlt_producer_properties( dv2 ), "align", 1 );
        mlt_properties_set_int( mlt_producer_properties( dv2 ), "x", -20 );
        mlt_properties_set_int( mlt_producer_properties( dv2 ), "y", 40 );
+#endif
+
+       mlt_playlist playlist1 = mlt_playlist_init();
+       mlt_playlist_append( playlist1, dv1 );
 
+       mlt_playlist playlist2 = mlt_playlist_init();
+       mlt_playlist_blank( playlist2, 1.0 );
+       mlt_playlist_append( playlist2, dv2 );
+       
        // Register producers(s) with a multitrack object
        mlt_multitrack multitrack = mlt_multitrack_init( );
-       mlt_multitrack_connect( multitrack, dv1, 0 );
-       mlt_multitrack_connect( multitrack, dv2, 1 );
+       mlt_multitrack_connect( multitrack, mlt_playlist_producer( playlist1 ), 0 );
+       mlt_multitrack_connect( multitrack, mlt_playlist_producer( playlist2 ), 1 );
 
        // Create a filter and associate it to track 0
-       mlt_filter filter = mlt_factory_filter( "deinterlace", NULL );
-       mlt_filter_connect( filter, mlt_multitrack_service( multitrack ), 0 );
-       mlt_filter_set_in_and_out( filter, 0, 1000 );
+       //mlt_filter filter = mlt_factory_filter( "deinterlace", NULL );
+       //mlt_filter_connect( filter, mlt_multitrack_service( multitrack ), 0 );
+       //mlt_filter_set_in_and_out( filter, 0, 1000 );
 
        // Define a transition
-       mlt_transition transition = mlt_factory_transition( "composite", NULL );
-       mlt_transition_connect( transition, mlt_filter_service( filter ), 0, 1 );
-       mlt_transition_set_in_and_out( transition, 0, 5.0 );
+       mlt_transition transition = mlt_factory_transition( "luma", NULL );
+       mlt_transition_connect( transition, mlt_multitrack_service( multitrack ), 0, 1 );
+       mlt_transition_set_in_and_out( transition, 1.0, 2.0 );
+       mlt_properties_set( mlt_transition_properties( transition ), "filename", "clock.pgm" );
+       mlt_properties_set_double( mlt_transition_properties( transition ), "softness", 0.1 );
 
        // Buy a tractor and connect it to the filter
        mlt_tractor tractor = mlt_tractor_init( );
@@ -74,17 +89,10 @@ int main( int argc, char **argv )
        fprintf( stderr, "Press return to continue\n" );
        fgets( temp, 132, stdin );
 
-       mlt_properties_set( mlt_producer_properties( dv2 ), "font", "Sans Oblique 36" );
-       mlt_properties_set( mlt_producer_properties( dv2 ), "text", "Mutton\nLettuce Tomato" );
-
-       // Do stuff until we're told otherwise...
-       fprintf( stderr, "Press return to continue\n" );
-       fgets( temp, 132, stdin );
-       
        // Close everything...
        mlt_consumer_close( consumer );
        mlt_tractor_close( tractor );
-       //mlt_filter_close( filter );
+//     mlt_filter_close( filter );
        mlt_multitrack_close( multitrack );
        mlt_producer_close( dv1 );
        mlt_producer_close( dv2 );