X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fframework%2Fmlt_frame.c;h=360ecb02767745f2154ab29c336c8562ef3efd99;hb=b516a26231b16a26f37b56cb9a298a2d9e6c0e23;hp=09eb6f078ddd6dae00250f9caa67392ad9efe745;hpb=06cbcd6e728a9288d06074cf1a2bc979b735468b;p=melted diff --git a/src/framework/mlt_frame.c b/src/framework/mlt_frame.c index 09eb6f0..360ecb0 100644 --- a/src/framework/mlt_frame.c +++ b/src/framework/mlt_frame.c @@ -53,6 +53,7 @@ mlt_frame mlt_frame_init( ) mlt_properties_set_int( properties, "height", 576 ); mlt_properties_set_int( properties, "normalised_width", 720 ); mlt_properties_set_int( properties, "normalised_height", 576 ); + mlt_properties_set_double( properties, "aspect_ratio", 72.0/79.0 ); } else { @@ -60,16 +61,15 @@ mlt_frame mlt_frame_init( ) mlt_properties_set_int( properties, "height", 480 ); mlt_properties_set_int( properties, "normalised_width", 720 ); mlt_properties_set_int( properties, "normalised_height", 480 ); + mlt_properties_set_double( properties, "aspect_ratio", 128.0/117.0 ); } - mlt_properties_set_double( properties, "aspect_ratio", 4.0 / 3.0 ); mlt_properties_set_data( properties, "audio", NULL, 0, NULL, NULL ); 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; @@ -136,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. @@ -144,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. @@ -152,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. @@ -160,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. @@ -168,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. @@ -176,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 ) @@ -204,7 +220,6 @@ int mlt_frame_get_image( mlt_frame this, uint8_t **buffer, mlt_image_format *for { mlt_properties test_properties = mlt_frame_properties( test_frame ); mlt_properties_set_double( test_properties, "consumer_aspect_ratio", mlt_properties_get_double( properties, "consumer_aspect_ratio" ) ); - mlt_properties_set_double( test_properties, "consumer_scale", mlt_properties_get_double( properties, "consumer_scale" ) ); mlt_properties_set( test_properties, "rescale.interp", "nearest" ); mlt_frame_get_image( test_frame, buffer, format, width, height, writable ); mlt_properties_set_data( properties, "test_card_frame", test_frame, 0, ( mlt_destructor )mlt_frame_close, NULL ); @@ -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 ); } @@ -323,30 +338,6 @@ void mlt_frame_close( mlt_frame this ) /***** convenience functions *****/ -/* this macro scales rgb into the yuv gamut, y is scaled by 219/255 and uv by 224/255 */ -#define RGB2YUV(r, g, b, y, u, v)\ - y = ((257*r + 504*g + 98*b) >> 10) + 16;\ - u = ((-148*r - 291*g + 439*b) >> 10) + 128;\ - v = ((439*r - 368*g - 71*b) >> 10) + 128;\ - y = y < 16 ? 16 : y;\ - u = u < 16 ? 16 : u;\ - v = v < 16 ? 16 : v;\ - y = y > 235 ? 235 : y;\ - u = u > 240 ? 240 : u;\ - v = v > 240 ? 240 : v - -/* this macro assumes the user has already scaled their rgb down into the broadcast limits */ -#define RGB2YUV_UNSCALED(r, g, b, y, u, v)\ - y = (299*r + 587*g + 114*b) >> 10;\ - u = ((-169*r - 331*g + 500*b) >> 10) + 128;\ - v = ((500*r - 419*g - 81*b) >> 10) + 128;\ - y = y < 16 ? 16 : y;\ - u = u < 16 ? 16 : u;\ - v = v < 16 ? 16 : v;\ - y = y > 235 ? 235 : y;\ - u = u > 240 ? 240 : u;\ - v = v > 240 ? 240 : v - int mlt_convert_rgb24a_to_yuv422( uint8_t *rgba, int width, int height, int stride, uint8_t *yuv, uint8_t *alpha ) { int ret = 0; @@ -770,4 +761,3 @@ int mlt_sample_calculator( float fps, int frequency, int64_t position ) return samples; } -