From: Philip de N. <ph...@us...> - 2011-04-19 10:08:50
|
Update of /cvsroot/ingex/ingex/player/ingex_player In directory vz-cvs-4.sog:/tmp/cvs-serv29831 Modified Files: audio_switch_sink.c audio_switch_sink.h buffered_media_sink.c dual_sink.c keyboard_input_connect.c media_control.c media_control.h media_player.c on_screen_display.c on_screen_display.h player.c Log Message: allow set OSD position and add enable argument to audio snap funcs Allow adjustment of the OSD play state position to top, middle or bottom Added --osd-pos option to player Add enable argument to snap_audio_to_video/snapAudioToVideo functions/methods Toggle enable=-1, disable enable=0 and enable enable=1 cosmetics: remove whitespace before eol Index: dual_sink.c =================================================================== RCS file: /cvsroot/ingex/ingex/player/ingex_player/dual_sink.c,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** dual_sink.c 26 Oct 2010 18:28:23 -0000 1.14 --- dual_sink.c 19 Apr 2011 10:08:48 -0000 1.15 *************** *** 332,335 **** --- 332,345 ---- } + static void dusk_osd_set_play_state_position(void* data, OSDPlayStatePosition position) + { + DualSink* dualSink = (DualSink*)data; + + CHK_ORETV(check_dvs_is_open(dualSink)); + + osd_set_play_state_position(msk_get_osd(dualSink->x11Sink), position); + osd_set_play_state_position(msk_get_osd(dualSink->dvsSink), position); + } + static void dusk_osd_set_minimum_audio_stream_level(void* data, double level) { *************** *** 618,622 **** } } ! if ((streamInfo->type != PICTURE_STREAM_TYPE || !streamInfo->isScaledPicture) && /* only pass unscaled pictures */ msk_accept_stream(dualSink->x11Sink, streamInfo)) --- 628,632 ---- } } ! if ((streamInfo->type != PICTURE_STREAM_TYPE || !streamInfo->isScaledPicture) && /* only pass unscaled pictures */ msk_accept_stream(dualSink->x11Sink, streamInfo)) *************** *** 695,699 **** if (dvsInfo && dvsInfo->buffer) dvs_result = msk_receive_stream_frame(dualSink->dvsSink, streamId, dvsInfo->buffer, bufferSize); ! x11Info = get_x11_info(dualSink, streamId); if (x11Info && x11Info->buffer) { --- 705,709 ---- if (dvsInfo && dvsInfo->buffer) dvs_result = msk_receive_stream_frame(dualSink->dvsSink, streamId, dvsInfo->buffer, bufferSize); ! x11Info = get_x11_info(dualSink, streamId); if (x11Info && x11Info->buffer) { *************** *** 914,917 **** --- 924,928 ---- newDualSink->dualOSD.set_play_state = dusk_osd_set_play_state; newDualSink->dualOSD.set_state = dusk_osd_set_state; + newDualSink->dualOSD.set_play_state_position = dusk_osd_set_play_state_position; newDualSink->dualOSD.set_minimum_audio_stream_level = dusk_osd_set_minimum_audio_stream_level; newDualSink->dualOSD.set_audio_lineup_level = dusk_osd_set_audio_lineup_level; Index: audio_switch_sink.c =================================================================== RCS file: /cvsroot/ingex/ingex/player/ingex_player/audio_switch_sink.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** audio_switch_sink.c 29 Jan 2009 07:10:26 -0000 1.4 --- audio_switch_sink.c 19 Apr 2011 10:08:48 -0000 1.5 *************** *** 787,791 **** } ! static void qas_snap_audio_to_video(void* data) { DefaultAudioSwitch* swtch = (DefaultAudioSwitch*)data; --- 787,791 ---- } ! static void qas_snap_audio_to_video(void* data, int enable) { DefaultAudioSwitch* swtch = (DefaultAudioSwitch*)data; *************** *** 793,798 **** PTHREAD_MUTEX_LOCK(&swtch->nextCurrentGroupMutex); ! haveSwitched = (swtch->snapToVideo != 1); ! swtch->snapToVideo = 1; PTHREAD_MUTEX_UNLOCK(&swtch->nextCurrentGroupMutex); --- 793,798 ---- PTHREAD_MUTEX_LOCK(&swtch->nextCurrentGroupMutex); ! haveSwitched = (enable < 0 || swtch->snapToVideo != enable); ! swtch->snapToVideo = (enable < 0 ? !swtch->snapToVideo : enable); PTHREAD_MUTEX_UNLOCK(&swtch->nextCurrentGroupMutex); *************** *** 812,816 **** if (index == 0) { ! qas_snap_audio_to_video(data); return 1; } --- 812,816 ---- if (index == 0) { ! qas_snap_audio_to_video(data, 1); return 1; } *************** *** 936,944 **** } ! void asw_snap_audio_to_video(AudioSwitchSink* swtch) { if (swtch && swtch->snap_audio_to_video) { ! swtch->snap_audio_to_video(swtch->data); } } --- 936,944 ---- } ! void asw_snap_audio_to_video(AudioSwitchSink* swtch, int enable) { if (swtch && swtch->snap_audio_to_video) { ! swtch->snap_audio_to_video(swtch->data, enable); } } Index: audio_switch_sink.h =================================================================== RCS file: /cvsroot/ingex/ingex/player/ingex_player/audio_switch_sink.h,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** audio_switch_sink.h 2 Jun 2010 11:12:14 -0000 1.4 --- audio_switch_sink.h 19 Apr 2011 10:08:48 -0000 1.5 *************** *** 39,43 **** int (*switch_prev_audio_group)(void* data); int (*switch_audio_group)(void* data, int index); ! void (*snap_audio_to_video)(void* data); }; --- 39,43 ---- int (*switch_prev_audio_group)(void* data); int (*switch_audio_group)(void* data, int index); ! void (*snap_audio_to_video)(void* data, int enable); }; *************** *** 48,52 **** int asw_switch_prev_audio_group(AudioSwitchSink* swtch); int asw_switch_audio_group(AudioSwitchSink* swtch, int index); ! void asw_snap_audio_to_video(AudioSwitchSink* swtch); --- 48,52 ---- int asw_switch_prev_audio_group(AudioSwitchSink* swtch); int asw_switch_audio_group(AudioSwitchSink* swtch, int index); ! void asw_snap_audio_to_video(AudioSwitchSink* swtch, int enable); Index: player.c =================================================================== RCS file: /cvsroot/ingex/ingex/player/ingex_player/player.c,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** player.c 18 Oct 2010 17:56:14 -0000 1.29 --- player.c 19 Apr 2011 10:08:48 -0000 1.30 *************** *** 621,625 **** { (*numVITCLines) = 0; ! const char *text_ptr = text; while ((*numVITCLines) < MAX_VITC_LINE_READ) { --- 621,625 ---- { (*numVITCLines) = 0; ! const char *text_ptr = text; while ((*numVITCLines) < MAX_VITC_LINE_READ) { *************** *** 627,631 **** break; (*numVITCLines)++; ! text_ptr = strchr(text_ptr, ','); if (!text_ptr) --- 627,631 ---- break; (*numVITCLines)++; ! text_ptr = strchr(text_ptr, ','); if (!text_ptr) *************** *** 633,640 **** text_ptr++; } ! if (text_ptr && text_ptr[0] != '\0') return 0; ! return 1; } --- 633,640 ---- text_ptr++; } ! if (text_ptr && text_ptr[0] != '\0') return 0; ! return 1; } *************** *** 771,774 **** --- 771,794 ---- } + static int parse_osd_position(const char* arg, OSDPlayStatePosition* position) + { + if (strcmp(arg, "top") == 0) + { + *position = OSD_PS_POSITION_TOP; + return 1; + } + else if (strcmp(arg, "middle") == 0) + { + *position = OSD_PS_POSITION_MIDDLE; + return 1; + } + else if (strcmp(arg, "bottom") == 0) + { + *position = OSD_PS_POSITION_BOTTOM; + return 1; + } + + return 0; + } *************** *** 900,903 **** --- 920,924 ---- fprintf(stderr, " --vitc-read <lines> Read VITC from 625-line VBI, where <lines> is comma seperated list of lines to try (e.g. '19,21')\n"); fprintf(stderr, " --display-dim Output image at display dimensions rather than stored dimensions, eg. skip VBI\n"); + fprintf(stderr, " --osd-pos <pos> Set the position of the player state OSD. Valid values are 'top', 'middle' and 'bottom'. Default is 'bottom'\n"); fprintf(stderr, "\n"); fprintf(stderr, "Inputs:\n"); *************** *** 1063,1066 **** --- 1084,1088 ---- VITCReaderSinkSource *vitcReaderSonk = NULL; int useDisplayDimensions = 0; + OSDPlayStatePosition osdPlayStatePosition = OSD_PS_POSITION_BOTTOM; memset(inputs, 0, sizeof(inputs)); *************** *** 2003,2006 **** --- 2025,2044 ---- cmdlnIndex++; } + else if (strcmp(argv[cmdlnIndex], "--osd-pos") == 0) + { + if (cmdlnIndex + 1 >= argc) + { + usage(argv[0]); + fprintf(stderr, "Missing argument for %s\n", argv[cmdlnIndex]); + return 1; + } + if (!parse_osd_position(argv[cmdlnIndex + 1], &osdPlayStatePosition)) + { + usage(argv[0]); + fprintf(stderr, "Invalid argument for %s\n", argv[cmdlnIndex]); + return 1; + } + cmdlnIndex += 2; + } else if (strcmp(argv[cmdlnIndex], "-m") == 0 || strcmp(argv[cmdlnIndex], "--mxf") == 0) *************** *** 2600,2604 **** } } ! /* finalise the blank video sources */ if (!mls_finalise_blank_sources(multipleSource)) --- 2638,2642 ---- } } ! /* finalise the blank video sources */ if (!mls_finalise_blank_sources(multipleSource)) *************** *** 2642,2646 **** /* open vitc reader */ ! if (numVITCLines > 0) { --- 2680,2684 ---- /* open vitc reader */ ! if (numVITCLines > 0) { *************** *** 2650,2654 **** /* this is needed because the vitc reader can't be buffered because it requires the raw (decoded) video image to decode the vitc */ ! if (!mls_create(&sourceAspectRatio, maxLength, &maxLengthFrameRate, &multipleSource)) { --- 2688,2692 ---- /* this is needed because the vitc reader can't be buffered because it requires the raw (decoded) video image to decode the vitc */ ! if (!mls_create(&sourceAspectRatio, maxLength, &maxLengthFrameRate, &multipleSource)) { *************** *** 2663,2669 **** g_player.mediaSource = mls_get_media_source(multipleSource); } ! /* create vitc reader and assign */ ! if (!vss_create_vitc_reader(vitcLines, numVITCLines, &vitcReaderSonk)) { --- 2701,2707 ---- g_player.mediaSource = mls_get_media_source(multipleSource); } ! /* create vitc reader and assign */ ! if (!vss_create_vitc_reader(vitcLines, numVITCLines, &vitcReaderSonk)) { *************** *** 2678,2682 **** goto fail; } ! if (!mls_finalise_blank_sources(multipleSource)) { --- 2716,2720 ---- goto fail; } ! if (!mls_finalise_blank_sources(multipleSource)) { *************** *** 2852,2857 **** assert(0); } ! ! #if defined(HAVE_PORTAUDIO) /* create audio sink */ --- 2890,2895 ---- assert(0); } ! ! #if defined(HAVE_PORTAUDIO) /* create audio sink */ *************** *** 2888,2892 **** } } ! /* create video switch, half split or frame sequence sink */ --- 2926,2930 ---- } } ! /* create video switch, half split or frame sequence sink */ *************** *** 3032,3036 **** /* set vitc reader target sink */ ! if (vitcReaderSonk != NULL) { --- 3070,3074 ---- /* set vitc reader target sink */ ! if (vitcReaderSonk != NULL) { *************** *** 3038,3042 **** g_player.mediaSink = vss_get_media_sink(vitcReaderSonk); } ! /* disable streams */ --- 3076,3080 ---- g_player.mediaSink = vss_get_media_sink(vitcReaderSonk); } ! /* disable streams */ *************** *** 3174,3193 **** mc_set_osd_timecode(ply_get_media_control(g_player.mediaPlayer), 0, shmDefaultTimecodeType, shmDefaultTimecodeSubType); } ! ! /* set the VTR error level and register the VTR error sources */ ! mc_set_vtr_error_level(ply_get_media_control(g_player.mediaPlayer), (VTRErrorLevel)vtrErrorLevel); mc_show_vtr_error_level(ply_get_media_control(g_player.mediaPlayer), showVTRErrorLevel); ! /* set mark filter */ ! for (i = 0; i < numMarkFilters; i++) { mc_set_mark_filter(ply_get_media_control(g_player.mediaPlayer), i, markFilters[i]); } ! ! /* qc or not control stuff */ --- 3212,3231 ---- mc_set_osd_timecode(ply_get_media_control(g_player.mediaPlayer), 0, shmDefaultTimecodeType, shmDefaultTimecodeSubType); } ! ! /* set the VTR error level and register the VTR error sources */ ! mc_set_vtr_error_level(ply_get_media_control(g_player.mediaPlayer), (VTRErrorLevel)vtrErrorLevel); mc_show_vtr_error_level(ply_get_media_control(g_player.mediaPlayer), showVTRErrorLevel); ! /* set mark filter */ ! for (i = 0; i < numMarkFilters; i++) { mc_set_mark_filter(ply_get_media_control(g_player.mediaPlayer), i, markFilters[i]); } ! ! /* qc or not control stuff */ *************** *** 3231,3234 **** --- 3269,3277 ---- + /* set the OSD position */ + + mc_set_osd_play_state_position(ply_get_media_control(g_player.mediaPlayer), osdPlayStatePosition); + + /* print source info */ Index: media_player.c =================================================================== RCS file: /cvsroot/ingex/ingex/player/ingex_player/media_player.c,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** media_player.c 13 Oct 2010 12:34:32 -0000 1.16 --- media_player.c 19 Apr 2011 10:08:48 -0000 1.17 *************** *** 85,89 **** int disableOSDDisplay; int disableOSDDisplayChanged; ! VTRErrorLevel vtrErrorLevel; int nextVTRErrorLevel; --- 85,89 ---- int disableOSDDisplay; int disableOSDDisplayChanged; ! VTRErrorLevel vtrErrorLevel; int nextVTRErrorLevel; *************** *** 169,173 **** int markFilterPos[MAX_MARK_SELECTIONS]; int numMarkSelections; ! /* menu handler */ MenuHandler* menuHandler; --- 169,173 ---- int markFilterPos[MAX_MARK_SELECTIONS]; int numMarkSelections; ! /* menu handler */ MenuHandler* menuHandler; *************** *** 767,771 **** { MediaPlayer* player = (MediaPlayer*)data; ! PTHREAD_MUTEX_LOCK(&player->stateMutex) --- 767,771 ---- { MediaPlayer* player = (MediaPlayer*)data; ! PTHREAD_MUTEX_LOCK(&player->stateMutex) *************** *** 783,787 **** { MediaPlayer* player = (MediaPlayer*)data; ! PTHREAD_MUTEX_LOCK(&player->stateMutex) --- 783,787 ---- { MediaPlayer* player = (MediaPlayer*)data; ! PTHREAD_MUTEX_LOCK(&player->stateMutex) *************** *** 803,807 **** { osd_show_vtr_error_level(msk_get_osd(player->mediaSink), enable); ! switch_source_info_screen(player); } --- 803,807 ---- { osd_show_vtr_error_level(msk_get_osd(player->mediaSink), enable); ! switch_source_info_screen(player); } *************** *** 834,838 **** PTHREAD_MUTEX_LOCK(&player->stateMutex) ! if (!player->state.locked) { --- 834,838 ---- PTHREAD_MUTEX_LOCK(&player->stateMutex) ! if (!player->state.locked) { *************** *** 845,849 **** } } ! PTHREAD_MUTEX_UNLOCK(&player->stateMutex) } --- 845,849 ---- } } ! PTHREAD_MUTEX_UNLOCK(&player->stateMutex) } *************** *** 854,858 **** PTHREAD_MUTEX_LOCK(&player->stateMutex) ! if (!player->state.locked) { --- 854,858 ---- PTHREAD_MUTEX_LOCK(&player->stateMutex) ! if (!player->state.locked) { *************** *** 862,866 **** } } ! PTHREAD_MUTEX_UNLOCK(&player->stateMutex) } --- 862,866 ---- } } ! PTHREAD_MUTEX_UNLOCK(&player->stateMutex) } *************** *** 871,875 **** PTHREAD_MUTEX_LOCK(&player->stateMutex) ! if (!player->state.locked) { --- 871,875 ---- PTHREAD_MUTEX_LOCK(&player->stateMutex) ! if (!player->state.locked) { *************** *** 879,883 **** } } ! PTHREAD_MUTEX_UNLOCK(&player->stateMutex) } --- 879,883 ---- } } ! PTHREAD_MUTEX_UNLOCK(&player->stateMutex) } *************** *** 934,937 **** --- 934,954 ---- } + static void ply_set_osd_play_state_position(void* data, OSDPlayStatePosition position) + { + MediaPlayer* player = (MediaPlayer*)data; + + PTHREAD_MUTEX_LOCK(&player->stateMutex) + + if (!player->state.locked) + { + osd_set_play_state_position(msk_get_osd(player->mediaSink), position); + + switch_source_info_screen(player); + player->state.refreshRequired = 1; + } + + PTHREAD_MUTEX_UNLOCK(&player->stateMutex) + } + static void ply_switch_next_video(void* data) { *************** *** 1030,1034 **** } ! static void ply_snap_audio_to_video(void* data) { MediaPlayer* player = (MediaPlayer*)data; --- 1047,1051 ---- } ! static void ply_snap_audio_to_video(void* data, int enable) { MediaPlayer* player = (MediaPlayer*)data; *************** *** 1036,1040 **** if (!player->state.locked) { ! asw_snap_audio_to_video(msk_get_audio_switch(player->mediaSink)); switch_source_info_screen(player); --- 1053,1057 ---- if (!player->state.locked) { ! asw_snap_audio_to_video(msk_get_audio_switch(player->mediaSink), enable); switch_source_info_screen(player); *************** *** 1366,1370 **** return 0; } ! if ((size_t)player->frameInfo.numTimecodes < sizeof(player->frameInfo.timecodes) / sizeof(TimecodeInfo)) { --- 1383,1387 ---- return 0; } ! if ((size_t)player->frameInfo.numTimecodes < sizeof(player->frameInfo.timecodes) / sizeof(TimecodeInfo)) { *************** *** 1372,1378 **** player->frameInfo.timecodes[player->frameInfo.numTimecodes].timecodeType = streamInfo->timecodeType; player->frameInfo.timecodes[player->frameInfo.numTimecodes].timecodeSubType = streamInfo->timecodeSubType; ! *buffer = (unsigned char*)&player->frameInfo.timecodes[player->frameInfo.numTimecodes].timecode; ! player->frameInfo.numTimecodes++; } --- 1389,1395 ---- player->frameInfo.timecodes[player->frameInfo.numTimecodes].timecodeType = streamInfo->timecodeType; player->frameInfo.timecodes[player->frameInfo.numTimecodes].timecodeSubType = streamInfo->timecodeSubType; ! *buffer = (unsigned char*)&player->frameInfo.timecodes[player->frameInfo.numTimecodes].timecode; ! player->frameInfo.numTimecodes++; } *************** *** 1408,1412 **** return 0; } ! haveStreamInfo = msc_get_stream_info(player->mediaSource, streamId, &streamInfo); --- 1425,1429 ---- return 0; } ! haveStreamInfo = msc_get_stream_info(player->mediaSource, streamId, &streamInfo); *************** *** 1606,1610 **** continue; } ! numEvents = svt_read_num_events(streamEle->eventBuffer); for (i = 0; i < numEvents; i++) --- 1623,1627 ---- continue; } ! numEvents = svt_read_num_events(streamEle->eventBuffer); for (i = 0; i < numEvents; i++) *************** *** 1621,1625 **** } } ! /* reset */ streamEle->eventBufferSize = 0; --- 1638,1642 ---- } } ! /* reset */ streamEle->eventBufferSize = 0; *************** *** 2126,2129 **** --- 2143,2147 ---- newPlayer->control.next_osd_timecode = ply_next_osd_timecode; newPlayer->control.toggle_show_audio_level = ply_toggle_show_audio_level; + newPlayer->control.set_osd_play_state_position = ply_set_osd_play_state_position; newPlayer->control.switch_next_video = ply_switch_next_video; newPlayer->control.switch_prev_video = ply_switch_prev_video; *************** *** 2333,2339 **** PTHREAD_MUTEX_UNLOCK(&player->stateMutex) ! /* process VTR error level changes */ ! if (currentState.vtrErrorLevel != player->vtrErrorLevel) { --- 2351,2357 ---- PTHREAD_MUTEX_UNLOCK(&player->stateMutex) ! /* process VTR error level changes */ ! if (currentState.vtrErrorLevel != player->vtrErrorLevel) { *************** *** 2348,2352 **** /* process marks filter changes */ ! for (i = 0; i < player->numMarkSelections; i++) { --- 2366,2370 ---- /* process marks filter changes */ ! for (i = 0; i < player->numMarkSelections; i++) { *************** *** 2367,2371 **** } /* else ignore change */ ! player->enabledShowMarks[i] = currentState.enabledShowMarks[i]; player->markFilterPos[i] = currentState.markFilterPos[i]; --- 2385,2389 ---- } /* else ignore change */ ! player->enabledShowMarks[i] = currentState.enabledShowMarks[i]; player->markFilterPos[i] = currentState.markFilterPos[i]; *************** *** 2381,2385 **** player->markFilterPos[i] = SHOW_ALL_MARK_FILTER_POS; } ! if (player->markFilterPos[i] >= SHOW_NONE_MARK_FILTER_POS) { markFilter = 0; --- 2399,2403 ---- player->markFilterPos[i] = SHOW_ALL_MARK_FILTER_POS; } ! if (player->markFilterPos[i] >= SHOW_NONE_MARK_FILTER_POS) { markFilter = 0; *************** *** 2398,2402 **** } ! /* update the sink OSD */ --- 2416,2420 ---- } ! /* update the sink OSD */ *************** *** 2425,2429 **** } ! PTHREAD_MUTEX_LOCK(&player->stateMutex) player->state.setOSDTimecode = 0; --- 2443,2447 ---- } ! PTHREAD_MUTEX_LOCK(&player->stateMutex) player->state.setOSDTimecode = 0; *************** *** 2789,2796 **** send_state_change_event(player); ! ! /* send source name change events */ ! send_source_name_change_event(player); --- 2807,2814 ---- send_state_change_event(player); ! ! /* send source name change events */ ! send_source_name_change_event(player); *************** *** 2875,2879 **** { assert(sizeof(BasicMark) == sizeof(Mark)); ! BasicMark *basicMarks = NULL; int numMarks = mpm_get_marks(&player->playerMarks, &basicMarks); --- 2893,2897 ---- { assert(sizeof(BasicMark) == sizeof(Mark)); ! BasicMark *basicMarks = NULL; int numMarks = mpm_get_marks(&player->playerMarks, &basicMarks); *************** *** 2882,2886 **** return 0; } ! *marks = (Mark*)basicMarks; return numMarks; --- 2900,2904 ---- return 0; } ! *marks = (Mark*)basicMarks; return numMarks; Index: keyboard_input_connect.c =================================================================== RCS file: /cvsroot/ingex/ingex/player/ingex_player/keyboard_input_connect.c,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** keyboard_input_connect.c 18 Jun 2010 09:44:51 -0000 1.13 --- keyboard_input_connect.c 19 Apr 2011 10:08:48 -0000 1.14 *************** *** 307,311 **** break; case 'p': ! mc_snap_audio_to_video(connect->control); break; case 'r': --- 307,311 ---- break; case 'p': ! mc_snap_audio_to_video(connect->control, -1); break; case 'r': Index: media_control.c =================================================================== RCS file: /cvsroot/ingex/ingex/player/ingex_player/media_control.c,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** media_control.c 2 Jun 2010 11:12:14 -0000 1.11 --- media_control.c 19 Apr 2011 10:08:48 -0000 1.12 *************** *** 284,287 **** --- 284,295 ---- } + void mc_set_osd_play_state_position(MediaControl *control, OSDPlayStatePosition position) + { + if (control && control->set_osd_play_state_position) + { + control->set_osd_play_state_position(control->data, position); + } + } + void mc_switch_next_video(MediaControl* control) { *************** *** 348,356 **** } ! void mc_snap_audio_to_video(MediaControl* control) { if (control && control->snap_audio_to_video) { ! control->snap_audio_to_video(control->data); } } --- 356,364 ---- } ! void mc_snap_audio_to_video(MediaControl* control, int enable) { if (control && control->snap_audio_to_video) { ! control->snap_audio_to_video(control->data, enable); } } Index: on_screen_display.c =================================================================== RCS file: /cvsroot/ingex/ingex/player/ingex_player/on_screen_display.c,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** on_screen_display.c 18 Feb 2011 16:28:52 -0000 1.20 --- on_screen_display.c 19 Apr 2011 10:08:48 -0000 1.21 *************** *** 148,152 **** OSDListener* listener; ! OverlayWorkspace workspace; --- 148,152 ---- OSDListener* listener; ! OverlayWorkspace workspace; *************** *** 613,616 **** --- 613,617 ---- int markOn; int haveVTRErrorLevel; + int yPosAdjustment = 0; *************** *** 629,632 **** --- 630,648 ---- + /* y position adjustment for elements associated with the timecode and progress bar */ + switch (osdd->state->osdPlayStatePosition) + { + case OSD_PS_POSITION_TOP: + yPosAdjustment = - 10; + break; + case OSD_PS_POSITION_MIDDLE: + yPosAdjustment = - 5; + break; + case OSD_PS_POSITION_BOTTOM: + yPosAdjustment = 0; + break; + } + + /* start/stop ticker use if required */ *************** *** 691,695 **** { xPos = (width - osdd->osdPauseSymbol->w) / 2; ! yPos = (height * 11) / 16 - osdd->osdPauseSymbol->h / 2; CHK_ORET(apply_overlay(osdd->osdPauseSymbol, image, osdd->videoFormat, width, height, xPos, yPos, txtY, txtU, txtV, box, &osdd->workspace)); --- 707,711 ---- { xPos = (width - osdd->osdPauseSymbol->w) / 2; ! yPos = (height * (11 + yPosAdjustment)) / 16 - osdd->osdPauseSymbol->h / 2; CHK_ORET(apply_overlay(osdd->osdPauseSymbol, image, osdd->videoFormat, width, height, xPos, yPos, txtY, txtU, txtV, box, &osdd->workspace)); *************** *** 698,702 **** { xPos = (width - osdd->osdPlaySymbol->w) / 2; ! yPos = (height * 11) / 16 - osdd->osdPlaySymbol->h / 2; CHK_ORET(apply_overlay(osdd->osdPlaySymbol, image, osdd->videoFormat, width, height, xPos, yPos, txtY, txtU, txtV, box, &osdd->workspace)); --- 714,718 ---- { xPos = (width - osdd->osdPlaySymbol->w) / 2; ! yPos = (height * (11 + yPosAdjustment)) / 16 - osdd->osdPlaySymbol->h / 2; CHK_ORET(apply_overlay(osdd->osdPlaySymbol, image, osdd->videoFormat, width, height, xPos, yPos, txtY, txtU, txtV, box, &osdd->workspace)); *************** *** 705,709 **** { xPos = (width - osdd->osdReversePlaySymbol->w) / 2; ! yPos = (height * 11) / 16 - osdd->osdReversePlaySymbol->h / 2; CHK_ORET(apply_overlay(osdd->osdReversePlaySymbol, image, osdd->videoFormat, width, height, xPos, yPos, txtY, txtU, txtV, box, &osdd->workspace)); --- 721,725 ---- { xPos = (width - osdd->osdReversePlaySymbol->w) / 2; ! yPos = (height * (11 + yPosAdjustment)) / 16 - osdd->osdReversePlaySymbol->h / 2; CHK_ORET(apply_overlay(osdd->osdReversePlaySymbol, image, osdd->videoFormat, width, height, xPos, yPos, txtY, txtU, txtV, box, &osdd->workspace)); *************** *** 715,719 **** xPos = (width - (osdd->osdPlaySymbol->w + osdd->numberData.cs_ovly[0].w * numberStringLen + 5)) / 2; ! yPos = (height * 11) / 16 - osdd->osdPlaySymbol->h / 2; CHK_ORET(apply_overlay(osdd->osdFastForwardSymbol, image, osdd->videoFormat, width, height, xPos, yPos, txtY, txtU, txtV, box, &osdd->workspace)); --- 731,735 ---- xPos = (width - (osdd->osdPlaySymbol->w + osdd->numberData.cs_ovly[0].w * numberStringLen + 5)) / 2; ! yPos = (height * (11 + yPosAdjustment)) / 16 - osdd->osdPlaySymbol->h / 2; CHK_ORET(apply_overlay(osdd->osdFastForwardSymbol, image, osdd->videoFormat, width, height, xPos, yPos, txtY, txtU, txtV, box, &osdd->workspace)); *************** *** 733,737 **** xPos = (width - (osdd->osdPlaySymbol->w + osdd->numberData.cs_ovly[0].w * numberStringLen + 5)) / 2; ! yPos = (height * 11) / 16 - osdd->osdPlaySymbol->h / 2; for (i = 0; i < numberStringLen; i++) { --- 749,753 ---- xPos = (width - (osdd->osdPlaySymbol->w + osdd->numberData.cs_ovly[0].w * numberStringLen + 5)) / 2; ! yPos = (height * (11 + yPosAdjustment)) / 16 - osdd->osdPlaySymbol->h / 2; for (i = 0; i < numberStringLen; i++) { *************** *** 753,757 **** { xPos = (width - (osdd->state->markConfigs.numConfigs * (osdd->markOverlay.w + MARK_OVERLAY_SPACING)) - MARK_OVERLAY_SPACING) / 2; ! yPos = (height * 11) / 16 + osdd->osdPlaySymbol->h / 2 + 5; for (i = 0; i < osdd->state->markConfigs.numConfigs; i++) --- 769,773 ---- { xPos = (width - (osdd->state->markConfigs.numConfigs * (osdd->markOverlay.w + MARK_OVERLAY_SPACING)) - MARK_OVERLAY_SPACING) / 2; ! yPos = (height * (11 + yPosAdjustment)) / 16 + osdd->osdPlaySymbol->h / 2 + 5; for (i = 0; i < osdd->state->markConfigs.numConfigs; i++) *************** *** 765,769 **** (frameInfo->vtrErrorLevel != VTR_NO_ERROR_LEVEL && frameInfo->vtrErrorCode >= frameInfo->vtrErrorLevel))); } ! if (markOn) { --- 781,785 ---- (frameInfo->vtrErrorLevel != VTR_NO_ERROR_LEVEL && frameInfo->vtrErrorCode >= frameInfo->vtrErrorLevel))); } ! if (markOn) { *************** *** 789,796 **** } } ! ! /* vtr error level */ ! haveVTRErrorLevel = 0; for (i = 0; i < frameInfo->numMarkSelections; i++) --- 805,812 ---- } } ! ! /* vtr error level */ ! haveVTRErrorLevel = 0; for (i = 0; i < frameInfo->numMarkSelections; i++) *************** *** 801,805 **** frameInfo->vtrErrorCode >= (uint8_t)frameInfo->vtrErrorLevel); } ! if (osdd->state->showVTRErrorLevel && isMarked && haveVTRErrorLevel) { --- 817,821 ---- frameInfo->vtrErrorCode >= (uint8_t)frameInfo->vtrErrorLevel); } ! if (osdd->state->showVTRErrorLevel && isMarked && haveVTRErrorLevel) { *************** *** 808,818 **** txtV = g_rec601YUVColours[LIGHT_WHITE_COLOUR].V; box = 80; ! sprintf(vtrErrorCodeString, "%d+%d", frameInfo->vtrErrorCode & 0x0f, (frameInfo->vtrErrorCode >> 4) & 0x0f); vtrErrorCodeStringLen = strlen(vtrErrorCodeString); xPos = (width - (osdd->vtrErrorCodeData.cs_ovly[0].w * vtrErrorCodeStringLen)) / 2; ! yPos = (height * 8) / 16 - osdd->vtrErrorCodeData.cs_ovly[0].h / 2; ! for (i = 0; i < vtrErrorCodeStringLen; i++) { --- 824,843 ---- txtV = g_rec601YUVColours[LIGHT_WHITE_COLOUR].V; box = 80; ! sprintf(vtrErrorCodeString, "%d+%d", frameInfo->vtrErrorCode & 0x0f, (frameInfo->vtrErrorCode >> 4) & 0x0f); vtrErrorCodeStringLen = strlen(vtrErrorCodeString); xPos = (width - (osdd->vtrErrorCodeData.cs_ovly[0].w * vtrErrorCodeStringLen)) / 2; ! switch (osdd->state->osdPlayStatePosition) ! { ! case OSD_PS_POSITION_TOP: ! case OSD_PS_POSITION_BOTTOM: ! yPos = (height * 8) / 16 - osdd->vtrErrorCodeData.cs_ovly[0].h / 2; ! break; ! case OSD_PS_POSITION_MIDDLE: ! yPos = (height * 3) / 16 - osdd->vtrErrorCodeData.cs_ovly[0].h / 2; ! break; ! } ! for (i = 0; i < vtrErrorCodeStringLen; i++) { *************** *** 825,829 **** k = vtrErrorCodeString[i] - '0'; } ! CHK_ORET(apply_overlay(&osdd->vtrErrorCodeData.cs_ovly[k], image, osdd->videoFormat, width, height, xPos, yPos, txtY, txtU, txtV, box, &osdd->workspace)); --- 850,854 ---- k = vtrErrorCodeString[i] - '0'; } ! CHK_ORET(apply_overlay(&osdd->vtrErrorCodeData.cs_ovly[k], image, osdd->videoFormat, width, height, xPos, yPos, txtY, txtU, txtV, box, &osdd->workspace)); *************** *** 852,856 **** timecodeXPos = (width - (osdd->timecodeTypeData.cs_ovly[UNKNOWN_TC_OVLY_IDX].w * 5 / 3 + osdd->timecodeTextData.width)) / 2; ! timecodeYPos = (height * 13) / 16 - osdd->timecodeTextData.height / 2; timecodeWidth = osdd->timecodeTypeData.cs_ovly[UNKNOWN_TC_OVLY_IDX].w * 5 / 3 + osdd->timecodeTextData.width; --- 877,881 ---- timecodeXPos = (width - (osdd->timecodeTypeData.cs_ovly[UNKNOWN_TC_OVLY_IDX].w * 5 / 3 + osdd->timecodeTextData.width)) / 2; ! timecodeYPos = (height * (13 + yPosAdjustment)) / 16 - osdd->timecodeTextData.height / 2; timecodeWidth = osdd->timecodeTypeData.cs_ovly[UNKNOWN_TC_OVLY_IDX].w * 5 / 3 + osdd->timecodeTextData.width; *************** *** 878,882 **** hour %= 24; } ! if ((frameInfo->frameRate.num == 50 && frameInfo->frameRate.den == 1) || (frameInfo->frameRate.num == 60 && frameInfo->frameRate.den == 1) || --- 903,907 ---- hour %= 24; } ! if ((frameInfo->frameRate.num == 50 && frameInfo->frameRate.den == 1) || (frameInfo->frameRate.num == 60 && frameInfo->frameRate.den == 1) || *************** *** 925,929 **** timecodeXPos = (width - (osdd->timecodeTypeData.cs_ovly[UNKNOWN_TC_OVLY_IDX].w * 5 / 3 + osdd->timecodeTextData.width)) / 2; ! timecodeYPos = (height * 13) / 16 - osdd->timecodeTextData.height / 2; timecodeWidth = osdd->timecodeTypeData.cs_ovly[UNKNOWN_TC_OVLY_IDX].w * 5 / 3 + osdd->timecodeTextData.width; --- 950,954 ---- timecodeXPos = (width - (osdd->timecodeTypeData.cs_ovly[UNKNOWN_TC_OVLY_IDX].w * 5 / 3 + osdd->timecodeTextData.width)) / 2; ! timecodeYPos = (height * (13 + yPosAdjustment)) / 16 - osdd->timecodeTextData.height / 2; timecodeWidth = osdd->timecodeTypeData.cs_ovly[UNKNOWN_TC_OVLY_IDX].w * 5 / 3 + osdd->timecodeTextData.width; *************** *** 936,941 **** /* timecode */ xPos = timecodeXPos + osdd->timecodeTypeData.cs_ovly[UNKNOWN_TC_OVLY_IDX].w * 5 / 3; ! CHK_ORET(apply_timecode_overlay(&osdd->timecodeTextData, hour, min, sec, frame, ! frameInfo->timecodes[osdd->state->timecodeIndex].timecode.isDropFrame, image, osdd->videoFormat, width, height, xPos, timecodeYPos, txtY, txtU, txtV, box, &osdd->workspace)); } --- 961,966 ---- /* timecode */ xPos = timecodeXPos + osdd->timecodeTypeData.cs_ovly[UNKNOWN_TC_OVLY_IDX].w * 5 / 3; ! CHK_ORET(apply_timecode_overlay(&osdd->timecodeTextData, hour, min, sec, frame, ! frameInfo->timecodes[osdd->state->timecodeIndex].timecode.isDropFrame, image, osdd->videoFormat, width, height, xPos, timecodeYPos, txtY, txtU, txtV, box, &osdd->workspace)); } *************** *** 2177,2180 **** --- 2202,2212 ---- } + static void osdd_set_play_state_position(void* data, OSDPlayStatePosition position) + { + DefaultOnScreenDisplay* osdd = (DefaultOnScreenDisplay*)data; + + osd_set_play_state_position(osds_get_osd(osdd->state), position); + } + static void osdd_set_minimum_audio_stream_level(void* data, double level) { *************** *** 2559,2563 **** destroy_mutex(&osdd->setMenuModelMutex); destroy_mutex(&osdd->setMarksModelMutex); ! clear_overlay_workspace(&osdd->workspace); --- 2591,2595 ---- destroy_mutex(&osdd->setMenuModelMutex); destroy_mutex(&osdd->setMarksModelMutex); ! clear_overlay_workspace(&osdd->workspace); *************** *** 2689,2692 **** --- 2721,2732 ---- } + void osd_set_play_state_position(OnScreenDisplay* osd, OSDPlayStatePosition position) + { + if (osd && osd->set_play_state_position) + { + osd->set_play_state_position(osd->data, position); + } + } + void osd_set_minimum_audio_stream_level(OnScreenDisplay* osd, double level) { *************** *** 2879,2883 **** CALLOC_ORET(newOSDD, DefaultOnScreenDisplay, 1); ! init_overlay_workspace(&newOSDD->workspace); --- 2919,2923 ---- CALLOC_ORET(newOSDD, DefaultOnScreenDisplay, 1); ! init_overlay_workspace(&newOSDD->workspace); *************** *** 2898,2901 **** --- 2938,2942 ---- newOSDD->osd.set_play_state = osdd_set_play_state; newOSDD->osd.set_state = osdd_set_state; + newOSDD->osd.set_play_state_position = osdd_set_play_state_position; newOSDD->osd.set_minimum_audio_stream_level = osdd_set_minimum_audio_stream_level; newOSDD->osd.set_audio_lineup_level = osdd_set_audio_lineup_level; *************** *** 3601,3604 **** --- 3642,3652 ---- } + static void osds_set_play_state_position(void* data, OSDPlayStatePosition position) + { + OnScreenDisplayState* state = (OnScreenDisplayState*)data; + + state->osdPlayStatePosition = position; + } + *************** *** 3623,3626 **** --- 3671,3675 ---- newState->osd.set_play_state = osds_set_play_state; newState->osd.set_state = osds_set_state; + newState->osd.set_play_state_position = osds_set_play_state_position; newState->osd.set_minimum_audio_stream_level = osds_set_minimum_audio_stream_level; newState->osd.set_audio_lineup_level = osds_set_audio_lineup_level; Index: media_control.h =================================================================== RCS file: /cvsroot/ingex/ingex/player/ingex_player/media_control.h,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** media_control.h 2 Jun 2010 11:12:14 -0000 1.11 --- media_control.h 19 Apr 2011 10:08:48 -0000 1.12 *************** *** 104,107 **** --- 104,108 ---- void (*next_osd_timecode)(void* data); void (*toggle_show_audio_level)(void* data); + void (*set_osd_play_state_position)(void* data, OSDPlayStatePosition position); *************** *** 120,124 **** void (*switch_prev_audio_group)(void* data); void (*switch_audio_group)(void* data, int index); ! void (*snap_audio_to_video)(void* data); --- 121,125 ---- void (*switch_prev_audio_group)(void* data); void (*switch_audio_group)(void* data, int index); ! void (*snap_audio_to_video)(void* data, int enable /* -1=toggle, 0=disable, 1=enable*/); *************** *** 188,191 **** --- 189,193 ---- void mc_next_osd_timecode(MediaControl* control); void mc_toggle_show_audio_level(MediaControl* control); + void mc_set_osd_play_state_position(MediaControl *control, OSDPlayStatePosition position); void mc_switch_next_video(MediaControl* control); *************** *** 198,202 **** void mc_switch_prev_audio_group(MediaControl* control); void mc_switch_audio_group(MediaControl* control, int index); ! void mc_snap_audio_to_video(MediaControl* control); void mc_set_half_split_orientation(MediaControl* sink, int vertical); --- 200,204 ---- void mc_switch_prev_audio_group(MediaControl* control); void mc_switch_audio_group(MediaControl* control, int index); ! void mc_snap_audio_to_video(MediaControl* control, int enable); void mc_set_half_split_orientation(MediaControl* sink, int vertical); Index: on_screen_display.h =================================================================== RCS file: /cvsroot/ingex/ingex/player/ingex_player/on_screen_display.h,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** on_screen_display.h 2 Jun 2010 11:12:14 -0000 1.8 --- on_screen_display.h 19 Apr 2011 10:08:48 -0000 1.9 *************** *** 117,120 **** --- 117,127 ---- typedef struct OnScreenDisplayState OnScreenDisplayState; + typedef enum + { + OSD_PS_POSITION_BOTTOM = 0, + OSD_PS_POSITION_MIDDLE, + OSD_PS_POSITION_TOP, + } OSDPlayStatePosition; + typedef struct { *************** *** 153,156 **** --- 160,165 ---- int (*set_state)(void* data, const OnScreenDisplayState* state); + void (*set_play_state_position)(void* data, OSDPlayStatePosition position); + void (*set_minimum_audio_stream_level)(void* data, double level); void (*set_audio_lineup_level)(void* data, float level); *************** *** 168,172 **** void (*set_marks_model)(void* data, int updateMask, OSDMarksModel* model); void (*set_second_marks_model)(void* data, int updateMask, OSDMarksModel* model); ! void (*show_vtr_error_level)(void* data, int enable); --- 177,181 ---- void (*set_marks_model)(void* data, int updateMask, OSDMarksModel* model); void (*set_second_marks_model)(void* data, int updateMask, OSDMarksModel* model); ! void (*show_vtr_error_level)(void* data, int enable); *************** *** 208,211 **** --- 217,221 ---- int osd_set_play_state(OnScreenDisplay* osd, OSDPlayState state, int value); int osd_set_state(OnScreenDisplay* osd, const OnScreenDisplayState* state); + void osd_set_play_state_position(OnScreenDisplay* osd, OSDPlayStatePosition position); void osd_set_minimum_audio_stream_level(OnScreenDisplay* osd, double level); void osd_set_audio_lineup_level(OnScreenDisplay* osd, float level); *************** *** 288,291 **** --- 298,302 ---- int timecodeIndex; int timecodeStreamId; + OSDPlayStatePosition osdPlayStatePosition; int showFieldSymbol; int showVTRErrorLevel; Index: buffered_media_sink.c =================================================================== RCS file: /cvsroot/ingex/ingex/player/ingex_player/buffered_media_sink.c,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** buffered_media_sink.c 12 Feb 2010 14:00:06 -0000 1.7 --- buffered_media_sink.c 19 Apr 2011 10:08:48 -0000 1.8 *************** *** 549,552 **** --- 549,559 ---- } + static void bms_osd_set_play_state_position(void* data, OSDPlayStatePosition position) + { + BufferedMediaSink* bufSink = (BufferedMediaSink*)data; + + osd_set_play_state_position(osds_get_osd(bufSink->osdState), position); + } + static void bms_osd_set_minimum_audio_stream_level(void* data, double level) { *************** *** 755,758 **** --- 762,766 ---- newBufSink->bufOSD.set_play_state = bms_osd_set_play_state; newBufSink->bufOSD.set_state = bms_osd_set_state; + newBufSink->bufOSD.set_play_state_position = bms_osd_set_play_state_position; newBufSink->bufOSD.set_minimum_audio_stream_level = bms_osd_set_minimum_audio_stream_level; newBufSink->bufOSD.set_audio_lineup_level = bms_osd_set_audio_lineup_level; |