X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fframework%2Fmlt_frame.c;h=0924cbbc780e9e0ee155c2c90cd0bc33885aa98b;hb=e253fb0e1e231bcdc77bc37b05c7a9724dbe2bb1;hp=39055606a99643a7f8397e137342f701a23105fd;hpb=edfb53ebb1ce5b141e34b7feb7df7448cbc5be96;p=melted diff --git a/src/framework/mlt_frame.c b/src/framework/mlt_frame.c index 3905560..0924cbb 100644 --- a/src/framework/mlt_frame.c +++ b/src/framework/mlt_frame.c @@ -68,9 +68,8 @@ mlt_frame mlt_frame_init( ) mlt_properties_set_data( properties, "alpha", NULL, 0, NULL, NULL ); // Construct stacks for frames and methods - this->stack_get_image = mlt_deque_init( ); - this->stack_frame = mlt_deque_init( ); - this->stack_service = mlt_deque_init( ); + this->stack_image = mlt_deque_init( ); + this->stack_audio = mlt_deque_init( ); } return this; @@ -89,7 +88,7 @@ mlt_properties mlt_frame_properties( mlt_frame this ) int mlt_frame_is_test_card( mlt_frame this ) { - return mlt_properties_get_int( mlt_frame_properties( this ), "test_image" ); + return mlt_deque_count( this->stack_image ) == 0 || mlt_properties_get_int( mlt_frame_properties( this ), "test_image" ); } /** Check if we have a way to derive something than test audio. @@ -137,7 +136,7 @@ int mlt_frame_set_position( mlt_frame this, mlt_position value ) int mlt_frame_push_get_image( mlt_frame this, mlt_get_image get_image ) { - return mlt_deque_push_back( this->stack_get_image, get_image ); + return mlt_deque_push_back( this->stack_image, get_image ); } /** Pop a get_image callback. @@ -145,7 +144,7 @@ int mlt_frame_push_get_image( mlt_frame this, mlt_get_image get_image ) mlt_get_image mlt_frame_pop_get_image( mlt_frame this ) { - return mlt_deque_pop_back( this->stack_get_image ); + return mlt_deque_pop_back( this->stack_image ); } /** Push a frame. @@ -153,7 +152,7 @@ mlt_get_image mlt_frame_pop_get_image( mlt_frame this ) int mlt_frame_push_frame( mlt_frame this, mlt_frame that ) { - return mlt_deque_push_back( this->stack_frame, that ); + return mlt_deque_push_back( this->stack_image, that ); } /** Pop a frame. @@ -161,7 +160,7 @@ int mlt_frame_push_frame( mlt_frame this, mlt_frame that ) mlt_frame mlt_frame_pop_frame( mlt_frame this ) { - return mlt_deque_pop_back( this->stack_frame ); + return mlt_deque_pop_back( this->stack_image ); } /** Push a service. @@ -169,7 +168,7 @@ mlt_frame mlt_frame_pop_frame( mlt_frame this ) int mlt_frame_push_service( mlt_frame this, void *that ) { - return mlt_deque_push_back( this->stack_service, that ); + return mlt_deque_push_back( this->stack_image, that ); } /** Pop a service. @@ -177,7 +176,23 @@ int mlt_frame_push_service( mlt_frame this, void *that ) void *mlt_frame_pop_service( mlt_frame this ) { - return mlt_deque_pop_back( this->stack_service ); + return mlt_deque_pop_back( this->stack_image ); +} + +/** Push an audio item on the stack. +*/ + +int mlt_frame_push_audio( mlt_frame this, void *that ) +{ + return mlt_deque_push_back( this->stack_audio, that ); +} + +/** Pop an audio item from the stack +*/ + +void *mlt_frame_pop_audio( mlt_frame this ) +{ + return mlt_deque_pop_back( this->stack_audio ); } int mlt_frame_get_image( mlt_frame this, uint8_t **buffer, mlt_image_format *format, int *width, int *height, int writable ) @@ -230,6 +245,7 @@ int mlt_frame_get_image( mlt_frame this, uint8_t **buffer, mlt_image_format *for mlt_properties_set_int( properties, "width", *width ); mlt_properties_set_int( properties, "height", *height ); + mlt_properties_set_int( properties, "aspect_ratio", 1 ); switch( *format ) { @@ -313,9 +329,8 @@ void mlt_frame_close( mlt_frame this ) { if ( this != NULL ) { - mlt_deque_close( this->stack_get_image ); - mlt_deque_close( this->stack_frame ); - mlt_deque_close( this->stack_service ); + mlt_deque_close( this->stack_image ); + mlt_deque_close( this->stack_audio ); mlt_properties_close( &this->parent ); free( this ); } @@ -479,6 +494,8 @@ void mlt_resize_yuv422( uint8_t *output, int owidth, int oheight, uint8_t *input int active_width = 2 * iwidth; int inactive_width = out_x_range - in_x_range; + uint8_t *p = NULL; + uint8_t *end = NULL; // Loop for the entirety of our output height. while ( iheight -- ) @@ -495,8 +512,13 @@ void mlt_resize_yuv422( uint8_t *output, int owidth, int oheight, uint8_t *input } // We're in the input range for this row. - memcpy( out_ptr, in_middle + in_line, active_width ); - out_ptr += active_width; + p = in_middle + in_line; + end = out_ptr + active_width; + while ( out_ptr != end ) + { + *out_ptr ++ = *p ++; + *out_ptr ++ = *p ++; + } // Fill the outer part with black elements = inactive_width;