예제 #1
0
void InitializeLimeEvents()
{
    static int initialized = 0;

    IsJavaRunning = 1;

    if (!initialized) {
        LimeFunction *f;
        initialized = TRUE;
        f = NewLimeFunction(LIME_PACKAGE,
                            LIME_GRAPHICS_CLASS,
                            "initialize");
        f->call(f, NULL);
        DeleteLimeFunction(f);

        /* initialize the event bridge */
        f = NewLimeFunction(LIME_PACKAGE,
                            LIME_EVENT_CLASS,
                            "initialize");
        f->call(f, NULL);
        DeleteLimeFunction(f);

    }

    CreateThread(NULL, 0, DispatcherThread, (void *)2000, 0, NULL);

}
예제 #2
0
static javacall_result video_start_video_snapshot(javacall_handle handle, 
                                                  const javacall_utf16* imageType, long length)
{
    audio_handle* pHandle = (audio_handle*)handle;
    char* data;
    static LimeFunction *f = NULL;
    
    if (snapshot_buffer != NULL) {
        return JAVACALL_FAIL;
    }
    
    if (f == NULL) {
        f = NewLimeFunction(LIME_MMAPI_PACKAGE,
                        LIME_MMAPI_CLASS,
                        "snapshot");
    }
    
    f->call(f, &data, &dataLength, pHandle->hWnd, imageType, length);
    
    if(data == NULL){
        dataLength = -1;
    }
    
    snapshot_buffer = (char *) malloc(dataLength);
    memcpy(snapshot_buffer, data, dataLength);
    
    javanotify_on_media_notification( JAVACALL_EVENT_MEDIA_SNAPSHOT_FINISHED,
        pHandle->isolateId, pHandle->playerId, NULL == data ? JAVACALL_FAIL :
        JAVACALL_OK, NULL);
    
    
    return JAVACALL_OK; 
}
void initializeWMASupport() {
    int vmArgc=0;
  //  char *vmArgv[3]; /* CLDC parameters */

    LimeFunction *initWMA = NULL;

    char* resultBytes = NULL;
    int resultLen = 0;

    initWMA = NewLimeFunction(WMA_CLIENT_PACKAGE,
    "WMAClientBridge",
    "initializeWMASupport");

    initWMA->call(initWMA, &resultBytes, &resultLen);
    if (resultLen < 3) {
        /* it's too small to be a valid response */
    }
    else {
        char* resultStr = NULL;
        char* clientTrafficPort = NULL;
        char* serverTrafficPort = NULL;
        char* phoneNum = NULL;

        char* newlinePtr = NULL;
        char* keyPtr = NULL;
        char* valuePtr = NULL;

        /* make the result null-terminated */
        resultStr = (char*)malloc(resultLen + 1);
        resultStr[resultLen] = '\0';
        memcpy(resultStr, resultBytes, resultLen);

        /* break up the result string into its 3 pieces */
        newlinePtr = strrchr(resultStr, '\n');
        phoneNum = newlinePtr + 1;
        *newlinePtr = '\0';
        newlinePtr = strrchr(resultStr, '\n');
        serverTrafficPort = newlinePtr + 1;
        *newlinePtr = '\0';
        clientTrafficPort = resultStr;

        smsInPortNumber = atoi(clientTrafficPort);
        smsOutPortNumber = atoi(serverTrafficPort);

        devicePhoneNumber = strdup(phoneNum);
        javacall_set_property("com.sun.midp.io.j2me.sms.PhoneNumber",
                                          devicePhoneNumber,
                                          JAVACALL_TRUE,
                                          JAVACALL_APPLICATION_PROPERTY);


        free(resultStr);
    }
    DeleteLimeFunction(initWMA);


}
예제 #4
0
static javacall_result video_set_video_location(javacall_handle handle, long x, long y, long w, long h)
{
    audio_handle* pHandle = (audio_handle*)handle;
    static LimeFunction *f1 = NULL;
    static LimeFunction *f2 = NULL;
    static LimeFunction *f3 = NULL;
    static LimeFunction *f4 = NULL;
    int res;

    if (f1 == NULL) {
        f1 = NewLimeFunction(LIME_MMAPI_PACKAGE,
                    LIME_MMAPI_CLASS,
                    "setDisplayX");
    }
    f1->call(f1, &res, pHandle->hWnd, x);

    if (f2 == NULL) {
        f2 = NewLimeFunction(LIME_MMAPI_PACKAGE,
                    LIME_MMAPI_CLASS,
                    "setDisplayY");
    }
    f2->call(f2, &res, pHandle->hWnd, y);

    if (f3 == NULL) {
        f3 = NewLimeFunction(LIME_MMAPI_PACKAGE,
                    LIME_MMAPI_CLASS,
                    "setDisplayWidth");
    }
    f3->call(f3, &res, pHandle->hWnd, w);

    if (f4 == NULL) {
        f4 = NewLimeFunction(LIME_MMAPI_PACKAGE,
                    LIME_MMAPI_CLASS,
                    "setDisplayHeight");
    }
    f4->call(f4, &res, pHandle->hWnd, h);
    
    return JAVACALL_OK;
}
예제 #5
0
static javacall_result video_get_video_size(javacall_handle handle, long* width, long* height)
{
    audio_handle* pHandle = (audio_handle*)handle;
    static LimeFunction *f1 = NULL;
    static LimeFunction *f2 = NULL;

    if (f1 == NULL) {
        f1 = NewLimeFunction(LIME_MMAPI_PACKAGE,
                    LIME_MMAPI_CLASS,
                    "getSourceWidth");
    }
    f1->call(f1, width, pHandle->hWnd);

    if (f2 == NULL) {
        f2 = NewLimeFunction(LIME_MMAPI_PACKAGE,
                    LIME_MMAPI_CLASS,
                    "getSourceHeight");
    }
    f2->call(f2, height, pHandle->hWnd);
    
    return JAVACALL_OK;
}
예제 #6
0
void CheckLimeEvent() {
    static LimeFunction *f = NULL;
    int *returnData;
    int returnLength;
    __int64 waitFor = 0;
    bool_t forever = 1;
    KVMEventType evt;
    int i;

    if (f == NULL) {
        f = NewLimeFunction(LIME_PACKAGE,
                            LIME_EVENT_CLASS,
                            "getEvents");
        f->trace(f, FALSE);
    }

    LIME_DEBUG_PRINTF("Waiting for event\n");

    /* Ask the LIME server for an event */
    f->call(f, &returnData, &returnLength, EVENT_BUFFER_SIZE, forever, waitFor);

    if (returnData == NULL) {
        returnLength = 0;
    }

    LIME_DEBUG_PRINTF("getEvents return length: %d \n",returnLength);

    if ( returnLength %4 != 0 ) {
        LIME_DEBUG_PRINTF("Bad lime event size, adjusting\n");
        returnLength = (returnLength/4) * 4;
    }

    if (returnLength == 0) {
        LIME_DEBUG_PRINTF("Ignoring lime event\n");
        return;
    } else {
        /* Send events to JVM */


        for (i=0; i<returnLength; i+=EVENT_SIZE) {
            /* Decode the event */
            evt.type = returnData[i + 0];
            evt.chr = returnData[i + 1];
            evt.screenX = returnData[i + 2];
            evt.screenY = returnData[i + 3];

            SendEvent(&evt);
        }
    }
}
예제 #7
0
static javacall_result video_set_video_color_key(
            javacall_handle handle, javacall_bool on, javacall_pixel color) {
    
    static LimeFunction *f = NULL;
    
    if (f == NULL) {
        f = NewLimeFunction(LIME_MMAPI_PACKAGE, LIME_MMAPI_CLASS,
                "setVideoAlpha");
    }
    
    f->call(f, NULL, !on, color);
    
    return JAVACALL_OK;
}
예제 #8
0
static javacall_result skip_frames(javacall_handle handle, long* nFrames) {
    audio_handle* pHandle = (audio_handle*)handle;
    static LimeFunction *f = NULL;

    if (f == NULL) {
        f = NewLimeFunction(LIME_MMAPI_PACKAGE,
                    LIME_MMAPI_CLASS,
                    "skip");
    }
    f->call(f, nFrames, pHandle->hWnd, *nFrames);
    
    return JAVACALL_OK;

}
예제 #9
0
static javacall_result seek_to_frame(javacall_handle handle, 
                                             long frameNum, long* actualFrameNum) {
    audio_handle* pHandle = (audio_handle*)handle;
    static LimeFunction *f = NULL;

    if (f == NULL) {
        f = NewLimeFunction(LIME_MMAPI_PACKAGE,
                    LIME_MMAPI_CLASS,
                    "seek");
    }
    f->call(f, actualFrameNum, pHandle->hWnd, frameNum);
    
    return JAVACALL_OK;
}
예제 #10
0
static javacall_result map_time_to_frame(javacall_handle handle, 
                                                 long ms, long* frameNum) {
    audio_handle* pHandle = (audio_handle*)handle;
    static LimeFunction *f = NULL;

    if (f == NULL) {
        f = NewLimeFunction(LIME_MMAPI_PACKAGE,
                    LIME_MMAPI_CLASS,
                    "mapTimeToFrame");
    }
    f->call(f, frameNum, pHandle->hWnd, ms);
    
    return JAVACALL_OK;
}
예제 #11
0
static javacall_result video_set_video_visible(javacall_handle handle, javacall_bool visible)
{
    audio_handle* pHandle = (audio_handle*)handle;
    static LimeFunction *f = NULL;
    int res;

    if (f == NULL) {
        f = NewLimeFunction(LIME_MMAPI_PACKAGE,
                    LIME_MMAPI_CLASS,
                    "setVisible");
    }
    f->call(f, &res, pHandle->hWnd, visible);
    
    return JAVACALL_OK;
}
void tearDownWMASupport() {
    LimeFunction *killWMA = NULL;

    int result = 0;

    killWMA = NewLimeFunction(WMA_CLIENT_PACKAGE,
    "WMAClientBridge",
    "cleanupWMASupport");

    /* result is only for synchronization so it doesn't run ansynchronously */
    killWMA->call(killWMA, &result);

    DeleteLimeFunction(killWMA);

	free(devicePhoneNumber);
}
예제 #13
0
static javacall_result video_set_video_fullscreenmode( javacall_handle handle, javacall_bool fullScreenMode )
{
    audio_handle* pHandle = (audio_handle*)handle;
    static LimeFunction *f = NULL;
    int res = 0;

    if (f == NULL) {
        f = NewLimeFunction(LIME_MMAPI_PACKAGE,
                        LIME_MMAPI_CLASS,
                        "setDisplayFullScreen");
    }
    
    f->call(f, &res, pHandle->hWnd, fullScreenMode);

    return JAVACALL_OK; 
}
예제 #14
0
static javacall_handle video_create(int appId, int playerId, 
                                    jc_fmt mediaType, 
                                    const javacall_utf16_string URI)
{
    static LimeFunction *f = NULL;
    javacall_int64 res = 0;
    audio_handle* pHandle = MALLOC(sizeof(audio_handle));
    size_t uriLength = ( NULL != URI ) ? wcslen(URI) : 0;

    javacall_utf16 *mediaTypeWide;
    int mediaTypeWideLen;
    
    int len = MAX_MIMETYPE_LENGTH;
    char *buff = MALLOC(len);
    
    if (buff == NULL) {
        return NULL;
    }

    if (NULL == pHandle) {
        return NULL;
    }

    if (f == NULL) {
        f = NewLimeFunction(LIME_MMAPI_PACKAGE,
                            LIME_MMAPI_CLASS,
                            "createVideoPlayer");
    }

    if (fmt_str2mime(fmt_enum2str(mediaType), buff, len) == JAVACALL_FAIL) {
        mediaTypeWide = NULL;
        mediaTypeWideLen = 0;
    }
    else {
        mediaTypeWide = char_to_unicode(buff);
        mediaTypeWideLen = wcslen(mediaTypeWide);
    }
    
    f->call(f, &res, mediaTypeWide, mediaTypeWideLen, URI, uriLength);

    if (res <= 0) {
	    return NULL;
    }

    pHandle->hWnd             = (long) res;
    pHandle->offset           = 0;
    pHandle->duration         = -1;
    pHandle->curTime          = 0;
    pHandle->isolateId        = appId;
    pHandle->playerId         = playerId;
    pHandle->timerId          = 0;
    pHandle->isForeground     = JAVACALL_TRUE;
    pHandle->mediaType        = mediaType;
    pHandle->buffer           = NULL;
    pHandle->wholeContentSize = -1;
    pHandle->isBuffered       = JAVACALL_FALSE;
    pHandle->volume           = -1;
    pHandle->mute             = JAVACALL_FALSE;
    pHandle->mutex            = mmaudio_mutex_create();

#ifdef ENABLE_EXTRA_CAMERA_CONTROLS
    pHandle->pExtraCC         = NULL;

    if( JC_FMT_CAPTURE_VIDEO == mediaType )
    {
        extra_camera_controls_init( pHandle );
    }
#endif //ENABLE_EXTRA_CAMERA_CONTROLS
    
    // set the file name to the URI
    if (NULL != URI && uriLength>0) {
        wcstombs(pHandle->fileName, URI, uriLength);
    }

    if (buff != NULL) {
        FREE(buff);
    }
    
    return pHandle;
}