ULONG Image_Save( STRPTR name, APTR imagedata, ULONG width, ULONG height )
{
ULONG result = MSG_ERROR_NOERROR;
Object *streamobj, *rawvideoobj, *codecobj, *outputobj;
QUAD slen = width * height * 4;
debug( SOURCENAME ": Image_ImageSave() - '%s' %08lx (%ld/%ld)n", name, imagedata, width, height );
if( ( streamobj = NewObject( NULL, "memory.stream", MMA_StreamHandle, (IPTR) imagedata,
MMA_StreamLength, (IPTR) &slen,
MMA_MediaType , MMT_PICTURE,
TAG_DONE ) ) ) {
if( ( rawvideoobj = NewObject( NULL, "rawvideo.filter", MMA_Video_Width , width,
MMA_Video_Height, height,
TAG_DONE ) ) ) {
MediaSetPort( rawvideoobj, 1, MMA_Port_Format, MMFC_VIDEO_ARGB32 );
if( MediaConnectTagList( streamobj, 0, rawvideoobj, 0, NULL ) ) {
if( ( codecobj = MediaBuildFromArgsTagList( "png", rawvideoobj, 1, NULL ) ) ) {
if( ( outputobj = NewObject( NULL, "file.output", MMA_TaskPriority, 0,
MMA_StreamName, (ULONG) name,
//MMA_ErrorCode, ®gae_error,
TAG_DONE ) ) ) {
if( MediaConnectTagList( codecobj, 1, outputobj, 0, NULL ) ) {
DoMethod( outputobj, MMM_SignalAtEnd, (IPTR) FindTask( NULL ), SIGBREAKB_CTRL_C );
DoMethod( outputobj, MMM_Play );
Wait( SIGBREAKF_CTRL_C );
}
DisposeObject( outputobj );
}
DisposeObject( codecobj );
}
}
DisposeObject( rawvideoobj );
}
DisposeObject( streamobj );
}
debug( SOURCENAME ": Image_ImageSave() - %ldn", result );
return( result );
}